前言
如果是第一次使用Moveit!,建议先按照 Moveit与rviz官方教程 做一次,主要熟悉Moveit!能干什么。
上一篇文章说明了Moveit的配置方法。实际上,网上关于Moveit!的配置与使用有着大把的教程。然而,它们大都是基于官方说明文档的思路,即在Moveit!中进行配置,编写控制算法后在rviz中进行可视化,很少有探讨如何在Gazebo中进行仿真的。
Gazebo是一款与ROS深度融合的仿真器,相比于rviz,其对环境的模拟更加真实。因此,我在网络上搜集大量资料,并结合自己的实验后,验证了一种Moveit!与Gazebo结合的联合仿真方法,在此总结。
- 系统:ubuntu 18.04
- ROS:melodic
- 其余软件要求:Moveit!配置已完成(已有Moveit!创建的功能包);Gazebo可用;ros_control插件可用
概述
Moveit!与Gazebo的联合仿真,其主要思路为搭建ros_control和Moveit!的桥梁。先在Moveit!端配置关节和传感器接口yaml文件,将其加载到rviz端;再在机器人端配置ros_control和接口yaml文件,将机器人加载到Gazebo。最后同时启动加载有ros_control的Gazebo和加载有Moveit的rviz,达到联合仿真的目的。
Moveit!端的配置
在进行Moveit!端的配置之前,首先要保证你已经用配置助手成功生成了Moveit!配置功能包。
例如你的Moveit!配置功能包名为ROBOT_moveit_config,可以在终端中运行如下命令:
roslaunch ROBOT_moveit_config demo.launch
如果成功启动了rviz,界面中包含有你的机器人模型以及rviz控制界面,则说明满足要求。
建立控制器配置文件 controllers.yaml
首先,在 ROBOT_moveit_config/config/ 目录下创建名为 controllers.yaml 的配置文件:
controller_manager_ns: ''
controller_list:
- name: ROBOT/group1_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- joint_1
- joint_2
- joint_3
- joint_4
- joint_5
...
- name: ROBOT/group2_controller
action_ns: follow_joint_trajectory
type: FollowJointTrajectory
default: true
joints:
- joint_6
- joint_7
- joint_8
...
其中,“name”的内容为机器人的规划组,前面要加入命名空间;“joints”的内容为关节名称。其余内容不变。
修改启动文件 ROBOT_moveit_controller_manager.launch.xml
只要是正常生成的配置功能包,其 launch 文件夹中就已经含有ROBOT_moveit_controller_manager.launch.xml 文件了,在此我们只需要将其内容修改如下: