基于Moveit2的人形机器人双臂规划2:对接真实机器人
在第一篇文章中我们完成了Moveit2的基本配置,可以在FakeSystem中测试规划,但是当机器人实际运行时,需要将规划结果发送给机器人。
在基本配置文件中有一个moveit_controllers.yaml,可以看到里面定义了控制器的类型
- 需要特别注意的一点是,标准的moveit配置文件生成的这个文件开头是
1 | moveit_controller_manager: moveit_simple_controller_manager/MoveItSimpleControllerManager |
- 但是用我接下来的控制机械臂方法是不会去写一个对接ROS controller的控制器,所以这个必须去掉,否则会一直报错无法找到控制器
1 | controller_names: |
在另一个配置文件ros2_controllers.yaml中定义了控制器的参数
1 | controller_manager: |
实际上Moveit2将规划结果发送给控制器就是调用了对应控制器的action服务,我们需要自己来实现这个action的服务端,根据上面的配置文件可以知道这个服务端的类型是FollowJointTrajectory,可以如下定义服务端
1 | using FollowJointTrajectory = control_msgs::action::FollowJointTrajectory; |
在服务端handle_accepted中处理服务请求,将规划结果发送给机器人,我们可以通过goal_handle->get_goal()->trajectory获得规划结果,也就是需要执行的一系列电机角度数组,根据机器人的具体SDK来发送给机器人,也可以根据实际情况对这个路径进行插值操作。
在执行以后这个server还需要一个反馈,moveit2根据这个反馈来判断路径执行到哪一步
以下代码是一个简单的示例,实现了接收路径并执行反馈的过程,没有对接具体机器人部分。
1 | (void) side; |
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !