注:适用于多无人机仿真(Multi-Vehicle Simulation with Gazebo)
即使用 multi_uav_mavros_sitl.launch 启动无人机仿真
1、添加相机插件
修改Tools/sitl_gazebo/models/rotors_description/urdf/component_snippets.xacro文件
下面这段代码是根据原有程序(<!-- Macro to add a camera.--> 下面那一段)修改的,去掉了一些我用不到的相机参数。
<xacro:if value="$(arg enable_camera_truth)">
<xacro:macro name="camera_macro"
params="namespace parent_link camera_suffix frame_rate
horizontal_fov image_width image_height min_distance
max_distance enable_visual *origin">
<link name="${namespace}/camera_${camera_suffix}_link">
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box>
<size>0.01 0.01 0.01</size>
</box>
</geometry>
</collision>
<xacro:if value="${enable_visual}">
<visual>
<origin xyz="0 0 0" rpy="0 1.57079632679 0" />
<geometry>
<box>
<size>0.01 0.01 0.01</size>
</box>
</geometry>
<material name="red" />
</visual>
</xacro:if>
<inertial>
<mass value="1e-5" />
<origin xyz="0 0 0" rpy="0 0 0" />
<inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" />
</inertial>
</link>
<joint name="${namespace}/camera_${camera_suffix}_joint" type="fixed">
<xacro:insert_block name="origin" />
<parent link="${parent_link}" />
<child link="${namespace}/camera_${camera_suffix}_link" />
</joint>
<gazebo reference="${namespace}/camera_${camera_suffix}_link">
<sensor type="camera" name="${namespace}_camera_${camera_suffix}">
<update_rate>${frame_rate}</update_rate>
<camera name="head">
<horizontal_fov>${horizontal_fov}</horizontal_fov>
<image>
<width>${image_width}</width>
<height>${image_height}</height>
<!--<format>${image_format}</format>-->
</image>
<clip>
<near>${min_distance}</near>
<far>${max_distance}</far>
</clip>
</camera>
<plugin name="${namespace}_camera_${camera_suffix}_controller" filename="libgazebo_ros_camera.so">
<robotNamespace>${namespace}</robotNamespace>
<alwaysOn>true</alwaysOn>
<updateRate>${frame_rate}</updateRate>
<cameraName>camera_${camera_suffix}</cameraName>
<imageTopicName>image_raw</imageTopicName>
<cameraInfoTopicName>camera_info</cameraInfoTopicName>
<frameName>camera_${camera_suffix}_link</frameName>
<hackBaseline>0.0</hackBaseline>
<distortionK1>0.0</distortionK1>
<distortionK2>0.0</distortionK2>
<distortionK3>0.0</distortionK3>
<distortionT1>0.0</distortionT1>
<distortionT2>0.0</distortionT2>
</plugin>
</sensor>
</gazebo>
</xacro:macro>
</xacro:if>
2、激活相机插件
在Tools/sitl_gazebo/models/rotors_description/urdf/iris_base.xacro中开启相机模块
<!-- Instantiate camera plugin. -->
<xacro:if value="$(arg enable_camera_truth)">
<xacro:camera_macro
namespace="${namespace}"
enable_visual="true"
parent_link="base_link"
camera_suffix="Monocular"
frame_rate="30"
horizontal_fov="1.047"
image_width="320"
image_height="240"
min_distance="0.1"
max_distance="100"
>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
</xacro:camera_macro>
</xacro:if>
不要忘记在iris_base.xacro文件起始部分定义变量enable_camera_truth 的值为true
<xacro:arg name='enable_camera_truth' default='true' />
3、运行仿真环境
roslaunch px4 multi_uav_mavros_sitl.launch
4、仿真结果
快捷查看方式,点击gazebo导航栏中window->Topic Visualization,在弹出的窗口中选择相机的topic。也可以自己编写图像接收程序。