3D mapping with Turtlebot3 Burger and Intel Realsense D435 Camera

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

3D mapping with Turtlebot3 Burger and Intel Realsense D435 Camera

jakb_2403
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!
Reply | Threaded
Open this post in threaded view
|

Re: 3D mapping with Turtlebot3 Burger and Intel Realsense D435 Camera

matlabbe
Administrator
Hi,

don't know exactly what are the differences between the r200 and d435 plugin in gazebo, but what could cause this problem is a poor synchronization between rgb and depth topics. With the d435, you may try the approx_rgbd_sync:=true to compare. However, I discourage to use approximate sync policy with RGB-D data et stereo data if possible. You could compare the stamp in the topics to see if they are exactly the same between the camera topics. I would suggest to use the R200 plugin if d435 plugin cannot provide synchronized images.

cheers,
Mathieu