项目场景:
关于机器人在Gazebo中不报错,且不能移动问题
问题描述
- 设置好Gazebo端控制器及其配置,并且在Moveit端设置好对应配置
- 使用launch文件打开Gazebo和Moveit,所有控制器启动成功
- 使用Moveit设置target,在rviz中可以看到机器人顺利plan,并且terminal log中显示execution succeed.
- 但是Gazebo中的机器人模型却不移动,并且Moveit端和Gazebo端都没有报错。
原因分析:
这种情况是urdf的模型参数问题。我的问题在于urdf中link标签下inertia中的数值太小,所以机器人几乎不移动。或许有及其微小的移动,但是很难察觉到,这也是Gazebo端不报错的原因。
解决方案:
将inertia中的ixx,iyy,izz调大,发送命令后机器人关节成功驱动。
更新
后面又遇到了这个问题,但这次我希望不改变关节的质量和惯性参数以达到真实仿真的目的。这次我重新分析了模型,根本原因在于模型质量过大,而urdf中的effort limit设置过于小。比如我自己的整个机器几十公斤,一个部件就有几公斤,但是此时我的effort limit设置还是1,肯定是无法把机器人带起来了,具体代码如下:
<joint
name="${leg_prefix}_yaw_joint"
type="revolute">
<origin xyz="${yaw_xyz}" rpy="${yaw_rpy}"/>
<parent link="base_link" />
<child link="${leg_prefix}_yaw_link" />
<axis xyz="0 0 -1" />
<dynamics damping="0.0" friction="0.0"/>
<limit lower="-0.3927" upper="0.3927" effort="1" velocity="1" /> //urdf中的关节limit设置过于小,输出力上限就是1
</joint>
当我把limit的值设定大一些,机器人就能够动起来了,我觉得这才是比较好的解决方法。
另外,当机器人的质量过大时,我们还得调节控制器中的pid参数,才能够让机器人达到良好的运行效果。