一: 序言
想了解更多自动驾驶项目课程以及获取学习代码的可以参考这个链接
无人车采用纯跟踪算法跟随离线路径
为了解决点云滤波后仍存在大量地面点云的问题,需要进行地面点云剔除工作。通常情况下,锥桶所摆放的地区往往是处在传统公路上,该环境下地面往往不存在较高坡度问题,所以本次地面点云剔除工作基于常见平面工况进行实现。
二:具体方案
地面点云剔除常见方案之一是采用随机抽样一致性算法(RANSAC)来进行地面点云剔除。该算法以迭代的思想将点云数据划分为正确数据和异常数据,然后剔除异常数据,获得所需的有效数据。然而,采用RANSAC算法进行地面点云剔除时存在一些问题:首先,该算法需要经过大量的迭代才能成功拟合平面模型,这导致计算时间较长。其次,在进行异常点删除时,通常使用固定阈值来判断点云数据是否为有效数据,这种方法可能会导致地面点云剔除不干净,依然存在无效地面点云。基于上述问题,对RANSAC算法进行了改进优化。
- 改进思路一:锥桶组成的道路上可以假设环境中不存在树木、行人等其他目标,点云分割仅限于目标锥桶点云和地面点云。为了加快计算速率并缩小搜索空间,利用激光雷达传感器硬件安装高度和锥桶障碍物自身高度特征来设定获取点云数据的轴区域。
- 地面模型搭建过程中为了消除孤立噪点对后续平面拟合造成的精度影响,采用最低点为最优地面点这一思想完成对于地面点集的获取。
- 车辆在行驶过程中存在车辆运动与非理想地面两种因素影响分割精度,单一固定阈值往往是无法达到较优的地面点云剔除效果,所以本算法通过组合导航定位系统传感器采集车辆翻滚角与俯仰角两种参数进行分析来达到自适应阈值的分割效果
部分代码如下:
sort(laserCloudIn.points.begin(), laserCloudIn.end(), point_cmp);
pcl::PointCloud<pcl::PointXYZ>::iterator it = laserCloudIn.points.begin();
for (int i = 0; i < laserCloudIn.points.size(); i++)
{
if (laserCloudIn.points[i].z < -1.5 * sensor_height_)//0.25
{
it++;
}
else
{
break;
}
}
效果图中红点为有效的锥桶点云数据,线条状为无效地面点云数据,可视化的三维坐标轴为采集数据时车辆自身位置。
三:结论
优化后的算法能够显著提高算法的效率,并且达到去除地面点云的效果。