Hi, I'm trying to build a 3D map remotely with RTABMap over WiFi. I'm running a navigation stack, Rosaria, freenect and depthimage_to_laserscan nodes on Raspberry Pi 3 which is interfaced with Kinect Xbox 360 camera and Pioneer robot. RTABMap and RViz nodes are running on my laptop. ROS Kinetic is installed on both computers with Ubuntu 14.04 LTS 32-bit on laptop and Ubuntu Mate on RPi3.
Here are some screenshots of 3D maps I've build so far. Let's say these are the least bad.
1.) I've tried experimenting with different velocity rates, slowing vel_x and vel_theta down to 0.1 m/s. Maybe it did reduce misalignment a bit, but 3D map still has considerable amount of error.
2.) I am not sure if I should try calibrating my Kinect, since Freenect loads default calibration settings every time it starts.
3.) I have one static TF transform between robot base_link and camera_link which I've set up following this tutorial. Kinect is positioned 17,5 cm at the back on x-axis and 56,7 cm from the center of robot's base to the center of kinect.
<node pkg="tf" type="static_transform_publisher" name="base_to_camera_tf" args="-0.175 0.0 0.567 0 0 0 /base_link /camera_link 100"
I am not sure if I should also have base_footprint between /odom and /base_link. I did notice that there is as a map offset in RviZ. This is how my TF frames look like.
4.) Could it be that robot using skid steering drive leads to odometry drift? Even if I am trying to map a small scale space, a room that is 5,5 m x 4,5 m.
5.) Would some parameter tunning improve the performance? I also tried throttling frame rate but I would not say that it had any considerable effect on reducing the errors. I am currently using these:
<param name="RGBD/ProximityBySpace" type="string" value="false"/>
<param name="RGBD/AngularUpdate" type="string" value="0.01"/>
<param name="RGBD/LinearUpdate" type="string" value="0.01"/>
<param name="RGBD/OptimizeFromGraphEnd" type="string" value="false"/>
<param name="Optimizer/Slam2D" type="string" value="true"/>
<param name="Reg/Strategy" type="string" value="1"/> <!-- 1=ICP -->
<param name="Reg/Force3DoF" type="string" value="true"/>
<param name="Vis/MaxDepth" type="string" value="4.0"/>
<param name="Vis/MinInliers" type="string" value="5"/>
<param name="Vis/InlierDistance" type="string" value="0.05"/>
<param name="Rtabmap/TimeThr" type="string" value="700"/>
<param name="Mem/RehearsalSimilarity" type="string" value="0.45"/>
<param name="Icp/CorrespondenceRatio" type="string" value="0.5"/>
<!-- Added -->
<param name="Odom/Strategy" type="string" value="1"/> <!-- Frame-to-Frame odometry -->
<param name="Odom/GuessMotion" type="string" value="true" />
<param name="Vis/EstimationType" type="string" value="1"/> <!-- 2D->3D PnP -->
<param name="Vis/CorType" type="string" value="1"/>
I'm stuck ATM, since I do not know what to try next to improve the quality of 3D map. Any suggestions would be much appreciated. Thanks!
Originally posted by Dox on ROS Answers with karma: 36 on 2018-07-21
Post score: 0
Original comments
Comment by matlabbe on 2018-07-24:
Can you share a database? From the screenshots, errors seem coming from the odometry drift and/or not precise tf between base_link and camera_link.
Comment by Dox on 2018-07-25:
I couldn't find a database that corresponds to those specific screenshots since I have many. This one is even messier. If you need more db or anything else, please let me know.