Low Features Detected

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

Low Features Detected

chainer
Hi, I have used the outdoor mapping launch file with some modification from using GFTT+BRIEF
however no matter what i change I still get low features detected and poor mapping detection. Almost all the time i would lost tracking. I am using ROS Hydro with Rtabmap 0.7

<launch>

  <!-- Rotate the camera frame. -->
  <arg name="pi/2" value="1.5707963267948966" />
  <arg name="camdist" value ="0.1397" />
  <!--<arg name="optical_rotate" value="0 0 0 -$(arg pi/2) 0 -$(arg pi/2)" />-->
<arg name="optical_rotate" value="0.28 0.06 0.96 -1.55 0 -1.85" />
  <node pkg="tf" type="static_transform_publisher" name="camera_base_link"
        args="$(arg optical_rotate) base_link stereo_camera 100" /> 


<!-- Run the ROS package stereo_image_proc -->
<group ns="/stereo_camera" >

    <!-- Odometry -->
    <node pkg="rtabmap_ros" type="stereo_odometry" name="stereo_odometry" output="screen">
        <remap from="left/image_rect"       to="left/image_rect"/>
        <remap from="right/image_rect"      to="right/image_rect"/>
        <remap from="left/camera_info"      to="left/camera_info"/>
        <remap from="right/camera_info"     to="right/camera_info"/>
        <remap from="odom" to="/stereo_camera/odom"/> <!-- addd -->
        <param name="frame_id" type="string" value="base_link"/>
        <param name="odom_frame_id" type="string" value="odom"/>
        <param name="approx_sync" type="bool" value="false"/>
        <param name="queue_size" type="int" value="30"/>

        <param name="Odom/InlierDistance" type="string" value="0.1"/>
        <param name="Odom/MinInliers" type="string" value="10"/>
        <param name="Odom/RoiRatios" type="string" value="0.03 0.03 0.04 0.04"/>
        <param name="Odom/MaxDepth" type="string" value="10"/>
        <param name="OdomBow/NNDR" type="string" value="0.8"/>   <!--addd -->
        <param name="Odom/FillInfoData" type="string" value="true"/> <!-- - addd -->
        <param name="GFTT/MaxCorners" type="string" value="500"/>
        <param name="GFTT/MinDistance" type="string" value="5"/>
    </node>     
</group>

<group ns="rtabmap">   
  <node name="rtabmap" pkg="rtabmap_ros" type="rtabmap" output="screen" args="--delete_db_on_start">
     <param name="frame_id" type="string" value="base_link"/>
     <param name="subscribe_stereo" type="bool" value="true"/>
     <param name="subscribe_depth" type="bool" value="true"/>
      <param name="wait_for_transform" type="bool" value="true"/> <!--added-->
     <remap from="left/image_rect" to="/stereo_camera/left/image_rect_color"/>
     <remap from="right/image_rect" to="/stereo_camera/right/image_rect"/>
     <remap from="left/camera_info" to="/stereo_camera/left/camera_info"/>
     <remap from="right/camera_info" to="/stereo_camera/right/camera_info"/>

     <remap from="odom" to="/stereo_camera/odom"/>

     <param name="queue_size" type="int" value="30"/>

     <!-- RTAB-Map's parameters -->
     <param name="Rtabmap/TimeThr" type="string" value="0"/>  <!--700-->
     <param name="Rtabmap/DetectionRate" type="string" value="1"/> <!--0-->

     <param name="Kp/WordsPerImage" type="string" value="0"/>   <!-- 100 -->
     <param name="Kp/RoiRatios" type="string" value="0.03 0.03 0.04 0.04"/>
     <param name="Kp/DetectorStrategy" type="string" value="6"/>   <!-- 0use SURF -->
     <param name="Kp/NNStrategy" type="string" value="3"/>         <!-- 1kdTree -->

     <param name="SURF/HessianThreshold" type="string" value="1000"/>

     <param name="LccBow/MaxDepth" type="string" value="3"/> <!-- 10 -->
     <param name="LccBow/MinInliers" type="string" value="10"/>
     <param name="LccBow/InlierDistance" type="string" value="0.02"/>  <!--0.1-->
      
     <param name="LccBow/EstimationType" type="string" value="1"/>
     <param name="LccReextract/Activated" type="string" value="true"/>
     <param name="LccReextract/MaxWords" type="string" value="0"/> <!-- 500 -->
         
     <param name="GFTT/MinDistance" type="string" value="1"/> <!-- ADDDED-->    
     <param name="BRIEF/Bytes" type="string" value="32"/> <!-- ADDDED-->  
     <param name="DbSqlite3/InMemory" type="string" value="true"/> <!-- ADDDED-->  
     <param name="Mem/NotLinkedNodesKept" type="string" value="false"/> <!-- ADDDED--> 
     <param name="Kp/MaxDepth" type="string" value="3"/> <!-- ADDDED--> 
     <param name="RGBD/OptimizeFromGraphEnd" type="string" value="true"/> <!-- ADDDED-->
 
     <param name="RGBD/OptimizedIterations" type="string" value="10"/> <!--10 for GTSAM, 100 for TORO-->
     <param name="RGBD/OptimizeStrategy" type="string" value="0"/> <!--TOTO=0 g2o=1, GTSAM=2    2-->
     <param name="RGBD/OptimizeRobust" type="string" value="true"/>

 <param name="RGBD/LocalLoopDetectionSpace" type="string" value="true"/>  <!-- Local loop closure detection (using estimated position) with locations in WM -->
	  <param name="RGBD/LocalLoopDetectionTime" type="string" value="false"/>   <!-- Local loop closure detection with locations in STM -->


  </node>





  <!-- Visualisation RTAB-Map -->
  <node pkg="rtabmap_ros" type="rtabmapviz" name="rtabmapviz" args="-d $(find rtabmap_ros)/launch/config/rgbd_gui.ini" output="screen">
     <param name="subscribe_stereo" type="bool" value="true"/>
     <param name="subscribe_odom_info" type="bool" value="true"/>
     <param name="queue_size" type="int" value="10"/>
     <param name="frame_id" type="string" value="base_link"/>
     <remap from="left/image_rect" to="/stereo_camera/left/image_rect_color"/>
     <remap from="right/image_rect" to="/stereo_camera/right/image_rect"/>
     <remap from="left/camera_info" to="/stereo_camera/left/camera_info"/>
     <remap from="right/camera_info" to="/stereo_camera/right/camera_info"/>
     <remap from="odom_info" to="/stereo_camera/odom_info"/>
     <remap from="odom" to="/stereo_camera/odom"/>
     <remap from="mapData" to="mapData"/><!-- addd -->
     
  </node>

 </group>

   <node pkg="rviz" type="rviz" name="rviz" args="-d $(find rtabmap_ros)/launch/config/stereo_rviz.rviz"/> <!-- addd -->


 </launch>

