在Gazebo中搭建无人机飞行的仿真场景。
环境:Ubuntu18.04、ROS Melodic、Gazebo 9.19
官方教程
Gazebo鼠标操作方法
按住左键:平移
按住右键:缩放
滚轮:缩放
按住滚轮拖动:移动视角
一些重要的路径
Gazebo模型的路径:~/.gazebo/models/
,Gazebo会优先在这里寻找模型
PX4模型的路径:~/PX4_Firmware/Tools/sitl_gazebo/models
PX4世界文件的路径:~/PX4_Firmware/Tools/sitl_gazebo/worlds
。在该路径下的.world
文件,可以被位于~/PX4_Firmware/launch
下的launch文件以<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/xxx.world"/>
的形式找到,并可用以下方式启动:
roslaunch px4 xxx.launch
SDF文件
使用后缀为.world
的SDF文件描述一个Gazebo的世界场景。虽然在Gazebo中也可以通过可视化的方式搭建世界场景,但其生成的.world
文件中会添加许多默认配置的参数,会使得文件看起来非常杂乱庞大,不易修改。此处通过直接写SDF文件的方法搭建世界场景。
SDF文件官方文档,里面描述了各个标签的含义。
<sdf version="1.6">
<world name="world">
...
</world>
</sdf>
在写SDF文件的时候注意各标签之间的缩进关系。
可以参考官方模型的SDF文件的写法。
所有的参数都可以在Gazebo中调整好之后填入SDF文件中。
光源
日光
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include>
可调光源
<light name='user_directional_light' type='directional'>
<pose frame=''>2.30045 -0.072071 1 0 -0 0</pose>
<diffuse>0.5 0.5 0.5 1</diffuse>
<specular>0.1 0.1 0.1 1</specular>
<direction>0.1 0.1 -0.9</direction>
<attenuation>
<range>20</range>
<constant>0.5</constant>
<linear>0.01</linear>
<quadratic>0.001</quadratic>
</attenuation>
<cast_shadows>1</cast_shadows>
</light>
还有一种光源类型是type='point'
。
地平面
<!-- A ground plane -->
<include>
<uri>model://ground_plane</uri>
</include>
这个地平面默认是灰色的,而且尺寸好像无法修改。
注意一定要有地平面,不然在物理引擎下,仿真启动之后,其余物体会往下掉。(qaq)
plane
<model name="ground_plane">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<plane>
<normal>0 0 1</normal>
<size>5000 5000</size>
</plane>
</geometry>
<friction>
<ode>
<mu>100</mu>
<mu2>50</mu2>
</ode>
</friction>
</collision>
...
</link>
</model>
可以在其上添加多个<visual>
。
plane一定要设置碰撞属性,不然在它上面的物体也会掉下去。
调整初始视角
<gui fullscreen='0'>
<camera name='user_camera'