Robotics StackExchange | Archived questions

RTABMap rgbd_odometry getting lost

Hello,

I am trying to use the rgbdodometry to publish Odom information to the Gmapping package. I have an aero board and use the R200 camera, so I can just rely on visual odometry to run the Gmapping. Also I am using the depthimageto_laserscan package.

For some reason the rgbd_odometry gets lost very fast, even if I move slow and away from the first scan. If I move away from the first scan it says

No transform from Transform [sender=unknown_publisher]

For frame [/camera_depth_frame]: No transform to fixed frame [map].  TF error: [Lookup would require extrapolation into the future.  Requested time 1518552116.724870413 but the latest data is at time 1518552116.058380480, when looking up transform from frame [camera_depth_frame] 

In the rgbd_odometry tab:

[ WARN] (2018-02-13 15:50:17.789) OdometryF2M.cpp:372::computeTransform() Registration failed: "Not enough 3D features in images (old=2000, new=10, min=20)"
[ INFO] [1518547817.791709400]: Odom: quality=0, std dev=0.000000m|0.000000rad, update time=0.090951s

Below is my launch file:

<?xml version="1.0"?>


<!-- Bring up RealSense-based laser scan using nodelets
     For historical reasons, assumes a R200.  For a ZR300 camera
     use scan_zr300.launch.
-->

<launch>
  <!-- "camera" should uniquely identify the device. 
       All topics are pushed down into the "camera" namespace, 
       and it is prepended to tf frame ids. 
  -->

  <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find realsense_ros_camera)/urdf/test_r200_camera.urdf.xacro'" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />

  <node pkg="tf" type="static_transform_publisher" name="base_link_2_camera_link" args="0 0 0 0 0 0 /base_link /camera_link 100"/>


  <arg name="manager"     value="nodelet_manager"/>
  <!-- Worker threads for the nodelet manager --> 
  <arg name="num_worker_threads" default="4" />

  <arg name="output"      default="screen"/>

  <arg name="camera"      default="camera"/>
  <arg name="camera_type" default="R200"/>
  <arg name="serial_no"   default="" />
  <arg name="usb_port_id" default="" /> <!-- USB "Bus#-Port#" -->
  <arg name="publish_tf"  default="true"/>  <!-- coming from URDF already -->

  <!-- Factory-calibrated depth registration -->
  <arg name="depth_registration" default="false"/>

  <!-- Laserscan topic -->
  <arg name="scan_topic" default="scan"/>

  <!-- Processing Modules and Parameters -->
  <arg name="rgb_processing"                  default="true"/>
  <arg name="ir_processing"                   default="true"/>
  <arg name="depth_processing"                default="true"/>
  <arg name="depth_registered_processing"     default="true"/>
  <arg name="disparity_processing"            default="true"/>
  <arg name="disparity_registered_processing" default="true"/>

  <!-- pick depth mode -->
  <arg if="$(arg depth_registration)" name="depth" value="depth_registered" />
  <arg unless="$(arg depth_registration)" name="depth" value="depth" />

  <!-- other camera parameters -->
  <arg name="mode"              default="manual" />
  <arg name="enable_depth"      default="true" />
  <arg name="enable_ir"         default="true" />
  <arg name="enable_ir2"        default="true" />
  <arg name="enable_color"      default="true" />
  <arg name="enable_pointcloud" default="true" />
  <arg name="enable_tf"         default="false" />
  <!-- lower value of depth resolution improves (reduces) min range -->
  <arg name="depth_width"       default="640" />
  <arg name="depth_height"      default="480" />
  <!-- lower camera resolution for enhanced performance -->
  <arg name="color_width"       default="640" />
  <arg name="color_height"      default="480" />
  <arg name="depth_fps"         default="30" />
  <arg name="color_fps"         default="30" />

  <!-- set up as camera driver parameters -->
  <param name="$(arg camera)/driver/mode"              type="str"  
         value="$(arg mode)" />
  <param name="$(arg camera)/driver/enable_depth"      type="bool" 
         value="$(arg enable_depth)" />
  <param name="$(arg camera)/driver/enable_ir"         type="bool" 
         value="$(arg enable_ir)" />
  <param name="$(arg camera)/driver/enable_ir2"        type="bool" 
         value="$(arg enable_ir2)" />
  <param name="$(arg camera)/driver/enable_color"      type="bool" 
         value="$(arg enable_color)" />
  <param name="$(arg camera)/driver/enable_pointcloud" type="bool" 
         value="$(arg enable_pointcloud)" />
  <param name="$(arg camera)/driver/enable_tf"         type="bool" 
         value="$(arg enable_tf)" />
  <param name="$(arg camera)/driver/depth_width"       type="int"  
         value="$(arg depth_width)" />
  <param name="$(arg camera)/driver/depth_height"      type="int"  
         value="$(arg depth_height)" />
  <param name="$(arg camera)/driver/color_width"       type="int"  
         value="$(arg color_width)" />
  <param name="$(arg camera)/driver/color_height"      type="int"  
         value="$(arg color_height)" />
  <param name="$(arg camera)/driver/depth_fps"         type="int"  
         value="$(arg depth_fps)" />
  <param name="$(arg camera)/driver/color_fps"         type="int"  
         value="$(arg color_fps)" />

  <group ns="$(arg camera)">
    <!-- Start nodelet manager -->
    <node pkg="nodelet" 
          type="nodelet" 
          name="$(arg manager)" 
          args="manager"
          output="$(arg output)">

         <!-- Remapping for perceiving markers -->
         <remap from="/camera/depth/image_raw" to="/depth/image" />
         <remap from="/camera/color/camera_info" to="/rgb/camera_info" />
         <remap from="/camera/color/image_raw" to="/rgb/image" />  

    </node>

    <!-- Start RealSense nodelet -->
    <include file="$(find realsense_camera)/launch/includes/nodelet.launch.xml">
      <arg name="manager"      value="$(arg manager)" />
      <arg name="camera"       value="$(arg camera)" />
      <arg name="camera_type"  value="$(arg camera_type)" />
      <arg name="serial_no"    value="$(arg serial_no)" />
      <arg name="usb_port_id"  value="$(arg usb_port_id)" />
    </include>

    <!-- Start depth image to laserscan conversion nodelet. -->
    <node pkg="nodelet" 
          type="nodelet" 
          name="depthimage_to_laserscan" 
          args="load depthimage_to_laserscan/DepthImageToLaserScanNodelet $(arg manager)">
      <param name="scan_height" value="10"/>
      <param name="output_frame_id" value="/$(arg camera)_depth_frame"/>
      <param name="range_min" value="0.30"/>
      <remap from="image" to="/camera/depth/image_raw"/>
      <remap from="scan"  to="$(arg scan_topic)"/>

    </node>
  </group>

  <!-- Run RGBD_Odometry -->
  <node pkg="rtabmap_ros" type="rgbd_odometry" name="rgbd_odometry">
    <param name="Odom/ResetCountdown" type="string" value="10"/>
  </node>

</launch>

Asked by Andreluizfc on 2018-02-13 15:39:34 UTC

Comments

see https://github.com/introlab/rtabmap_ros/issues/219

Asked by matlabbe on 2018-02-13 22:16:37 UTC

Answers