Re: Incomplete depth cloud and no loop closures with Realsense R200
Posted by
danmou on
URL: http://official-rtab-map-forum.206.s1.nabble.com/Incomplete-depth-cloud-and-no-loop-closures-with-Realsense-R200-tp2934p2955.html
Hi Mathieu,
Wish I had known that! Well my method works, so I think I will just stick with that. I use nearest-neighbor interpolation (aka no interpolation) to avoid the issue with the edges (I modified
this package to work with depth images and correctly update the camera_info).
I have done some more testing on the environment that the robot is intended to operate on, and I still feel that it is too difficult for loop closures to be accepted. The environment is rather sparse visually.
These are my current settings:
<param name="Mem/ImagePreDecimation" type="string" value="2"/> <!-- use 2 times smaller RGB image to extract features -->
<param name="Mem/ImagePostDecimation" type="string" value="2"/> <!-- save in database 2 times smaller raw images -->
<param name="Rtabmap/DetectionRate" type="string" value="1"/>
<param name="Rtabmap/TimeThr" type="string" value="800"/>
<param name="RGBD/LocalLoopDetectionSpace" type="string" value="false"/> <!-- Local loop closure detection (using estimated position) with locations in WM -->
<param name="RGBD/LocalLoopDetectionTime" type="string" value="true"/> <!-- Local loop closure detection with locations in STM -->
<param name="RGBD/OptimizeFromGraphEnd" type="string" value="false"/> <!-- Optimize graph from the latest node -->
<param name="Reg/Strategy" type="string" value="0"/> <!-- 0=Vis, 1=Icp, 2=VisIcp -->
<param name="Vis/FeatureType" type="string" value="0"/> <!-- 0=SURF 1=SIFT 2=ORB 3=FAST/FREAK 4=FAST/BRIEF 5=GFTT/FREAK 6=GFTT/BRIEF 7=BRISK 8=GFTT/ORB 9=FREAK -->
<param name="Vis/EstimationType" type="string" value="0"/> <!-- Motion estimation approach: 0:3D->3D, 1:3D->2D (PnP), 2:2D->2D (Epipolar Geometry) -->
<param name="Vis/Iterations" type="string" value="100"/>
<param name="Vis/MinInliers" type="string" value="5"/> <!-- 3D visual words minimum inliers to accept loop closure -->
<param name="Vis/MaxDepth" type="string" value="4.0"/> <!-- 3D visual words maximum depth 0=infinity -->
<param name="Vis/MinDepth" type="string" value="0.3"/> <!-- 3D visual words minimum depth -->
<param name="Vis/MaxFeatures" type="string" value="0"/> <!-- 0 no limits -->
<param name="Vis/InlierDistance" type="string" value="0.1"/> <!-- 3D visual words correspondence distance -->
<param name="Vis/CorNNDR" type="string" value="0.7"/> <!-- NNDR: nearest neighbor distance ratio. Used for features matching approach (default 0.6) -->
<param name="SURF/HessianThreshold" type="string" value="400"/> <!-- Threshold for hessian keypoint detector used in SURF. Lower=more features but less repeatable -->
<param name="RGBD/AngularUpdate" type="string" value="0.02"/> <!-- Update map only if the robot is moving -->
<param name="RGBD/LinearUpdate" type="string" value="0.02"/> <!-- Update map only if the robot is moving -->
<param name="Mem/BadSignaturesIgnored" type="string" value="false"/> <!-- Don't ignore bad images for 3D node creation (e.g. white walls) -->
<param name="Mem/RehearsalSimilarity" type="string" value="0.6"/> <!-- Similarity threshold -->
<param name="Grid/FromDepth" type="string" value="true"/> <!-- Create occupancy grid from depth image(s), otherwise it is created from laser scan. -->
<param name="Grid/DepthDecimation" type="string" value="1"/> <!-- Decimation of the depth image before creating cloud. Negative decimation is done from RGB size instead of depth size (if depth is smaller than RGB, it may be interpolated depending of the decimation value). -->
<param name="Grid/DepthMin" type="string" value="0.3"/> <!-- Minimum cloud's depth from sensor. -->
<param name="Grid/DepthMax" type="string" value="4.0"/> <!-- Maximum cloud's depth from sensor. 0=inf. -->
<param name="Grid/CellSize" type="string" value="0.05"/> <!-- Resolution of the occupancy grid. -->
<param name="Grid/MapFrameProjection" type="string" value="false"/> <!-- Projection in map frame. On a 3D terrain and a fixed local camera transform (the cloud is created relative to ground), you may want to disable this to do the projection in robot frame instead. -->
<param name="Grid/NormalsSegmentation" type="string" value="true"/> <!-- Segment ground from obstacles using point normals, otherwise a fast passthrough is used. -->
<param name="Grid/MaxObstacleHeight" type="string" value="0.8"/> <!-- Maximum obstacles height (0=disabled). -->
<param name="Grid/MinGroundHeight" type="string" value="0.0"/> <!-- Minimum ground height (0=disabled). -->
<param name="Grid/MaxGroundHeight" type="string" value="0.60"/> <!-- Maximum ground height (0=disabled). -->
<param name="Grid/MaxGroundAngle" type="string" value="25"/> <!-- Maximum angle (degrees) between point's normal to ground's normal to label it as ground. Points with higher angle difference are considered as obstacles. -->
<param name="Grid/NormalK" type="string" value="10"/> <!-- K neighbors to compute normals. -->
<param name="Grid/ClusterRadius" type="string" value="0.1"/> <!-- Cluster maximum radius. -->
<param name="Grid/MinClusterSize" type="string" value="10"/> <!-- Minimum cluster size to project the points. -->
<param name="Grid/FlatObstacleDetected" type="string" value="true"/> <!-- Flat obstacles detected. -->
<param name="Grid/3D" type="string" value="true"/> <!-- A 3D occupancy grid is required if you want an OctoMap (3D ray tracing). Set to false if you want only a 2D map, the cloud will be projected on xy plane. A 2D map can be still generated if checked, but it requires more memory and time to generate it. Ignored if laser scan is 2D and \"%s\" is false. -->
<param name="GridGlobal/FullUpdate" type="string" value="true"/> <!-- When the graph is changed, the whole map will be reconstructed instead of moving individually each cells of the map. Also, data added to cache won't be released after updating the map. This process is longer but more robust to drift that would erase some parts of the map when it should not. -->
<param name="GridGlobal/FootprintRadius" type="string" value="0.1"/> <!-- Footprint radius (m) used to clear all obstacles under the graph. -->
My database file:
linkWhat can I do to improve it?
Daniel