本文基于ubuntu20.04 gazebo11.11 ros noetic
一、联合仿真架构讲解
- 在开始教程之前,我需要先讲清楚配置流程与联合仿真的架构
(1)配置流程:
我们需要先下载moveit助手和你需要进行仿真的机械臂模型,urdf或者xacro都可以,后面的文章我会讲到他们两者的区别。然后moveit助手经过一系列的配置之后会生成一个功能包,这个功能包包含了单rviz、gazebo+rviz联合仿真的示例代码,只需要运行这个功能包的不同启动文件,就可以实现不同的仿真例程,可以说是非常方便了。
(2)联合仿真架构:
其实联合仿真架构的细节我也并不是很能讲明白,我没有研究过moveit底层的源码,我只能一定程度地解释大致的框架。简单来说,联合仿真中有四样东西是最重要的,分别是:仿真环境(gazebo),路径规划可视化(rviz),路径规划运算(moveit),机器人控制器(ros control)。仿真架构大概是这样一个流程:我们通过rviz的控制ui,或者自己写的调用moveit api的控制脚本,给机器人控制器发送控制指令,这个控制指令可以是单个关节的角度或者移动到某目标点,如果是后者的话就需要moveit先进行路径规划运算后在发送给机器人控制器下达控制指令,然后rviz订阅规划规划的话题,将规划路径在rviz上可视化,而机械臂收到控制指令后,开始运动,并将运动信息通过话题发布出去,gazebo和rviz则订阅这个话题,来将实际运动可视化。
这个联合仿真架构我自己理解也不深,可能会有很多错误,恳请各位大佬批评指正!但无论如何,大致架构不会偏离很多。
二、moveit下载
- 在终端输入以下指令下载,版本换成自己的ros版本:
sudo apt-get install ros-noetic-moveit
- 输入以下指令检测moveit是否成功下载:
roslaunch moveit_setup_assistant setup_assistant.launch
出现以下界面即为安装成功,这个moveit助手也是我们一会需要用到的重要工具,简单来说就是用来生成仿真例程的:
三、mycobot 350 pi 机械臂模型下载
官网链接:https://github.com/elephantrobotics/mycobot_ros
据我所知官网是没有联合仿真的例程的(不然也不会给个还没配好的urdf),只有rviz的路径规划仿真,所以这里我们只取用官网提供的mycobot 320 pi urdf模型文件。
- 下载完后解压打开:
- 将整个mycobot_description拷贝到自己的工作空间中catkin_ws/src:
- 编译一下:
cd catkin_ws/
catkin_make
-
打开mycobot_description/urdf,找到自己想要的模型,我这里选择mycobot320 pi moveit版本,点进去顺便把其他两个urdf删除了:
-
打开urdf文件,在文件base link的定义前面加入:
<link name="world"/>
<joint name="fixed_base" type="fixed">
<parent link="world"/>
<child link="base"/>
<origin xyz="0 0 0.07" rpy="0 0 0"/>
</joint>
像这样:
加入这段代码的作用是将模型固定在gazebo直接中,如果不加,后面联合仿真的时候模型就会倒塌。
-
继续在这个urdf文件中,拉到最后定义joint的部分,将velocity全部设置为2.0:
为什么要改速度限制呢,因为mycobot官方根本没管这个模型在gazebo仿真的表现,所以没有加速度限制,这会导致模型在gazebo仿真的时候出现卡顿,关节速度不一致,甚至直接卡死的问题。如果有好奇的朋友可以保持速度限制为0尝试一下。 -
最后将urdf文件后缀改为new_mycobot_pro_320_pi_moveit_2022.urdf.xacro:
为什么要这样改呢,因为后面需要加入相机的模型,但不可能将源码直接加在这个urdf里面,就需要用到xacro文件的独特的拓展性,可以将其他xacro文件包含进去,类似正常的编程语言一样,其实xacro文件就是升级版urdf,感兴趣的朋友可以搜索下urdf与xacro的区别。不过其实如果这里不改后缀,等用moveit助手生成完后再修改也可以,不过那时候除了修改模型文件后缀之后还需要修改模型的启动launch文件,我以后或许会写一篇专门写urdf与xacro文件转换的文章,到时候会把链接放在这里。 -
新建一个文件夹,mycobot_moveit_config,用来装后面moveit助手生成的功能包:
四、moveit配置
- 输入以下指令打开moveit助手:
roslaunch moveit_setup_assistant setup_assistant.launch
-
点击create New Moveit Configutation package
-
点击右边的browse,找到刚刚我们修改的那个xacro,然后点load files
-
出现以下界面,模型顺利加载则成功:
-
self-collisions栏直接点击generate,这里是自动配置机械臂关节运动间忽略碰撞体积的:
-
virtual joint栏直接跳过,这个地方是配置机械臂是否需要固定在某个其他移动平台上的,我们已经固定在了世界上,所以不需要配,有需要的朋友再研究下这个不分。
-
Planing Groups栏很重要,点击add Group然后配置成这样即可,kdl_kinematics_plugin是一种逆运动学的算法,每种算法各有优势,大家可以自行检索,下面的RRTconnect是轨迹规划的其中一种方式,同样的,区别大家自行检索即可。点击add kin.Chain(其实以jonit或者link的方式去将整个机械臂运动部分包含也是可以的):
然后base link选择world,tip link选择你自己的末端link,我这里选择link6,点击save即可:
-
Robot Poses栏是用于配置机器人默认的姿态的,可以单个可以多个,配置完之后在用rviz的ui控制机械臂的时候就可以使用你预先设置的姿态。点击add pose,这里我们只设置一个home即可,点save保存:
-
end effectors栏是用于添加末端执行器的,目前还不需要加末端执行器,所以这一栏我没有配置,如果有需要的朋友可以参考其他联合仿真博客,集众家之所长。不配置不影响机械臂的动作仿真。
-
passive joints栏是配置被动关节的,比如你机械臂的link上有外壳,或者有额外的部件需要加载末端执行器上就可以配置,我这边没有,所以跳过。
-
controllers栏比较重要,网上基本上全部联合仿真的博客都是教你选择position_controllers,然后后面再更改配置文件启动文件等,但其实这是旧版moveit的配置,我也是被坑的很惨。新版的moveit只需要直接点击auto add按钮就可以:
这里moveit助手自动帮我们选择了力控制器,如果自行更改成其他控制器则会导致仿真失败,说实话到底为什么会这样我也搞不懂,欢迎各位大佬解答我的疑问。至于力控制器,速度控制器,位置控制器有什么区别,大家感兴趣可以自行检索,ros_control官网就有讲解,这里不多赘述。
-
simulation栏也很重要,moveit助手自动帮你将gazebo仿真需要用到的gazebo插件代码加入到你的urdf中,比如重量,惯性系数,虚拟关节电机等,可以直接复制粘贴覆盖你的urdf,也可以直接点击overwrite按钮直接覆盖。
-
3Dperception栏,这里我们没有用到,所以跳过。
-
Author information栏这里我们如实填写,moveit官方需要你的联系方式,不填生成不了。
-
最后configration files栏就是生成功能包的,我们点击browse,找到刚刚我们新建的mycobot_moveit_config文件夹,点open,最后点击generate,完成生成。
五、安装必要依赖包
- 安装ros_control依赖包,同样,版本号改成自己的,我的是noetic:
sudo apt-get install ros-noetic-ros-controllers
六、修改PID
- 打开mycobot_moveit_config/config/ros_controllers.yaml,然后将P都设置为1000:
为什么要这样做呢?因为如果是原本的100,机械臂的到达目标位置的力太小了,导致机械臂会因为力量不够无法到达目标点,这样一来命令行会报warning,并且在后面用moveit api脚本控制机械臂移动多个点的时候还会因为上一个动作没有到达目标位置导致下一个动作因为起始位置有误差而直接终止运动,所以这里我们把P改大。
七、启动联合仿真
- 输入以下指令启动联合仿真:
roslaunch mycobot_moveit_config demo_gazebo.launch
拖动rviz轨迹球,gazebo模型按轨迹流畅运动。
至此,联合仿真成功。