ROS:关于xacro模型在gazebo的加载
这个模型加载问题折磨了我好几天,今天总算是找到问题所在。我还一直以为是新版本的问题,结果却是自己的问题——不够仔细。因此记录下来,引以为戒。
1.问题描述:惯性矩阵没有正确加载
虽然遇到了很多问题,但都可以归结为一个问题:
在调用宏定义时,必须加上
xacro:
,这是新版本的noetic
与旧版本的区别。若没有加上这句前缀,则在rviz
和gazebo
中都会遇到显示不全的问题。
这个区别虽然我早就知道了,但还是花费了好几天才成功在gazebo
中加载出完整的模型(惯性矩阵是用于模拟模型的物体属性的,它对rviz
并没有影响,所以在rviz
上是可以正常显示的)。究其原因在于,在使用惯性矩阵的宏定义时,我忘记加上xacro:
的前缀,这会导致gazebo
无法正常显示模型,缺轮子或者干脆整个都不显示。
<!-- 惯性矩阵 -->
<xacro:macro name="box_inertial_matrix" params="m w h d">
<inertial>
<mass value="${m}" />
<inertia ixx="${m*(h*h+d*d)/12}" ixy="0" ixz="0"
iyy="${m*(w*w+d*d)/12}" iyz="0"
izz="${m*(w*w+h*h)/12}" />
</inertial>
</xacro:macro>
...
<link name="forward_${prefix}_wheel">
...
<!-- yes -->
<xacro:cylinder_inertial_matrix m="${wheel_mass}" r="${wheel_radius}" h="${wheel_length}" />
<!-- no -->
<cylinder_inertial_matrix m="${wheel_mass}" r="${wheel_radius}" h="${wheel_length}" />
...
</link>
2.问题解决
遇到以上问题后,在不断地调试后我偶然发现当xacro
文件描述的关节类型为fixed
时,模型就可以正常显示,但改为continuous
后就无法显示。google了一下这个问题后,发现是因为惯性矩阵没有正确加载。
这个可以通过查看参数服务器来验证。由于模型在载入gazebo
前,会首先上传到参数服务器中,由robot_description
储存。在运行launch
后,可以查看该参数内容,可以发现该宏定义box_inertial_matrix
并没有展开,说明惯性矩阵并没有正确加载。
在我添加前缀xacro:
后,模型就可以正常显示了,该宏定义也正常展开。
究其原因,还是因为没有仔细检查。一念之差,还以为是新版本的问题,差点就打算重装系统了。。。