Gazebo仿真记录 Turtlebot3 + D435i

发布于:2022-11-01 ⋅ 阅读:(333) ⋅ 点赞:(0)

在Gazebo环境中在Turtlebot3上添加深度相机D435和IMU。

步骤

1.准备工作

创建ROS工作空间,下载turtlebot3相关代码和realsense2_description 模型文件放到工作空间下。
Turtlebot3:主要是turtlebot3turtlebot3_simulationsturtlebot3_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


网站公告

今日签到

点亮在社区的每一天
去签到