GAZEBO探索——给机器人加上bumper

GAZEBO探索——给机器人加上bumper写在前面 最近在做 GAZEBO 的时候 遇到了给机器人添加 bumper 的问题 着实踩了很多坑 而且在 google 上查到的答案很多都不对 仅仅有一个方法给出了本质 这里特别记录一下 希望可以帮助更多的小伙伴 GAZEBO 与 ROS 不一样 首先这里必须要说清楚的一个事情就是

大家好,我是讯享网,很高兴认识大家。

写在前面

最近在做GAZEBO的时候,遇到了给机器人添加bumper的问题,着实踩了很多坑,而且在google上查到的答案很多都不对,仅仅有一个方法给出了本质,这里特别记录一下,希望可以帮助更多的小伙伴。


GAZEBO与ROS不一样

首先这里必须要说清楚的一个事情就是,我们在学习ROS的时候,使用urdf文件或者xacro文件表示我们的机器人,并且ROS提供了urdf相关的一些包来可视化我们的模型,但是,对于GAZEBO而言,并不认识urdf或者xacro文件,它只认识sdf文件,这也是在GAZEBO官网上只能看到教sdf文件的教程的原因,我们能在ROS中直接启动GAZEBO并在其中模拟机器人的运动,是因为中间GAZEBO将urdf文件转为了sdf文件,之后能被GAZEBO识别。


给机器人添加bumper


讯享网

<gazebo reference="bumper"> <sensor name="bumper_bumper_sensor" type="contact"> <visualize>true</visualize> <always_on>true</always_on> <update_rate>50.0</update_rate> <contact> <collision>joint_name</collision> </contact> <plugin name="gazebo_ros_bumper_controller" filename="libgazebo_ros_bumper.so"> <robotNamespace>/robot</robotNamespace> <bumperTopicName>bumper_states</bumperTopicName> <frameName>bumper</frameName> </plugin> </sensor> <material>Gazebo/Red</material> <mu1>0.1</mu1> <mu2>0.1</mu2> <gravity>true</gravity> <selfCollide>false</selfCollide> </gazebo> 

讯享网

我们要想把这个GAZEBO的传感器关联到机器人上,只需要在<collision>属性中写入你的bumper的<collision>标签名。
那接下来的任务就很简单了,找到这个<collision>标签名就可以了,但是正常情况下,我们在写<collision>标签的内容时候,一般是不管名字的,其实即使为<collision>附上名字,sdf中也会在该名字前面加上前缀,所以这个名字是不能显式知道的
 
下面先给出解决方法,之后会有一个例子进行讲解:

  1. 使用如下ROS命令将xacro文件转为model.urdf文件,当然如果你的文件就是urdf,那么不需要这一步
讯享网rosrun xacro xacro model.xacro > model.urdf 
  1. 使用GAZEBO的命令将urdf转换为sdf
gz sdf -p model.urdf> model.sdf 
  1. 在sdf中查找所有的<collision>,找到包含bumper零件的<collision>名字的<collision>标签,该标签的名字就是我们要找的东西。
讯享网<xacro:macro name="bumper" params="link_name radius length x y w"> <link name="${link_name}"> <inertial> <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/> <mass value="0.01"/> <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/> </inertial> <visual> <origin xyz="0.0 0.0 0.0" rpy="0.0 ${PI/2.0} 0"/> <geometry> <cylinder radius="${radius}" length="${length}"/> </geometry> <material name="red"> <color rgba="1.0 0.0 0.0 1.0"/> </material> </visual> <collision name="bumper"> <origin xyz="0.0 0.0 0.0" rpy="0.0 ${PI/2.0} 0"/> <geometry> <cylinder radius="${radius}" length="${length}"/> </geometry> </collision> </link> <joint name="base_${link_name}_joint" type="fixed"> <origin xyz="${x} ${y} 0" rpy="0.0 0.0 ${w}"/> <parent link="base_link"/> <child link="${link_name}"/> </joint> </xacro:macro> 

之后使用上面的两个命令,之后打开sdf,在base_link中搜索“collision”(这里假设你的bumper是安装在base_link上的,如果是和其他的link安装在一起的话就在那个link下寻找),个人的结果如下:
在这里插入图片描述
可以看到,名字中包含我们给bumper collision名字的就是base_link_fixed_joint_lump__bumper_collision_2,这就是我们最终要找的东西。

小讯
上一篇 2025-01-24 11:45
下一篇 2025-03-10 21:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60895.html