文章目录
- 0. 插件类型
-
-
-
- 添加ModelPlugin
- 添加SensorPlugin
-
-
- 1. 相机
-
-
-
- 普通相机
- 多机位相机
- 深度相机
-
-
- 2. 激光
-
-
-
- GPU Laser
- Laser
- Block Laser
-
-
- 3. IMU
-
-
-
- IMU (GazeboRosImu)
- IMU sensor (GazeboRosImuSensor)
-
-
- 4. 其他
-
-
-
- F3D (Force Feedback Ground Truth)
- Force
- Joint Pose Trajectory
- P3D (3D Position Interface for Ground Truth)
- 保险杠
- 差速驱动
- 防滑转向驱动
- 视频插件
- 平面移动插件
-
-
- Node:
0. 插件类型
目前有6种插件类型:
- World
- Model
- Sensor
- System
- Visual
- GUI
可通过URDF文件引用类型:
ModelPlugins, 提供对physics::ModelAPI访问,传送门SensorPlugins, 提供对sensors::SensorAPI访问,传送门VisualPlugins, 提供对rendering::VisualAPI访问,传送门
添加ModelPlugin
用于指示传递gazebo的信息
<robot> ... robot description ... <gazebo> <plugin name="differential_drive_controller" filename="libdiffdrive_plugin.so"> ... plugin parameters ... </plugin> </gazebo> ... robot description ... </robot>
添加SensorPlugin
连接到link
<robot> ... robot description ... <link name="sensor_link"> ... link description ... </link> <gazebo reference="/span>sensor_link"> <sensor type="camera" name="camera1"> ... sensor parameters ... <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> ... plugin parameters .. </plugin> </sensor> </gazebo> </robot>
1. 相机
普通相机
<!--joint定义--> <joint name="camera_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="${camera_link} 0 ${height3 - axel_offset*2}" rpy="0 0 0"/> <parent link="link3"/> <child link="camera_link"/> </joint> <!--link定义--> <!-- Camera --> <link name="camera_link"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="${camera_link} ${camera_link} ${camera_link}"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="${camera_link} ${camera_link} ${camera_link}"/> </geometry> <material name="red"/> </visual> <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> <!--传感器配置--> <!-- camera --> <gazebo reference="camera_link"> <sensor type="camera" name="camera1"> <!--每秒获取的图像次数,但如果物理仿真运行速度快于传感器生成速度,那么它可能会滞后于这一目标速度--> <update_rate>30.0</update_rate> <camera name="head"> <!--匹配物理相机硬件上制造商提供的规格数据--> <horizontal_fov>1.3962634</horizontal_fov> <image> <width>800</width> <height>800</height> <format>R8G8B8</format> </image> <clip> <near>0.02</near> <far>300</far> </clip> <noise> <type>gaussian</type> <!-- Noise is sampled independently per pixel on each frame. That pixel's noise value is added to each of its color channels, which at that point lie in the range [0,1]. --> <mean>0.0</mean> <stddev>0.007</stddev> </noise> </camera> <!--gazebo_ros/gazebo_ros_camera.cpp--> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <alwaysOn>true</alwaysOn> <updateRate>0.0</updateRate> <!--类似名称空间--> <cameraName>rrbot/camera1</cameraName> <!--图像topic--> <imageTopicName>image_raw</imageTopicName> <!--相机信息topic--> <cameraInfoTopicName>camera_info</cameraInfoTopicName> <!-- 在本例中,实际使用时,应订阅以下主题: /rrbot/camera1/image_raw /rrbot/camera1/camera_info --> <!--图像在tf树中发布的坐标系--> <frameName>camera_link</frameName> <hackBaseline>0.07</hackBaseline> <distortionK1>0.0</distortionK1> <distortionK2>0.0</distortionK2> <distortionK3>0.0</distortionK3> <distortionT1>0.0</distortionT1> <distortionT2>0.0</distortionT2> </plugin> </sensor> </gazebo>
注意:①传感器的名称必须是唯一的;②gazebo reference的名称必须与相应的link名称相同
多机位相机
同步多个相机的快门,以便它们将图像一起发布。通常用于立体摄像机,使用与纯Camera插件非常相似的界面。
注意:目前仅支持stereo cameras
以Atlas的双目相机为例:
<gazebo reference="left_camera_frame">
<sensor type="multicamera" name="stereo_camera">
<update_rate>30.0</update_rate>
<camera name="left">
<horizontal_fov>1.3962634</horizontal_fov>
<image>
<width>800</width>
<height>800</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.02</near>
<far>300</far>
</clip>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.007</stddev>
</noise>
</camera>
<camera name="right">
<pose>0 -0.07 0 0 0 0</pose>
<horizontal_fov>1.3962634</horizontal_fov>
<image>
<width>800</width>
<height>800</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.02</near>
<far>300</far>
</clip>
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.007</stddev>
</noise>
</camera>
<plugin name="stereo_camera_controller" filename="libgazebo_ros_multicamera.so">
<alwaysOn>true</alwaysOn>
<updateRate>0.0</updateRate>
<cameraName>multisense_sl/camera</cameraName>
<imageTopicName>image_raw</imageTopicName>
<cameraInfoTopicName>camera_info</cameraInfoTopicName>
<frameName>left_camera_optical_frame</frameName>
<!--<rightFrameName>right_camera_optical_frame</rightFrameName>-->
<hackBaseline>0.07</hackBaseline>
<distortionK1>0.0</distortionK1>
<distortionK2>0.0</distortionK2>
<distortionK3>0.0</distortionK3>
<distortionT1>0.0</distortionT1>
<distortionT2>0.0</distortionT2>
</plugin>
</sensor>
</gazebo>
深度相机
以Kinect为例:
<gazebo reference="${link_name}">
<sensor name="${link_name}_camera" type="depth">
<update_rate>20</update_rate>
<camera>
<horizontal_fov>1.047198</horizontal_fov>
<image>
<width>640</width>
<height>480</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.05</near>
<far>3</far>
</clip>
</camera>
<plugin name="${link_name}_controller" filename="libgazebo_ros_openni_kinect.so">
<baseline>0.2</baseline>
<alwaysOn>true</alwaysOn>
<updateRate>1.0</updateRate>
<cameraName>${camera_name}_ir</cameraName>
<imageTopicName>/${camera_name}/color/image_raw</imageTopicName>
<cameraInfoTopicName>/${camera_name}/color/camera_info</cameraInfoTopicName>
<depthImageTopicName>/${camera_name}/depth/image_raw</depthImageTopicName>
<depthImageInfoTopicName>/${camera_name}/depth/camera_info</depthImageInfoTopicName>
<pointCloudTopicName>/${camera_name}/depth/points</pointCloudTopicName>
<frameName>${frame_name}</frameName>
<pointCloudCutoff>0.5</pointCloudCutoff>
<pointCloudCutoffMax>3.0</pointCloudCutoffMax>
<distortionK1>0.00000001</distortionK1>
<distortionK2>0.00000001</distortionK2>
<distortionK3>0.00000001</distortionK3>
<distortionT1>0.00000001</distortionT1>
<distortionT2>0.00000001</distortionT2>
<CxPrime>0</CxPrime>
<Cx>0</Cx>
<Cy>0</Cy>
<focalLength>0</focalLength>
<hackBaseline>0</hackBaseline>
</plugin>
</sensor>
</gazebo>
关于配置深度相机的更详细说明参见:传送门
2. 激光
GPU Laser
如sensor_msgs中所述,通过广播LaserScan消息来模拟激光测距传感器,参考https://wiki.ros.org/hokuyo_node
<joint name="hokuyo_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="0 0 ${height3 - axel_offset/2}" rpy="0 0 0"/> <parent link="link3"/> <child link="hokuyo_link"/> </joint> <!-- Hokuyo Laser --> <link name="hokuyo_link"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="0.1 0.1 0.1"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <mesh filename="package://rrbot_description/meshes/hokuyo.dae"/> </geometry> </visual> <inertial> <mass value="1e-5 标签:exact传感器