Moveit适配拓展轴
1.概述
睿尔曼关节模组和机械臂连接时可以被自动识别,并且睿尔曼机械臂提供同时控制机械臂和拓展关节模组的通信协议(限一个拓展关节)。因此,用户可以在RM机械臂的基础上添加外部关节,构建新的机器人结构并控制,方便客户针对自己的需求设计与拓展机器人以完成指定功能。
在连接外部拓展关节后,我们才仅仅可以通过机械臂json通信协议整体控制机械臂和拓展关节,运动轨迹需要我们自己设置与下发,对于场景应用不友好。
ROS中的moveit插件提供了轨迹规划功能,能够自动计算机械臂运动轨迹并下发,是场景开发的常用功能插件。
RM机械臂提供ROS驱动,能够接收moveit的运动规划。工作空间中的功能包含义如下:
序号 | 名称 | 作用 |
1 | rm_description | 机器人描述功能包,其中有创建好的机器人模型和配置文件 |
2 | rm_moveit_config | 使用Setup Assistant工具根据机械臂URDF模型rm_65.urdf.xacro创建生成的一个MoveIt配置的功能包,它包含了大部分MoveIt启动所需的配置文件和启动文件,以及包含一个简单的演示demo |
3 | rm_gazebo | gazebo仿真机器人所用到参数和文件配置 |
4 | rm_demo | MoveIt编程示例,包括场景规划、避障规划和pick and place |
5 | rm_msgs | RM机械臂所用到的所有控制消息和状态消息 |
6 | rm_control | 机器人控制器,将Moveit规划的机械臂轨迹,通过三次样条插值细分,按照20ms的控制周期发给rm_driver节点,周期可调,但是应大于10ms |
7 | rm_driver | (1)与机械臂通过以太网口建立socket连接,机器人IP地址:192.168.1.18,请保证上位机的IP在同一局域网内,使用ROS控制机械臂,请务必确认机械臂处于以太网口通信模式; (2)订阅各topic数据,更新RVIZ内机械臂各关节角度 |
8 | rm_bringup | 启动机器人,运行对应的launch文件后,可自动运行rm_driver,rm_control和moveit交互RVIZ界面,直接在仿真界面中拖拽机器人即可控制真实机器人运动 |
但拓展关节模组在RM机械臂的ROS驱动包中并未定义。因此,若想通过Moveit一体控制RM机械臂,需要根据机器人修改对应的文件。所以整体思路应该如下:
2.适配操作
2.1确定对应话题及消息格式
首先在rm_driver下查找到对应的下发话题,可以看到moveit的规划轨迹通过jointPos_callback下发指定json消息给机械臂,所以这里的数据是最终到机械臂控制器的,我们需要将moveit规划的轨迹以正确的格式传进来。注意,官网源码中,拓展轴数据定义是expand = msg.expand,而我们需要将拓展轴和机械臂关节同时规划,保持数据一致,应该改为expand = msg.expand * RAD_DEGREE;
在rm_msgs下查找到joint_pos的消息类型,可以看到拓展轴消息expand构造,和关节一样都是float类型,因此后续发布joint_pos的消息时,如果带上拓展轴的数据,则会将拓展轴一起控制。
2.2制作urdf模型
需要根据自己的设计,给出对应的urdf模型,例如在rm_scr单臂复合机器人中,我们定义腰部旋转关节joint_arm_rotary是我们的拓展关节,因此在urdf模型中给出相应的物理关系,之后再将urdf模型转为xacro模型。这一步是后续拓展关节能够和机械臂一起运动的关键所在,只有模型关系正确,真实环境下的机器人才可以执行对应的规划轨迹。
2.3制作moveit_config
有了正确的xacro文件后,我们需要通过moveit setup assistant工具制作moveit_config功能包,自动生成MoveIt启动所需的配置文件和启动文件。
在配置moveit_config时,需要注意设置的动作规划组,如图中规划组我们设置为arm是包含拓展轴的,因此拓展轴是和机械臂一体的。
后续设置控制器,要注意控制器的名称,必须和后续文件中服务器名称保持一致才可以正确下发,否则机械臂无法接收到moveit下发的轨迹消息。设置完成后,选择生成文件,务必将所有文件勾选,以更新所有文件参数。
生成moveit_config文件夹后,进入config子文件夹中打开controller.yaml文件,将controller的名字改为和moveit setup assistant工具设置时的一致,并且joints要和设置的动作规划组一致。
之后再打开同级下的ros_controller.yaml,也需要保证对应的名称保持一致。
最后还需要在joint_limits.yaml文件中正确规定拓展轴的参数。
2.4修改robot_control
修改完参数文件后,还需要对应修改rm_control/src文件下的rm_control.cpp文件,这是moveit规划的轨迹点成功下发到机械臂执行的关节文件。
模仿机械臂关节的代码,写出拓展轴的代码,定义拓展轴的速度、加速度、位置。
参照机械臂关节的定义方式,将拓展关节加入规划算法中
后续将计算出的轨迹点,根据消息格式将拓展轴数据加入,然后发布到指定话题中。
最后再次确认此处编写的服务器名称和参数文件中的一致,否则数据无法正确传输,导致机械臂真实运动规划失败。
修改完代码后,重新编译整个工作空间,编译通过后就可以测试效果。
2.5测试
打开终端,执行以下命令先运行rm_control节点:
cd ~/你的工作空间/
source devel/setup.bash
roslaunch rm_control rm_control.launch
然后再打开一个新的终端,执行以下命令启动rm_driver节点和加载MoveIt的rviz:
cd ~/你的工作空间/
source devel/setup.bash
roslaunch rm_bringup rm_robot.launch
在弹出的rviz界面中,找到plan栏,在拖动机械臂后,点击paln and excute就可以看到机械臂与拓展轴一体规划轨迹了。