由于机械臂通信格式修改, 建议在2019年6月前发货的xArm 早期用户尽早 升级 控制器固件程序,这样才能在以后的更新中正常驱动机械臂运动以及使用最新开发的各种功能。请联系我们获得升级的详细指示。 当前ROS库主要的分支已不支持旧版本,先前版本的ROS驱动包还保留在 'legacy' 分支中, 但不会再有更新。
此代码库包含xArm模型文件以及相关的控制、规划等示例开发包。开发及测试使用的环境为 Ubuntu 16.04 + ROS Kinetic Kame。 以下的指令说明是基于xArm7, 其他型号用户可以在对应位置将'xarm7'替换成'xarm6'或'xarm5'
此代码库仍然处在早期开发阶段,新的功能支持、示例代码,bug修复等等会保持更新。
- 添加xArm 7(旧版)描述文档,3D图形文件以及controller示例,用于进行ROS可视化仿真模拟。
- 添加MoveIt!规划器支持,用于控制Gazebo/RViz模型或者xArm真机,但二者不可同时启动。
- 由ROS直接控制xArm真机的相关支持目前还是Beta版本,用户使用时应尽量小心,我们会尽快完善。
- 添加 xArm hardware interface 并在驱动真实机械臂时使用 ROS position_controllers/JointTrajectoryController。
- 添加 xArm 6 仿真和真机控制支持。
- 添加 xArm 机械爪仿真模型。
gazebo_ros_pkgs: http://gazebosim.org/tutorials?tut=ros_installing (如果使用Gazebo模拟器)
ros_control: http://wiki.ros.org/ros_control (记得选择您使用的 ROS 版本)
moveit_core: https://moveit.ros.org/install/
ROS Wiki: http://wiki.ros.org/
Gazebo Tutorial: http://gazebosim.org/tutorials
Gazebo ROS Control: http://gazebosim.org/tutorials/?tut=ros_control
Moveit tutorial: http://docs.ros.org/kinetic/api/moveit_tutorials/html/
这个模型在Gazebo demo中会用到。在Gazebo仿真环境中, 在model database列表里寻找 'table', 并将此模型拖入旁边的3D环境中. 通过这个操作,桌子的模型就会自动下载到本地。
如果您已经有了自己的catkin工作区,请跳过此步往下进行。 按照这里的教程生成catkin_ws。 请留意本文档已假设用户继续沿用 '~/catkin_ws' 作为默认的catkin工作区地址。
$ cd ~/catkin_ws/src
$ git clone https://github.com/xArm-Developer/xarm_ros.git
$ rosdep update
$ rosdep check --from-paths . --ignore-src --rosdistro kinetic
请将 'kinetic' 修改为您在使用的ROS版本。如有任何未安装的依赖包列出,请执行以下命令自动安装:
$ rosdep install --from-paths . --ignore-src --rosdistro kinetic -y
同样的,请将 'kinetic' 修改为您在使用的ROS版本。
$ cd ~/catkin_ws
$ catkin_make
$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
如果在您的 ~/.bashrc中已经有了以上语句,直接运行:
$ source ~/.bashrc
$ roslaunch xarm_description xarm7_rviz_display.launch
$ roslaunch xarm_gazebo xarm7_beside_table.launch [run_demo:=true]
指定'run_demo'为true时Gazebo环境启动后机械臂会自动执行一套编好的循环动作。 这套简单的command trajectory写在xarm_controller\src\sample_motion.cpp. 这个demo加载的控制器使用position interface(纯位置控制)。
包含xArm描述文档, mesh文件和gazebo plugin配置等等。 不推荐用户去修改urdf描述因为其他ros package对其都有依赖。
Gazebo world 描述文档以及仿真launch启动文档。用户可以在world中修改添加自己需要的模型与环境。
xarm使用的Controller配置, 硬件接口,轨迹指令源文件, 脚本以及launch文件。 用户可以基于这个包开发或者使用自己的package。注意 xarm_controller/config里面定义好的position/effort控制器仅用作仿真的示例, 当控制真实机械臂时只提供position_controllers/JointTrajectoryController接口。用户可以根据需要添加自己的controller, 参考: http://wiki.ros.org/ros_control (controllers)
内含加载xarm driver的启动文件,用来控制真实机械臂。
部分文档由moveit_setup_assistant自动生成, 用于Moveit Planner和Rviz可视化仿真。如果已安装MoveIt!,可以尝试跑demo:
$ roslaunch xarm7_moveit_config demo.launch
首先执行:
$ roslaunch xarm_gazebo xarm7_beside_table.launch
然后在另一个终端运行:
$ roslaunch xarm7_moveit_config xarm7_moveit_gazebo.launch
如果您在Moveit界面中规划了一条满意的轨迹, 点按"Execute"会使Gazebo中的虚拟机械臂同步执行此轨迹。
首先, 检查并确认xArm电源和控制器已上电开启, 然后运行:
$ roslaunch xarm7_moveit_config realMove_exec.launch robot_ip:=<控制盒的局域网IP地址>
检查terminal中的输出看看有无错误信息。如果启动无误,您可以将RViz中通过Moveit规划好的轨迹通过'Execute'按钮下发给机械臂执行。但一定确保它不会与周围环境发生碰撞!
这个简单包装实现的规划器接口是基于 Moveit!中的 move_group interface, 可以使用户通过service指定目标位置进行规划和执行。 这部分的详细使用方法请阅读xarm_planner包的文档。
$ roslaunch xarm_planner xarm_planner_realHW.launch robot_ip:=<控制盒的局域网IP地址> robot_dof:=<7|6|5>
'robot_dof'参数指的是xArm的关节数目 (默认值为7)。
这两个package提供给用户不需要自己进行轨迹规划(通过Moveit!或xarm_planner)就可以控制真实xArm机械臂的ros服务, xarm自带的控制盒会进行轨迹规划。 请 注意 这些service的执行并不通过面向'JointTrajectoryController'的hardware interface。当前支持三种运动命令(ros service同名):
- move_joint: 关节空间的点到点运动, 用户仅需要给定目标关节位置,运动过程最大关节速度/加速度即可。
- move_line: 笛卡尔空间的直线轨迹运动,用户需要给定工具中心点(TCP)目标位置以及笛卡尔速度、加速度。
- move_lineb: 圆弧交融的直线运动,给定一系列中间点以及目标位置。 每两个中间点间为直线轨迹,但在中间点处做一个圆弧过渡(需给定半径)来保证速度连续。 另外需要 注意 的是,使用以上三种service之前,需要通过service依次将机械臂模式(mode)设置为0,然后状态(state)设置为0。这些运动指令的意义和详情可以参考产品使用指南。除此之外还提供了其他xarm编程API支持的service调用, 对于相关ros service的定义在 xarm_msgs目录中。
首先启动xarm7 service server, 以下ip地址只是举例:
$ roslaunch xarm_bringup xarm7_server.launch robot_ip:=192.168.1.128
然后确保每个关节的控制已经使能, 参考SetAxis.srv:
$ rosservice call /xarm/motion_ctrl 8 1
在传递任何运动指令前,先依次设置正确的机械臂模式(0: POSE)和状态(0: READY), 参考SetInt16.srv:
$ rosservice call /xarm/set_mode 0
$ rosservice call /xarm/set_state 0
以下三个运动命令使用同类型的srv request: Move.srv。 比如,调用关节运动命令,最大速度 0.35 rad/s,加速度 7 rad/s^2:
$ rosservice call /xarm/move_joint [0,0,0,0,0,0,0] 0.35 7 0 0
调用笛卡尔空间指令,最大线速度 200 mm/s,加速度为 2000 mm/s^2:
$ rosservice call /xarm/move_line [250,100,300,3.14,0,0] 200 2000 0 0
调用回原点服务 (各关节回到0角度),最大角速度 0.35 rad/s,角加速度 7 rad/s^2:
$ rosservice call /xarm/go_home [] 0.35 7 0 0
我们在机械臂末端提供了两路数字、两路模拟输入信号接口,以及两路数字输出信号接口。
$ rosservice call /xarm/get_digital_in
$ rosservice call /xarm/get_analog_in 1 (最后一个参数:端口号,只能是1或者2)
$ rosservice call /xarm/set_digital_out 2 1 (设定输出端口2的逻辑为1)
注意检查这些service返回的"ret"值为0,来确保操作成功。
如果通过运行'xarm7_server.launch'连接了一台xArm机械臂,用户可以通过订阅 "/xarm_states" topic 获得机械臂当前的各种状态信息, 包括关节角度、工具坐标点的位置、错误、警告信息等等。具体的信息列表请参考RobotMsg.msg.
另一种选择是订阅 "/joint_states" topic, 它是以JointState.msg格式发布数据的, 但是当前 只有 "position" 是有效数据; "velocity" 是没有经过任何滤波的基于相邻两组位置数据进行的数值微分, 因而只能作为参考,我们目前还不提供 "effort" 的反馈数据.
基于运行时性能考虑,目前以上两个topic的数据更新率固定为 10Hz.
末端工具的偏移量可以也通过'/xarm/set_tcp_offset'服务来设定,参考下图,请注意这一坐标偏移量是基于 原始工具坐标系 (坐标系B)描述的,它位于末端法兰中心,并且相对基坐标系(坐标系A)有(PI, 0, 0)的RPY旋转偏移。
例如:
$ rosservice call /xarm/set_tcp_offset 0 0 20 0 0 0
这条命令设置了基于原始工具坐标系(x = 0 mm, y = 0 mm, z = 20 mm)的位置偏移量,还有(0 rad, 0 rad, 0 rad)的RPY姿态偏移量。如果需要请在每次重新启动/上电控制盒时设定一次正确的偏移量,因为此设定会掉电丢失。
有时控制器会因为掉电、位置或速度超限、规划失败等原因汇报错误,遇到这一状态需要手动解除。具体的错误代码可以在topic "/xarm_states" 的信息中找到。
$ rostopic echo /xarm_states
如果'err'字段数据为非零,需要对照用户手册找到原因并设法解决问题。之后,这一错误状态可以通过调用服务 "/xarm/clear_err" 清除:
$ rosservice call /xarm/clear_err
调用此服务之后 务必再次确认err状态信息 , 如果它变成了0, 说明问题清除成功,否则请再次确认问题是否成功解决。清除成功之后, 记得 将robot state设置为0 以便使机械臂可以执行后续指令。