目录
安装
简介
URDF与Gazebo基本集成流程
创建功能包
编写URDF文件
启动Gazebo并显示模型
launch 文件实现:
命令行启动(去掉launch中的第三行加载模型)
集成到launch里启动
URDF集成Gazebo相关设置
collision
inertial
颜色设置
URDF集成Gazebo实操
框架搭建
编写封装惯性矩阵算法的 xacro 文件
底盘修改
驱动轮修改
支撑轮修改
传感器修改
雷达修改
Gazebo仿真环境搭建
方式一:用别人的仿真环境
方式二:自己搭建环境
方式三:自定义仿真环境
下载官方模型库
Gazebo是一款3D动态模拟器,用于显示机器人模型并创建仿真环境,能够在复杂的室内和室外环境中准确有效地模拟机器人。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,gzebo会默认被安装。
运行使用命令gazebo
或rosrun gazebo_ros gazebo
注意1:在 Ubuntu20.04 与 ROS Noetic 环境下,gazebo 启动异常以及解决
问题1:VMware: vmw_ioctl_command error Invalid argument(无效的参数)
解决:
echo "export SVGA_VGPU10=0" >> ~/.bashrc
source .bashrc
问题2:[Err] [REST.cc:205] Error in REST request
解决:sudo gedit ~/.ignition/fuel/config.yaml
然后将url : https://api.ignitionfuel.org
使用 # 注释
再添加url: https://api.ignitionrobotics.org
问题3:启动时抛出异常:[gazebo-2] process has died [pid xxx, exit code 255, cmd.....
解决:killall gzserver
和killall gzclient
注意2:如果 gazebo没有安装,请自行安装:
1.添加源:
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main"
>
/etc/apt/sources.list.d/gazebo-stable.list'
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
2.安装:
第一步
sudo apt update
第二步
sudo apt install gazebo11
第三步
sudo apt install libgazebo11-dev
URDF 需要集成进 Rviz 或 Gazebo 才能显示可视化的机器人模型,前面已经介绍了URDF 与 Rviz 的集成,本节主要介绍:
URDF 与 Gazebo 集成流程与 Rviz 实现类似,主要步骤如下:
创建功能包,导入依赖项
编写 URDF 或 Xacro 文件
启动 Gazebo 并显示机器人模型
Gazebo/Black
一个是设置碰撞参数一个是设置连杆矩阵的
注意, 当 URDF 需要与 Gazebo 集成时,和 Rviz 有明显区别:
1.必须使用 collision 标签,因为既然是仿真环境,那么必然涉及到碰撞检测,collision 提供碰撞检测的依据。
2.必须使用 inertial 标签,此标签标注了当前机器人某个刚体部分的惯性矩阵,用于一些力学相关的仿真计算。
3.颜色设置,也需要重新使用 gazebo 标签标注,因为之前的颜色设置为了方便调试包含透明度,仿真环境下没有此选项。
如果是标准集合体,复制visual的geometry和origin即可
惯性矩阵
这个launch是在gazebo_ros包里的
跟rviz不同还需要一行命令让gazebo显示机器人模型
args="-urdf -model mycar -param robot_description" />
-urdf 要用urdf类型数据
-model mycar 模型取名叫mycar
-param robot_description要加载的模型是从 robot_description获取的
此时gazebo是空的
启动命令传给gazebo参数
此时就完成了
较之于 rviz,gazebo在集成 URDF 时,需要做些许修改,比如:必须添加 collision 碰撞属性相关参数、必须添加 inertial 惯性矩阵相关参数,另外,如果直接移植 Rviz 中机器人的颜色设置是没有显示的,颜色设置也必须做相应的变更。
如果机器人link是标准的几何体形状,和link的 visual 属性设置一致即可。
惯性矩阵的设置需要结合link的质量与外形参数动态生成,标准的球体、圆柱与立方体的惯性矩阵公式如下(已经封装为 xacro 实现):
推导见下面的链接
(67条消息) ROS漫漫长路(一)——Gazebo中机器人圆柱,球,长方体惯性矩阵推导与代码实现_lzzzzzzm的博客-CSDN博客_长方体的惯性矩阵
转动惯量的SI单位为kg·m²。对于一个质点,I=mr²,其中,m是其质量,r是质点和转轴的垂直距离。
所以对称物体的ixy ixz iyz iyx iyz izx izy为0
(因为积分为0)
球体惯性矩阵
圆柱惯性矩阵
立方体惯性矩阵
需要注意的是,原则上,除了 base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。
在 gazebo 中显示 link 的颜色,必须要使用指定的标签:
Gazebo/Blue
PS:material 标签中,设置的值区分大小写,颜色可以设置为 Red Blue Green Black .....
需求描述:
将之前的机器人模型(xacro版)显示在 gazebo 中
实现流程:
需要编写封装惯性矩阵算法的 xacro 文件
为机器人模型中的每一个 link 添加 collision 和 inertial 标签,并且重置颜色属性
在 launch 文件中启动 gazebo 并添加机器人模型
新建文件复制以下代码
把之前的小车xacro实现复制进来
具体见
(15条消息) ROS xacro URDF优化(十七)_啥也不是的py人的博客-CSDN博客https://blog.csdn.net/weixin_50920579/article/details/124189174?spm=1001.2014.3001.5501
修改car.urdf.xacro
要增加包含惯性矩阵的xacro
因为直接用的之前的rviz的xacro文件,所以要对应进行修改
对link增加
跟visual保持一致就行
调用xacro interia matrix
另外设置一下全局变量
最后是颜色设置
Gazebo/Yellow
此处就完成了车体部分设置
然后执行一下看看有没有错
可以看到车体正常显示了
雷达和摄像头还没有正常显示
添加
添加颜色
添加惯性矩阵
运行
可以看到多出了红色的轮子
设置
添加惯性矩阵
设置颜色
运行
惯性矩阵
颜色设置
先改支架
惯性矩阵修改
颜色修改
雷达修改
惯性矩阵调用
颜色修改
运行
运行成功
到目前为止,我们已经可以将机器人模型显示在 Gazebo 之中了,但是当前默认情况下,在 Gazebo 中机器人模型是在 empty world 中,并没有类似于房间、家具、道路、树木... 之类的仿真物,如何在 Gazebo 中创建仿真环境呢?
Gazebo 中创建仿真实现方式有两种:
方式1: 直接添加内置组件创建仿真环境
方式2: 手动绘制仿真环境(更为灵活)
也还可以直接下载使用官方或第三方提高的仿真环境插件。
以下为素材链接可以直接git clone下载
GitHub - zx595306686/sim_demohttps://github.com/zx595306686/sim_demo.git
新建目录并且把.world放进去
新建launch环境
world_name是固定参数
启动
启动gazebo
然后自己搭建再另存为即可
另存为即可
创建墙体
创建门窗
改变材质,改变颜色
使用官方提供的插件
当前 Gazebo 提供的仿真道具有限,还可以下载官方支持,可以提供更为丰富的仿真实现,具体实现如下:
git clone https://github.com/osrf/gazebo_models
之前是:hg clone https://bitbucket.org/osrf/gazebo_models
但是已经不可用
注意: 此过程可能比较耗时
3.2 将模型库复制进 gazebo
将得到的gazebo_models文件夹内容复制到 /usr/share/gazebo-*/models
3.3 应用
重启 Gazebo,选择左侧菜单栏的 insert 可以选择并插入相关道具了