ROS进阶教程(一)Gazebo仿真平台模型搭建与修改
文件讲解
Gazebo中进行算法仿真首先需要启动世界模型,通过launch文件实现模型与代码的交互,launch文件中整合了world文件和其他launch文件使其同时运行在Gazebo中;world文件是整合模型的文件,可以直接调用模型或者直接编写模型相关的参数;Models文件则是构建每个子模型的文件。三者关系如下图所示:
Models 文件
在打开Gazebo后进行insert,会有非常多已有的模型,拖动即可插入制作好的模型构建虚拟环境,是Gazebo仿真环境中的最底层文件。
文件位置:/home/username/.gaezbo/models (.gazebo文件为隐藏文件,按Ctrl+H显示)
包含内容:
- .config文件(声明文件,在Gazebo中声明sdf与materials等文件)
- .sdf文件(参数文件,包含构建模型所必须的参数信息)
- materials文件(元素文件,包含需要在models中插入的图片、3D模型dae文件等)
- 其他参数文件(皆通过.config文件进行声明)
Note: 现有已经展示出的模型文件比较有限,同时复杂的模型配置文件相当复杂,可能有成千上万个参数,很难通过修改参数来调整模型,同时有很多系统封装的模型dae文件或stl文件可以调用,如在一个模型文件的sdf文件中存在如下语句:
<uri>model://bed/meshes/cube_20k.stl</uri>
即表示调用 ~/.gazebo/models/bed/meshes 模型文件中的 cube_20k.stl 文件构建模型,其中调用了一些系统文件,如
<uri>file://media/materials/scripts/gazebo.material</uri>
其中 gazebo.material文件位于 /usr/share/gazebo-7/media/materials/scripts,其中有诸多model的引用模型的定义, /usr/share/gazebo-7/media/materials/textures中保存了模型的引用图案和纹理。
World文件
将models集成起来,但由于world文件只包含模型,故在直接运行时无法直接通过代码对模型进行控制,是Gazebo中的中层文件。
系统自带world文件位置:/usr/share/Gazebo-7/worlds(几乎包含了所有可用的现有的模型)
Note: world文件中有非常多的默认参数,且可以引用很多系统自带的model,几乎可以构建出所有想要的环境,现有world文件测试如下:
world 文件 | Gazebo场景 |
---|---|
actor.world | 移动的人 |
blank.world | 一片空白 |
camera.world | turtlebot和一个cube,都携带摄像头传感器 |
cart_demo.world | 一个简单的小车和一个机器人 |
contact.world | 一个立方体一个turtlebot |
depth_camera.world | 携带深度摄像头的turtlebot和一个半球体,可输出物体width,height,midpoint,distance,min和Max等信息 |
elevator.world | turtlebot和电梯模型 |
empty.world | 空的世界 |
empty_sky.world | turtlebot机器人和蓝天白云(白云可移动) |
road.world | 一条双向马路和一个turtlebot |
wireless_sensors.world | 有一个turtlebot,同时地板上每个方块顶点都有一个点状传感器 |
single_rotor_demo.world | 一个风车和一个turtlebot |
population.world | turtlebot和很多饮料罐 |
linear_battery_demo.world: | |
light.worlds | 绿色光源和一些奇怪的荧光图案 |
imu_demo.world | 一个物体自由落体可测试imu传感器 |
plane_demo.world | 模拟行星表面 |
projector.world | 有一个小球作灯光投影 |
sonar_demo.world | turtlebot声呐传感器 |
heightmap.world | 很高的一个台子 |
presentation.world | turtlebot在一篇白地上做圆周运动 |
rubble.world | 碎石头块和turtlebot |
shapes.world | 三个基本形状和turtlebot |
在Gazebo中添加激光雷达参考: