写在前面

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


GAZEBO与ROS不一样

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


给机器人添加bumper

之所以说了上述的东西,主要的原因是因为sdf文件中其实多了很多urdf中没有的东西(多数是一些tag的attribution),比如我们在写visual标签的时候,一般都是不写name这个attribution的,但是在GAZEBO做转换的时候,会添加name这个属性,这个属性我们是不能从urdf文件中推断出来的!!!
举个例子,假如我们要给机器人添加一个bumper,那么我们需要在urdf文件中添加如下代码:

<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>标签,该标签的名字就是我们要找的东西。

举个例子:
比如我的bumper定义如下(必须要提醒的是尽量在<collision>中写上name,方便在sdf文件中查找):

<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,这就是我们最终要找的东西。

GAZEBO探索——给机器人加上bumper相关推荐

  1. gazebo中给机器人添加16线激光雷达跑LIO-SAM

    目录: 前言 1.下载雷达仿真包 2.添加雷达支架描述文件 3.添加雷达描述文件 4.启动仿真 5.添加IMU模块 6.添加RGB-D相机 7.LIO-SAM仿真 安装依赖 安装GTSAM 编译LIO ...

  2. 使用机器人操作系统ROS 2和仿真软件Gazebo 9搭建机器人教程(一)

    参考链接:https://github.com/bunchofcoders/basic_bocbot 本文为使用ROS 2和Gazebo9搭建仿真机器人详细指南. 确保已按如下说明安装ROS和Gaze ...

  3. 【环境配置】gazebo搭建仿真机器人研究动态障碍物算法

    0前言 最近由于实验过程中遇到一些问题,打算直接仿真了,利用一个月时间把整体的仿真环境搭建出来,这里对最近的学习成果,进行梳理. 1Gazebo 学习准备: urdf基本语法 xacro基本语法 一个 ...

  4. Gazebo下多机器人协同控制

    软件平台 Ubuntu 18.04 ROS Melodic Gazebo 硬件平台(可选) Turtlebot3 预备知识 了解 ROS 的基本操作逻辑,若需学习,可移步我的专栏:ROS 学习记录 目 ...

  5. Udacity机器人软件工程师课程笔记(十六)-机械臂仿真控制实例(其一)-Gazebo、RViz和Moveit!

    机械臂仿真控制实例 目录 环境设置 项目工具介绍 Gazebo (1)Gazebo组件 (2)Gazebo界面 统一机器人描述格式(URDF) RViz Moveit! 1.环境设置 对于此项目,使用 ...

  6. gazebo 直接获取传感器数据_【ROS-Gazebo】IMU插件使用与数据采集——以四足机器人pigot为例...

    最近在琢磨别的事情,Gazebo探索上面进展不大,但也有一些收获,秉承慢慢写的佛系态度记录一下:pigot四足项目的步态改进,前行换成了摆线步态,加入了斜向步态 Gazebo-IMU(惯性测量单元)插 ...

  7. Gazebo仿真学习——3.使用ROS-control设置模拟控制器驱动机器人关节

    ROS-control 1.ROS-control 总体架构 2.Controllers 3.Hardware Interface 4.Transmissions 5.Joint Limits 5.1 ...

  8. ROS(indigo)机器人操作系统学习有趣丰富的Gazebo仿真示例evarobot

    通过网页快速了解Linux(Ubuntu)和ROS机器人操作系统,请参考实验楼在线系统如下: 初级教程可参考:https://www.shiyanlou.com/courses/854 邀请码:U23 ...

  9. Universal Robot——在Gazebo中模拟UR5机器人

    今天的目标是在Gazebo安装我们的ur5机器人.Gazebo是一个流行的模拟工具,它不仅可以让你像在Rviz中一样可视化你的机器人,而且还内置了一个物理引擎.这样你就可以在更真实的环境中测试你的机器 ...

最新文章

  1. Gut:卡姆果提取物改变肠道菌群预防小鼠肥胖
  2. php绑定邮箱地址链接,php完美匹配邮箱、链接地址和电话号码
  3. leetcode-169.求众数
  4. Python3中的内置函数
  5. 检查 Flutter 应用程序是否在 Web 上运行
  6. Q1全球智能机销量增长3.9% 三星苹果华为居三甲
  7. wxWidgets:wxSizer类用法
  8. GPS定位系统源码只有这种才是最适合做二次开发的...
  9. 栈区,堆区,全局区,文字常量区,程序代码区详解(程序中不同类型数据所在区)
  10. Java加密与解密的艺术~数字签名~ECDSA实现
  11. C语言和设计模式(解释器模式)
  12. 三元运算符最终结果的数据类型
  13. DevExpress WPF控件3D打印应用场景 - 实现3D打印系统可视化窗口
  14. linux4.12 交叉编译链,交叉编译工具链(很详细)
  15. Switch Transformer模型解读-Introduction
  16. 像电影里的黑客高手一样敲代码攻击入侵网站!装逼神器 !
  17. 工业互联网+危化安全生产综合管理平台怎样建
  18. 达梦工具数据迁移 违反唯一约束
  19. 派件系统c语言实验报告,物流规划与优化选址实验报告.doc
  20. php谷歌地图,php – 使用谷歌地图提交位置

热门文章

  1. linux 中swap分区的中庸是什么
  2. recreate() 更新主题样式 切换主题
  3. 计算机怎么变成音乐,如何将电脑上的视频转换成mp3音频?
  4. 未转变者服务器指令不掉落,未转变者服务器怎么设置死亡不掉落quest; | 手游网游页游攻略大全...
  5. 苹果睁眼壁纸太酷了,点亮屏幕就睁眼,喜欢的拿去吧!
  6. 虚拟机里搭建服务器,在VMware Workstation Pro中搭建server虚拟机(图文教程)
  7. python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
  8. 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?
  9. [转] 一个U盘病毒简单分析
  10. html网易云音乐地址播放代码,请求到了网易云歌曲到在线地址,如何在web页面中播放?...