plane_seg icon indicating copy to clipboard operation
plane_seg copied to clipboard

Horizontal planes not detected

Open IoannisDadiotis opened this issue 1 year ago • 5 comments

Hi, I have just installed and built the packages in my catkin workspace. Then I am trying to run the anymal example with my own robot and pointcloud as input, i.e. after having changed /plane_seg/point_cloud_in topic name, and fixed_frame_ here to match my case I just run the launch files:

mon launch plane_seg_ros anymal.launch
mon launch plane_seg_ros view_plane_seg.launch

As you can see in the photo below the horizontal planes are not segmented. Why is this happening or what am I doing wrong? Thank you image

IoannisDadiotis avatar Jan 10 '24 12:01 IoannisDadiotis

This code is quite old, but my recollection is that the code uses the sensor/robot pose to determine the 'forward direction'. The coordinate frame is assumed to be robotics convention: x-forward, y-left and z-up. It looks for the vector of the x-axis.

I think the problem is that the your robot coordinates here are optical/CV frame

mauricefallon avatar Jan 10 '24 12:01 mauricefallon

Thank you for the response.

  • Is there a newer version of the code available? I found the repo since it has been cited by very recent papers.
  • I would like to segment all planes in the pointcloud no matter the orientation (not just for locomotion purposes). It is my impression that in this case identifying the forward direction may not be needed, what do you think?

IoannisDadiotis avatar Jan 10 '24 15:01 IoannisDadiotis

In the code I cannot really understand which direction is defined as lookDir and how this is calculated below: https://github.com/ori-drs/plane_seg/blob/f94dc77c684225eded23f488d5b94baf579fd460/plane_seg_ros/src/plane_seg_ros.cpp#L156-L169

Then the z-axis of the look pose (published in /plane_seg/look_pose) is set to coincide with lookDir (why?) https://github.com/ori-drs/plane_seg/blob/f94dc77c684225eded23f488d5b94baf579fd460/plane_seg_ros/src/plane_seg_ros.cpp#L313

Below the frames I have in my use case, where D435_head* is the reference frame of the pointcloud, odometry_world is the fixed_frame_ and the frame without name is the published look_pose. image

IoannisDadiotis avatar Jan 10 '24 16:01 IoannisDadiotis

The lookDirection is the 3D vector forward from the robot's head extracted from the head's quaternion.

In the case of your robot it would be a rotation of the optical_frame so that x+ is pointing forward (mostly) and z+ is pointing up (mostly).

As shown in this image: image

mauricefallon avatar Jan 14 '24 17:01 mauricefallon

Then why the z-axis of the look pose (published in /plane_seg/look_pose) is set to coincide with lookDir in the code below? https://github.com/ori-drs/plane_seg/blob/f94dc77c684225eded23f488d5b94baf579fd460/plane_seg_ros/src/plane_seg_ros.cpp#L313

Shouldn't it be rx = lookDir instead?

IoannisDadiotis avatar Jan 14 '24 19:01 IoannisDadiotis