Initially i used the unmodified version but still low detection rate.
<launch>

  <!-- Rotate the camera frame. -->
  <arg name="pi/2" value="1.5707963267948966" />
  <arg name="camdist" value ="0.1397" />
  <!--<arg name="optical_rotate" value="0 0 0 -$(arg pi/2) 0 -$(arg pi/2)" />-->
<arg name="optical_rotate" value="0.28 0.06 0.96 -1.55 0 -1.8" />
  <node pkg="tf" type="static_transform_publisher" name="camera_base_link"
        args="$(arg optical_rotate) base_link stereo_camera 100" /> 


<!-- Run the ROS package stereo_image_proc -->
<group ns="/stereo_camera" >

    <!-- Odometry -->
    <node pkg="rtabmap_ros" type="stereo_odometry" name="stereo_odometry" output="screen">
        <remap from="left/image_rect"       to="left/image_rect"/>
        <remap from="right/image_rect"      to="right/image_rect"/>
        <remap from="left/camera_info"      to="left/camera_info"/>
        <remap from="right/camera_info"     to="right/camera_info"/>
        <remap from="odom" to="/stereo_camera/odom"/> <!-- addd -->
        <param name="frame_id" type="string" value="base_link"/>
        <param name="odom_frame_id" type="string" value="odom"/>
        <param name="approx_sync" type="bool" value="false"/>
        <param name="queue_size" type="int" value="30"/>

        <param name="Odom/InlierDistance" type="string" value="0.1"/>
        <param name="Odom/MinInliers" type="string" value="10"/>
        <param name="Odom/RoiRatios" type="string" value="0.03 0.03 0.04 0.04"/>
        <param name="Odom/MaxDepth" type="string" value="10"/>
        <param name="OdomBow/NNDR" type="string" value="0.8"/>   <!--addd -->
        <param name="Odom/FillInfoData" type="string" value="true"/> <!-- - addd -->
        <param name="GFTT/MaxCorners" type="string" value="500"/>
        <param name="GFTT/MinDistance" type="string" value="5"/>
    </node>     
</group>

