Does obstacles_detection nodelet assume that the sensor is level?

Posted by ibd on
URL: http://official-rtab-map-forum.206.s1.nabble.com/Does-obstacles-detection-nodelet-assume-that-the-sensor-is-level-tp3485.html

Hello

I have run into yet another oddity concerning point cloud processing (referring to the "minimum height" problem in the other thread I opened).

The issue is related to the obstacles_detection nodelet. Namely, I split the cloud that I get from ROS tango streamer, from the google tango device, into an obstacles cloud and a ground cloud.

I have noticed that when I angle the tango device upwards or downwards, I get unexpected output of the obstacles_detection nodelet.

1. If I angle the point cloud up, it seems that some transformation is wrong. The output does not align with the original point cloud anymore. The rotation around the gravity seems correct, however some other rotation seems off. Here's a screenshot to illustrate:

The white point cloud is the output of the obstacles_detection nodelet, namely the obstacles cloud. The colored point cloud is the map generated by RTAB-map. As you can see, the alignment is off.

2. If I angle the point cloud down, I can see that many points are filtered -- the resulting obstacles cloud contains way less points than are observable (I am pointing the tango camera at a matte, well-lit object).


Here's a picture of the behavior if the tango tablet is held near level (not facing up or down).


All of this makes me think that the obstacles_detection nodelet assumes that the sensor input to it is level (facing straight ahead). Is that the case?
If yes, how could I change this behavior to work with angled sensor placement?

For reference, this is how I launch the obstacles_detection nodelet:
<node pkg="nodelet" type="nodelet" name="obstacles_detection" args="load rtabmap_ros/obstacles_detection rtabmap_pc_processing" output="screen">
    <remap from="cloud" to="tango_point_cloud_relay"/>
    <remap from="obstacles" to="/obstacles_cloud"/>
    <remap from="ground"    to="/ground_cloud"/>

    <param name="frame_id"             type="string" value="base_footprint"/>    
    <param name="map_frame_id"         type="string" value="map"/>
    <param name="wait_for_transform"   type="bool" value="true"/>

    <param name="Grid/MaxGroundAngle"  type="int" value="20"/>
    <param name="Grid/NormalK"         type="int" value="20"/>
    <param name="Grid/MaxGroundHeight" type="double" value="0.05"/>
    <param name="Grid/CellSize" type="double" value="0.05"/>
  </node>

And this is my TF tree:




Thank you!

Best regards
ibd