解决gazebo碰撞检测插件bumper发布话题数据为空的问题

        在为gazebo里的仿真机器人添加碰撞检测功能的时候用到了libgazebo_ros_bumper.so这个插件,但是当运行仿真并进行碰撞测试后,查看插件发布的话题发现states里的数据为空。在折腾了整整一天以后终于找到了解决办法,具体也可以参考这篇博文:GAZEBO探索——给机器人加上bumper_gazebo bumper-CSDN博客,这里只是为了记录一下解决问题的过程以及进一步说明解决方法。

1、原因

        当我们在使用gazebo进行仿真时会编写和制作机器人的urdf或者xacro文件,但是对于gazebo来说,它能识别的只有sdf文件,所以在处理urdf或者xacro文件时会将其转换为sdf文件。但是在转换以后原来urdf或者xacro文件的一些参数会发生变换,当我们在使用libgazebo_ros_bumper插件时会指定碰撞体,这个名字的指定本来非常关键,虽然我们在编写urdf/xacro文件时指定了collision的name属性,如下图所示,但是当转换为sdf文件时这个名字发生了变换。这就是libgazebo_ros_bumper插件话题数据为空的关键所在。

解决gazebo碰撞检测插件bumper发布话题数据为空的问题_第1张图片

2.解决办法

1.将xacro转换为urdf文件

        如果你的模型文件本身就是urdf可以跳过这一步直接看第二步。首先是进入你存放xacro文件的文件夹,然后进行转换,注意这里指定转换的xacro文件必须集成了机器人所有组件的主xacro文件。具体操作如下:

cd your_xacro_dictPath
rosrun xacro xacro your_xacro.urdf.xacro > des.urdf #your_xacro.urdf.xacro

2.将urdf文件转换为sdf文件

        将你刚刚转换得到的urdf文件再转换为gazebo能够识别的sdf文件,这是为了查看机器人相关连杆collision属性在sdf文件格式下的真实name。在终端运行以下指令

gz sdf -p des.urdf.urdf> des.sdf

3.在转换好的sdf文件里查找collision关键词

        这是为了找到需要指定的碰撞体在sdf文件格式下的真实name,如下所示,base_footprint_fixed_joint_lump__base_link_collision_collision就是sdf格式下,base_link连杆collision属性的真实name.

解决gazebo碰撞检测插件bumper发布话题数据为空的问题_第2张图片

4.为仿真插件添加真实的碰撞体,具体如下:

解决gazebo碰撞检测插件bumper发布话题数据为空的问题_第3张图片

你可能感兴趣的:(功能测试)