<group ns="rtabmap">   
  <node name="rtabmap" pkg="rtabmap_ros" type="rtabmap" output="screen" args="--delete_db_on_start">
     <param name="frame_id" type="string" value="base_link"/>
     <param name="subscribe_stereo" type="bool" value="true"/>
     <param name="subscribe_depth" type="bool" value="true"/>
      <param name="wait_for_transform" type="bool" value="true"/> <!--added-->
     <remap from="left/image_rect" to="/stereo_camera/left/image_rect_color"/>
     <remap from="right/image_rect" to="/stereo_camera/right/image_rect"/>
     <remap from="left/camera_info" to="/stereo_camera/left/camera_info"/>
     <remap from="right/camera_info" to="/stereo_camera/right/camera_info"/>

     <remap from="odom" to="/stereo_camera/odom"/>

     <param name="queue_size" type="int" value="30"/>

     <!-- RTAB-Map's parameters -->
     <param name="Rtabmap/TimeThr" type="string" value="700"/>  <!--700-->
     <param name="Rtabmap/DetectionRate" type="string" value="0"/> <!--0-->

     <param name="Kp/WordsPerImage" type="string" value="100"/>   <!-- 100 -->
     <param name="Kp/RoiRatios" type="string" value="0.03 0.03 0.04 0.04"/>
     <param name="Kp/DetectorStrategy" type="string" value="0"/>   <!-- 0use SURF -->
     <param name="Kp/NNStrategy" type="string" value="1"/>         <!-- 1kdTree -->

     <param name="SURF/HessianThreshold" type="string" value="1000"/>

     <param name="LccBow/MaxDepth" type="string" value="10"/> <!-- 10 -->
     <param name="LccBow/MinInliers" type="string" value="10"/>
     <param name="LccBow/InlierDistance" type="string" value="0.1"/>  <!--0.1-->
      
     <param name="LccBow/EstimationType" type="string" value="1"/>
     <param name="LccReextract/Activated" type="string" value="true"/>
     <param name="LccReextract/MaxWords" type="string" value="500"/> <!-- 500 -->
         
    
 
     <param name="RGBD/OptimizedIterations" type="string" value="10"/> <!--10 for GTSAM, 100 for TORO-->
     <param name="RGBD/OptimizeStrategy" type="string" value="2"/> <!--TOTO=0 g2o=1, GTSAM=2    2-->
     <param name="RGBD/OptimizeRobust" type="string" value="true"/>

 <param name="RGBD/LocalLoopDetectionSpace" type="string" value="true"/>  <!-- Local loop closure detection (using estimated position) with locations in WM -->
	  <param name="RGBD/LocalLoopDetectionTime" type="string" value="false"/>   <!-- Local loop closure detection with locations in STM -->


  </node>





  <!-- Visualisation RTAB-Map -->
  <node pkg="rtabmap_ros" type="rtabmapviz" name="rtabmapviz" args="-d $(find rtabmap_ros)/launch/config/rgbd_gui.ini" output="screen">
     <param name="subscribe_stereo" type="bool" value="true"/>
     <param name="subscribe_odom_info" type="bool" value="true"/>
     <param name="queue_size" type="int" value="10"/>
     <param name="frame_id" type="string" value="base_link"/>
     <remap from="left/image_rect" to="/stereo_camera/left/image_rect_color"/>
     <remap from="right/image_rect" to="/stereo_camera/right/image_rect"/>
     <remap from="left/camera_info" to="/stereo_camera/left/camera_info"/>
     <remap from="right/camera_info" to="/stereo_camera/right/camera_info"/>
     <remap from="odom_info" to="/stereo_camera/odom_info"/>
     <remap from="odom" to="/stereo_camera/odom"/>
     <remap from="mapData" to="mapData"/><!-- addd -->
     
  </node>

 </group>

   <node pkg="rviz" type="rviz" name="rviz" args="-d $(find rtabmap_ros)/launch/config/stereo_rviz.rviz"/> <!-- addd -->


 </launch>



I am using a PGR Bumblebee2 BB2 and have calibrated the stereo camera.


I have mounted the camera in such a way below


Could it be the Stereo Camera?
Here is some of the failure to detect


It is quite hard to get features detected I am not sure why it is so.

Thanks
Reply | Threaded
Open this post in threaded view
|

Re: Low Features Detected

matlabbe
Administrator
Hi,

I recommend to use the latest version of rtabmap from GitHub master branch. It should build on Hydro. See Build from source section.

You've made a lot of changes under rtabmap node. These changes will only affect the loop closure detection performance. I prefer to use SIFT/SURF/ORB (rotation invariant) features for loop closure detection. In your case, it seems to be an odometry tracking problem, so tuning parameters should be done under stereo_odometry node.

Some examples to try:
<!-- Odometry -->
<node pkg="rtabmap_ros" type="stereo_odometry" name="stereo_odometry" output="screen">

   <param name="GFTT/MaxCorners" type="string" value="1000"/>  <!-- more features to track, you can even set to 0 (not bounded) but odometry will be computed less fast -->
   <param name="GFTT/QualityLevel" type="string" value="0.0001"/> <!-- with low quality level, more features will be extracted in dark areas -->  

   <param name="Odom/EstimationType"  type="string" value="1"/> <!-- use PnP transform estimation -->
   <param name="Odom/PnPReprojError"  type="string" value="2"/> <!-- (pixels) for PnP -->

   ...
</node>

For convenience, you can show all odometry parameters using:
$ rosrun rtabmap_ros stereo_odometry --params


cheers,
Mathieu
Reply | Threaded
Open this post in threaded view
|

Re: Low Features Detected

chainer
In reply to this post by chainer
So i just rebuild with the source? Cus i aready installed using sudo apt-get install ros-hydro-rtabmap-ros

do i need to remove it first or just follow the Build from source instruction?
Reply | Threaded
Open this post in threaded view
|

Re: Low Features Detected

matlabbe
Administrator
Hi,

Yes, uninstall ros-hydro-rtabmap and ros-hydro-rtabmap-ros:
$ sudo apt-get remove ros-hydro-rtabmap ros-hydro-rtabmap-ros
then follow instructions from point 2 (you can skip the optional dependencies section in your case as they should be already installed).

cheers