ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
I'm not sure of the "optimal" way, but there are several options for handling somewhat uneven terrain. Unfortunately, most of the approaches I know require more than just a single-layer lidar. Here are a couple in case it gives you ideas:
If you have an IMU, you can filter the lidar returns by setting z limits, much like you suggested. Basically, with the tilt angle from the IMU, you can calculate the height of each return point and kick out the ones that are too far from the 2D plane. The actual z limits would depend on your setup and environment. Some SLAM packages have this functionality built in.
Calculate surface normals based on lidar data. It's easiest with multi-layer lidars, but the idea is to throw out points that indicate a plane with a normal that's mostly in the z direction (floor or ceiling).
If you're stuck with just a single-layer lidar, you may be able to filter based on further assumptions about your environment/application, but that can be tricky. For example, how do you know (from lidar data alone) that you're looking at the ground and not a big box someone dropped right in front of your robot? One scenario:
As far as computation, these approaches aren't very expensive and shouldn't be a problem--depending on your platform, obviously. Go with the simplest filter that makes sense. If you explain more of your scenario, maybe there's a more clever solution.
2 | No.2 Revision |
I'm not sure of the "optimal" way, but there are several options for handling somewhat uneven terrain. Unfortunately, most of the approaches I know require more than just a single-layer lidar. Here are a couple in case it gives you ideas:
If you have an IMU, you can filter the lidar returns by setting z limits, much like you suggested. Basically, with the tilt angle from the IMU, you can calculate the height of each return point and kick out the ones that are too far from the 2D plane. The actual z limits would depend on your setup and environment. Some SLAM packages have this functionality built in.
Calculate surface normals based on lidar data. It's easiest with multi-layer lidars, but the idea is to throw out points that indicate a plane with a normal that's mostly in the z direction (floor or ceiling).
If you're stuck with just a single-layer lidar, you may be able to filter based on further assumptions about your environment/application, but that can be tricky. For example, how do you know (from lidar data alone) that you're looking at the ground and not a big box someone dropped right in front of your robot? One scenario:
As far as computation, these approaches aren't very expensive and shouldn't be a problem--depending on your platform, obviously. Go with the simplest filter that makes sense. If you explain more of your scenario, maybe there's a more clever solution.