目录
- 0 专栏介绍
- 1 什么是Gazebo?
- 2 Gazebo架构
- 2.1 Gazebo前后端
- 2.2 Gazebo文件格式
- 2.3 Gazebo环境变量
- 3 Gazebo安装与基本界面
- 4 搭建自己的地图
- 4.1 编辑地图
- 4.2 保存地图
- 4.3 加载地图
- 5 常见问题
0 专栏介绍
本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。
🚀详情:《ROS2从入门到精通》
1 什么是Gazebo?
Gazebo
功能强大,主要有:
-
构建机器人运动仿真模型
-
构建现实世界各种场景的仿真模型
-
构建传感器仿真模型
-
为机器人模型添加现实世界的物理性质
2 Gazebo架构
2.1 Gazebo前后端
Gazebo
区分
- 客户端:
gzclient
,接受数据信息并显示,允许多个客户端存在 - 服务端:
gzserver
,运行Gazebo
运算分析功能
终端运行指令
gazebo
默认执行指令
gzserver
gzclient
当然也可以分开运行服务端和客户端指令。
2.2 Gazebo文件格式
-
世界
-
模型
下面是一个
.world
文件,其中包含ground_plane
与sun
模型文件<?xml version="1.0" ?> <sdf version="1.5"> <world name="default"> <include> <uri>model://ground_plane</uri> </include> <include> <uri>model://sun</uri> </include> <model name="box"> <pose>0 0 0.5 0 0 0</pose> <link name="link"> <collision name="collision"> <geometry> <box> <size>1 1 1</size> </box> </geometry> </collision> </link> </model> </world> </sdf>
2.3 Gazebo环境变量
Gazebo
环境变量表示了内置文件与库的存放位置,列举如下:
上述所有的变量查看位置/usr/share/gazebo/setup.sh
3 Gazebo安装与基本界面
Gazebo
已经集成在桌面完整版的ROS
系统当中
启动与测试
ros2 launch gazebo_ros spawn_entity_demo.launch.py
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8JqPBGP-1721265452675)(https://i-blog.csdnimg.cn/direct/173a148d437e4222aae25de427d0f56d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATXIuV2ludGVyYA==,size_120,color_FFFFFF,t_70,g_se,x_16#pic_center =650x)]
如上图所示,Gazebo-GUI
主要包含以下部分:
-
场景(Scene):模拟器的主要部分,是仿真模型显示的地方,用户可以在场景中操作仿真对象,使其与环境进行交互
-
左侧面板:
-
顶部工具栏:包含与模拟器交互时最常用的选项,如按钮:选择、移动、旋转和缩放;灯光;创建简单形状(例如立方体、球体、圆柱体);复制/粘贴;更改视图;捕捉对齐等。
-
底部工具栏:显示有关仿真的数据,如仿真时间及其与真实时间。
4 搭建自己的地图
本文介绍如何用Gazebo
搭建自己的地图,关于Gazebo
搭建机器人请参考后面的文章。
4.1 编辑地图
启动Gazebo
,依次点击Edit
-> Building Editor
打开地图编辑器,如下所示
该编辑器由以下3个区域组成:
4.2 保存地图
在顶部菜单上,选择File
,然后Save As
可以保存模型文件.sdf
与.config
。单击Exit Building Editor
退出场景编辑器,注意退出后就不能够再次编辑场景了。
回到主界面再次选择File
,然后Save World
可以保存世界文件.world
。
4.3 加载地图
.world
中包含模型文件的全部内容,但不利于模型文件.sdf
与.config
复用以及.world
文件的可读性,本节进行改进。假设模型文件名为scene1
,则模块化加载模型的方式为
- 存放位置为
~/ros2_learning_tutorials/Lecture_2_2/src/gazebo_labmodels/models
,则<!-- 自定义模型 --> <model name='scene1'> <include> <uri>///home/winter/ros2_learning_tutorials/Lecture_2_2/src/gazebo_lab/models/scene1</uri> </include> </model>
- 存放位置为
~/.gazebo/models
,则<!-- 自定义模型 --> <model name='scene1'> <include> <uri>model://scene1</uri> </include> </model>
启动地图可以类比turtlebot3_world.launch
的结构,将其中的地图改成自己的场景即可,如下所示
<launch>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find gazebo_lab)/worlds/scene1.world"/>
<!-- more default parameters can be changed here -->
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/> <!-- Inert - see gazebo_ros_pkgs issue #491 -->
<arg name="recording" value="false"/>
<arg name="debug" value="false"/>
</include>
</launch>
5 常见问题
-
解决方案:更新
Gazebo
模型库cd ~/.gazebo/ mkdir -p models cd ~/.gazebo/models/ wget http://file.ncnynl.com/ros/gazebo_models.txt wget -i gazebo_models.txt ls model.tar.g* | xargs -n1 tar xzvf
-
解决方案:关闭已有的
Gazebo
进程killall gzserver killall gzclient
本文的完整工程代码请通过下方名片联系我获取
🔥 更多精彩专栏:
- 《ROS从入门到精通》
- 《机器人原理与技术》
- 《机器学习强基计划》
- 《计算机视觉教程》
- …