Robotics StackExchange | Archived questions

ground plane filtering in uneven terrain in a pointcloud?

Hi.

I am using the Velodyne Puck for obstacle detection in a robot that needs to traverse uneven terrain. I was wondering what the best way to filter the ground is? I have looked at rtabmap in simulation which was able to filter the ground using a kinect. In practice however, it is not filtering my ground plane. I suspect it is because as we move further away, the distance between scans gets larger (since its just a 3D representation of 2D scans).

Thanks, Grant.

Asked by PapaG on 2019-11-07 23:25:13 UTC

Comments

Answers

rtabmap_ros/obstacles_detection may not work out-of-the-box with 3D lidar scans like the velodyne. The approach assumes the cloud is relatively uniformly dense and close to the robot, like stereo or rgb-d clouds. The velodyne creates 16 lines or rays that are far from the others on a flat ground, which make the normals estimation difficult of the point cloud. Normals (looking up) are used to detect the ground, then points are clustered to a maximum distance.

Filtering parameters can be shown with:

$ rtabmap --params | grep Grid/

Example with kitti2bag sample bag:

$ roscore
$ rosparam set use_sim_time true
$ rosrun nodelet nodelet standalone rtabmap_ros/obstacles_detection cloud:=/kitti/velo/pointcloud _Grid/PreVelFiltering:=true _Grid/CellSize:=0.5 _Grid/ClusterRadius:=1 _Grid/FlatObstacleDetected:=false  _Grid/NormalK:=20 _Grid/RangeMax:=0  _wait_for_transform:=true _Grid/MaxGroundAngle:=15
$ rosbag play --clock --pause kitti_2011_09_26_drive_0002_synced.bag

image description

Note the 2 red lines on the road far ahead, the normal estimation could not get enough neighbors to correctly estimate the normals of those points. Grid/NormalK (search K neighbors) and/or Grid/CellSize could be tuned to include them.

Warning: the input cloud should be dense if there is only one row, otherwise the output obstacle and ground clouds will be empty. There is an issue with the bag created from kitti2bag, the cloud has height 1 but is not dense (but it should). Either set the following in kitti2bag.py:

pcl_msg.is_dense = True

or update rtabmap_ros, I've made a fix detecting this issue.

cheers,
Mathieu

Asked by matlabbe on 2019-11-16 21:42:21 UTC

Comments