Cannot detect more loop closures offline

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

Cannot detect more loop closures offline

Hi matlabbe,

I'm facing an issue regarding the loop closure detection. When I try to postprocess a db offline with the databaseViewer, and try to add more loop closures (both manually and automatically), I'm getting the following error which makes impossible to increase the number of loop closures:

[ERROR] (2018-07-18 10:20:18.149) RegistrationIcp.cpp:1174::computeTransformationImpl() RegistrationIcp cannot do registration with a null guess.

The error shows in both laser and RGBD mapping. Is this the expected behaviour? I don't now if I'm missing some steps... I'll copy below the parameters I'm using in case they can help. They are based on the multimapping demo, but some of them have been changed to improve the loop closure detection in long runs (I'm mapping a huge office).

<!-- RTAB-Map's parameters: do "rosrun rtabmap rtabmap (double-dash)params" to see the list of available parameters. -->
        <!--param name="Rtabmap/TimeThr"            type="string" value="700"/-->
        <param name="Rtabmap/DetectionRate"     type="string" value="1"/> <!-- def= 1, better 2-->

        <param name="Mem/RehearsalSimilarity"    type="string" value="0.45"/>  

        <param name="Kp/DetectorStrategy"        type="string" value="0"/>   <!-- use SURF -->
        <param name="SURF/HessianThreshold"      type="string" value="60"/> <!-- def=500, p=60 -->  
        <param name="Kp/IncrementalFlann"        type="string" value="true"/>  <!-- ¿? -->
        <param name="Kp/TfIdfLikelihoodUsed"     type="string" value="true"/> <!-- ¿? -->
        <param name="RGBD/AngularUpdate"         type="string" value="0.01"/>
	<param name="RGBD/LinearUpdate"          type="string" value="0.01"/>
	<param name="RGBD/NeighborLinkRefining"  type="string" value="true"/> <!--odom with laser--> 
	<param name="RGBD/ProximityBySpace"      type="string" value="false"/> 
	<param name="RGBD/ProximityByTime"       type="string" value="false"/> 
	<param name="RGBD/OptimizeFromGraphEnd"  type="string" value="false"/> <!-- ¿? -->
        <param name="RGBD/OptimizeMaxError"      type="string" value="1.0"/> <!--def=1.0--> 
        <param name="RGBD/ProximityPathMaxNeighbors" type="string" value="10"/>
        <param name="RGBD/CreateOccupancyGrid"  type="string" value="true"/>
        <param name="RGBD/ProximityMaxGraphDepth" type="string" value="0"/>
        <param name="RGBD/ProximityPathFilteringRadius" type="string" value="1"/>
        <!--param name="RGBD/LocalImmunizationRatio" type="string" value="0.55"/-->
        <param name="Optimizer/Strategy"         type="string" value="1"/>  <!-- TORO=0, g20=1 -->
	<param name="Optimizer/Iterations"       type="string" value="100"/> 
        <param name="Bayes/FullPredictionUpdate" type="string" value="true"/> 

	<param name="Reg/Strategy"               type="string" value="1"/> <!-- ICP -->
        <param name="Reg/Force3DoF"              type="string" value="true"/> 

        <!-- As we are not using visual odometry, Vis params are not used, only ICP params -->
        <param name="Vis/MinInliers"             type="string" value="5"/>
	<param name="Vis/MaxDepth"               type="string" value="4.0"/>
        <param name="Vis/FeatureType"     	 type="string" value="0"/> <!-- use SURF -->

	<param name="Icp/Iterations"             type="string" value="60"/>
	<param name="Icp/VoxelSize"              type="string" value="0"/>
        <!--param name="Icp/Epsilon"                type="string" value="0.01"/-->

	<param name="Grid/FromDepth"             type="string" value="false"/>
        <!--param name="Grid/Scan2dUnknownSpaceFilled" type="string" value="true"/--> <!--Fill unknown space if laser map is selected-->
        <param name="Grid/RangeMax"              type="string" value="4.0"/>
        <param name="Grid/3D"                    type="string" value="false"/>
        <!--param name="GridGlobal/FootprintRadius" type="string" value="0.45"/--> <!-- 0.54 -->
  	<param name="GridGlobal/MinSize"         type="string" value="40"/> <!--  -->

Thanks for your help.

Reply | Threaded
Open this post in threaded view

Re: Cannot detect more loop closures offline


It is normal as you set:
<param name="Reg/Strategy"               type="string" value="1"/> <!-- ICP -->

which is fine for the robot, but for database viewer, this parameter is also used to add or refine constraints. When refining constraints it should be okay as a guess exists. However to add new constraints, change in database viewer this parameter to 2 (Vis+ICP). See View->Core Parameters->Reg tab. A visual guess will be computed, then refined with ICP.