3D mapping with Turtlebot3 Burger and Intel Realsense D435 Camera

Posted by jakb_2403 on
URL: http://official-rtab-map-forum.206.s1.nabble.com/3D-mapping-with-Turtlebot3-Burger-and-Intel-Realsense-D435-Camera-tp8378.html

Hello, I am trying to use turtlebot3 burger and a single Intel Realsense D435 to map an environment in RTAB-map. Here are the details of my system: Ubuntu 20.04 LTS, ROS Noetic. I am using gazebo to simulate the described robot, here's what it looks like:
Turtlebot burger with D435 attached

I have launched the mapping process in RTAB-map with the following commands:
roslaunch turtlebot3_description turtlebot3_burger_d435_gazebo_only.launch 
This launch file (which you can view here) launches the robot shown in the image above in a `turtlebot3_house` environment. As I move the robot around using `teleop`, I can monitor the `/camera/depth/image_raw` and the `/camera/color/image_raw` using `rviz` and everything works well - the depth image is accurate and refreshes once every second or so. I then launch RTAB-map using:
roslaunch rtabmap_ros rtabmap.launch \
  args:="-d \
     --RGBD/NeighborLinkRefining true \
     --Reg/Force3DoF true \
     --Reg/Strategy 1 \
     --Mem/LaserScanVoxelSize 0.05 \
     --Icp/MaxCorrespondenceDistance 0.1 \
     --Mem/ImagePreDecimation 2 \
     --Mem/ImagePostDecimation 2" \
  visual_odometry:=false \
  odom_frame_id:=odom \
  subscribe_scan:=false \
  rgbd_sync:=true \
  approx_rgbd_sync:=false \
  rgb_topic:=/camera/color/image_raw \
  camera_info_topic:=/camera/color/camera_info \
  depth_topic:=/camera/depth/image_raw \
  depth_camera_info_topic:=/camera/depth/camera_info \
  frame_id:=base_footprint
and I get the following result. I have taken a screen recording and it is sped up to 7x speed. As you can see the mapping only takes readings of the environment at seemingly random intervals. This is the RQT graph for that configuration:



I tested this process with an unmodified Turtlebot3 Waffle using these commands:
export TURTLEBOT3_MODEL=waffle

roslaunch turtlebot3_gazebo turtlebot3_house.launch

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

roslaunch turtlebot3_bringup turtlebot3_remote.launch model:=waffle

roslaunch rtabmap_ros rtabmap.launch \
   args:="-d \
      --RGBD/NeighborLinkRefining true \
      --Reg/Force3DoF true \
      --Reg/Strategy 1 \
      --Mem/LaserScanVoxelSize 0.05 \
      --Icp/MaxCorrespondenceDistance 0.1 \
      --Mem/ImagePreDecimation 3 \
      --Mem/ImagePostDecimation 2" \
   visual_odometry:=false \
   odom_frame_id:=odom \
   subscribe_scan:=true \
   scan_topic:="/scan" \
   rgbd_sync:=true \
   approx_rgbd_sync:=false \
   rgb_topic:=/camera/rgb/image_raw \
   camera_info_topic:=/camera/rgb/camera_info \
   depth_topic:=/camera/depth/image_raw \
   frame_id:=base_footprint
and it gave me this result. (In this example the Waffle is using an Intel R200 camera only by setting `subscribe_scan:=false`) Here is the RQT graph for the Turtlebot3 waffle (active nodes only). In that second video, the robot takes readings of the environment at regular intervals and the map is far more populated. Here is the RQT graph for that configuration:


Could someone please help me understand why my mapping process isn't taking more readings of the environment? Thank you!