ROS:关于xacro模型在gazebo的加载

ROS:关于xacro模型在gazebo的加载

这个模型加载问题折磨了我好几天,今天总算是找到问题所在。我还一直以为是新版本的问题,结果却是自己的问题——不够仔细。因此记录下来,引以为戒。

1.问题描述:惯性矩阵没有正确加载

虽然遇到了很多问题,但都可以归结为一个问题:

在调用宏定义时,必须加上xacro:,这是新版本的noetic与旧版本的区别。若没有加上这句前缀,则在rvizgazebo中都会遇到显示不全的问题。

这个区别虽然我早就知道了,但还是花费了好几天才成功在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:后,模型就可以正常显示了,该宏定义也正常展开。

究其原因,还是因为没有仔细检查。一念之差,还以为是新版本的问题,差点就打算重装系统了。。。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值