在Gazebo环境中在Turtlebot3上添加深度相机D435和IMU。
步骤
1.准备工作
创建ROS工作空间,下载turtlebot3相关代码和realsense2_description 模型文件放到工作空间下。
Turtlebot3:主要是turtlebot3、turtlebot3_simulations、turtlebot3_msgs
realsense2_description:存放Realsense相关型号的相机模型文件及xacro文件。这里的相机型号包括d415、d345、r410、r430和t265。可以用view_d415_model.launch等在Gazebo中打开查看。
2.添加相机D435
以在turtlebot-burger上添加D435为例,首先需要包含_d435.urdf.xacro文件。
<xacro:include filename="$(find realsense2_description)/urdf/_d435.urdf.xacro" />
然后,将上述文件中构造的d435传感器模型添加到turtlebot-burger上,
<xacro:sensor_d435 name="camera" topics_ns="camera" parent="base_link" publish_pointcloud="true">
<origin xyz="0 0 0.1" rpy="0 0 0" />
</xacro:sensor_d435>
3.添加IMU
turtlebot_burger文件里面已经添加了imu的相关设置。
<gazebo>
<plugin name="imu_plugin" filename="libgazebo_ros_imu.so">
<alwaysOn>true</alwaysOn>
<bodyName>imu_link</bodyName>
<frameName>imu_link</frameName>
<topicName>imu</topicName>
<serviceName>imu_service</serviceName>
<gaussianNoise>0.0</gaussianNoise>
<updateRate>0</updateRate>
<imu>
<noise>
<type>gaussian</type>
<rate>
<mean>0.0</mean>
<stddev>2e-4</stddev>
<bias_mean>0.0000075</bias_mean>
<bias_stddev>0.0000008</bias_stddev>
</rate>
<accel>
<mean>0.0</mean>
<stddev>1.7e-2</stddev>
<bias_mean>0.1</bias_mean>
<bias_stddev>0.001</bias_stddev>
</accel>
</noise>
</imu>
</plugin>
</gazebo>
也可以参考[1]的方法添加IMU
<gazebo reference="camera_link">
<gravity>true</gravity>
<sensor name="imu_sensor" type="imu">
<always_on>true</always_on>
<update_rate>200</update_rate>
<visualize>true</visualize>
<topic>__default_topic__</topic>
<plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin">
<topicName>d435i/imu</topicName>
<bodyName>camera_link</bodyName>
<updateRateHZ>200.0</updateRateHZ>
<gaussianNoise>0.0</gaussianNoise>
<xyzOffset>0.0 0.0 0.0</xyzOffset>
<rpyOffset>0.0 0.0 0.0</rpyOffset>
<frameName>imu_link_</frameName>
</plugin>
<pose>0 0 0 0 0 0</pose>
</sensor>
</gazebo>
在Gazebo仿真时发现IMU话题分布,后来发现可能是libgazebo_ros_imu_sensor.so文件缺失,但是并没有报错。重新安装Gazebo之后问题解决。
sudo apt-get install ros-noetic-gazebo-ros-pkgs ros-noetic-gazebo-ros-control
仿真结果
其他
最早的计划是直接添加D435i模型,但是折腾了很久没有实现。同时参考[1],对于实体realsense-d435i,会有相关realsense软件包实现时间同步等工作,但是在Gazebo环境中与普通的camera+imu组合并没有区别,最终选择了分别添加D435和IMU.
Github项目Turtlebot3_with_Realsense_D435i里面给出了D435i模型,但并没有找到Tutrlebot3_with_Realsense_D435i/turtlebot3/turtlebot3_description/urdf_d435i.gazebo.xacro文件中所需要的librealsense_gazebo_accel_sensor.so和librealsense_gazebo_gyro_sensor.so文件。
本文的urdf文件修改主要参考了leochien1110/turtlebot3_d435,如果有更好的方法或建议可以私信或者评论区,在此感谢!
参考资料:
[1] Gazebo环境下VIO SLAM系统实现
[2] Gazebo使用笔记(10)–gazebo插件与传感器的添加
[3] Gazebo官方教程Tutorial: Using Gazebo plugins with ROS