ROS-moveit!探索(4)webots和moveit联合控制[2]
开源代码:volcano_moveit
webots版本:2021a
ros版本:melodic
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
前言
在探索3中,笔者介绍了在webots中使用<extern>外部控制器和moveit联合控制的案例。
这次笔者介绍如何在webots中使用ROS控制器和moveit联合控制。
1.通过探索3了解基本构成
moveit!的关系图如下所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rqzjB6HR-1612966339023)(3.jpg)]](https://i-blog.csdnimg.cn/blog_migrate/d0eeb4ad631ea1dbae5d01aa729aa3c0.jpeg#pic_center)
我们可以使用探索3中的例程来分析一下,我们需要处理什么数据。
- 打开webots,打开探索3中创建的世界
- 打开以下launch文件,设置所必须的ROS参数并且连接Webots中的UR机械臂
$ roslaunch ur_e_webots ur5e.launch
- 连接成功后,查看当前系统中的话题列表,如下所示。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tgY2YRTS-1612966339026)(1.png)]](https://i-blog.csdnimg.cn/blog_migrate/a824e391469ba497274465095eca3173.png#pic_center)
/follow_joint_trajectory开头的topic是Moveit!最终规划发布的action(第二节介绍)消息,由机器人控制器端接受该消息后控制机器人完成运动。/joint_states由机器人控制器端发布,主要发布机器人的当前状态信息,rostopic echo一下。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-upFsQvvF-1612966339027)(2.png)]](https://i-blog.csdnimg.cn/blog_migrate/b098a935c68a367501390fa0381b7a27.png#pic_center)
由此也是可以看出:
- 我们需要发布
/joint_states话题- 需要发布
/follow_joint_trajectoryaction消息
2. action消息是什么
2.1 什么是action
ROS中有一个actinlib的功能包集,实现了action的通讯机制。那么什么是action呢?action也是一种类似于service的问答通讯机制,不一样的地方是action还带有一个反馈机制,可以不断反馈任务的实施进度,而且可以在任务实施过程中,中止运行。
我们使用action来发布一个机器人的运动目标,机器人接到这个action后,就开始运动,在运动过程中不断反馈当前的运动状态,在运动过程中我们可以取消运动,让机器人停止,如果机器人完成了运动目标,那么action会返回任务完成的标志。
2.2 action的工作机制
action采用了服务器端/客户端(client and server)的工作模式,如下图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FPwqvTUT-1612966339029)(4.png)]](https://i-blog.csdnimg.cn/blog_migrate/1fc144abfffcea72a69dacf735586c48.png#pic_center)
client和server之间通过actionlib定义的“action protocol”进行通讯。这种通讯协议是基于ROS的消息机制实现的,为用户提供了client和server的接口,接口如下图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JmvolRsA-1612966339031)(5.png)]](https://i-blog.csdnimg.cn/blog_migrate/df186f5d6451f3d7840f34fa961e5ecb.png#pic_center)
在上边的action的接口框图上,我们可以看到,client向server端发布任务目标以及在必要的时候取消任务,server会向client发布当前的状态、实时的反馈和最终的任务结果。
- goal:任务目标
- cancel:请求取消任务
- status:通知client当前的状态
- feedback:周期反馈任务运行的监控数据
- result:向client发送任务的执行结果,这个topic只会发布一次。
想了解更多关于action的知识?古月居传送门
3. 逐步实现过程
3.1 新建功能包
至此,我们需要创建一个功能包用于创建一个新的Node,功能包名为volcano_moveit,他的作用是:
- 接受机器人产生的传感器数据,并且发布各个关节的关节状态话题
/joint_states。 - 处理MoveIt产生的运动信息,发送给机器人。
功能包结构如下:
volcano_moveit- launch
- ur_webots.launch ->webots启动文件,前期配置
- msg ->和ROS联合webots实战案例(一)安装配置webots一样操作,将srv、msg文件复制进来
- src
- robot_state_publisher.cpp ->发布
/joint_states - trajectory_follower.cpp ->处理action信息
- robot_state_publisher.cpp ->发布
- srv
- world ->webots地图
- worlds ->webots自动产生的文件夹
- CMakeLists.txt
- package.xml
- launch
3.2 配置文件
package.xml(笔者只展示因为moveit要添加的,其他不再赘述):
<!-- MoveIt -->
<exec_depend>controller_manager</exec_depend>
<build_depend>moveit_msgs</build_depend>

本文档详细介绍了如何在Webots中使用ROS控制器与MoveIt!进行联合控制。首先,通过分析exploration 3的案例,明确了需要处理的数据,包括/joint_states和/follow_joint_trajectory action消息。接着,介绍了ROS中的action机制,它带有反馈机制,适用于机器人运动控制。然后,逐步展示了创建新功能包volcano_moveit的步骤,包括发布/joint_states话题和处理/follow_joint_trajectory action消息的实现。最后,通过示例展示了如何测试整个控制系统,确保MoveIt!能够成功控制Webots中的机器人进行运动规划。
最低0.47元/天 解锁文章
398





