雷达点云地面分割算法:linefit_ground_segmentation

目录

前言

算法理解

点云划分与映射:

地面线段拟合:

地面点云分割:

算法缺陷


效果展示,黄色点云是原始点云,红色点云是分割后的点云。

前言

上一篇文章提到了相机点云的地面分割及障碍物检测:

基于PCL的相机深度点云地面分割及障碍物检测算法-CSDN博客

做完之后马上就又接了多线雷达的点云地面分割及障碍物检测的开发需求。

其实搜索一下已经有很多博主都有类似的文章,这篇文章只是作为自己的一个开发笔记,记录下对开源项目linefit_ground_segmentation中的算法的理解。

开源项目链接:https://github.com/lorenwel/linefit_ground_segmentation

论文链接:https://ieeexplore.ieee.org/document/5548059/figures#figures

算法理解

博文推荐:
地面分割:Fast Segmentation of 3D Point Clouds for Ground Vehicles-CSDN博客

地面分割算法(一):linefit_ground_segmentation | Monicakaa

上方推荐的博文中皆有详细的linefit_ground_segmentation算法原理讲解,本博客则主要是以白话的形式表达的,希望通过这样的方式可以帮助读者对linefit_ground_segmentation有个快速的初步的了解。

算法的大体步骤分

  • 点云划分与映射
  • 地面线段拟合
  • 地面点云分割(地面点与非地面点判断)

对于这三个步骤我尽量阐明理解可能错误地方,欢迎大家反馈。

点云划分与映射:

将点云划分为多个扇区(Segment),一个扇区作为一个独立的处理单元,每个扇区再分成多个容器(Bin)。同时将点云从三维p(x,y,z)降到二维p(d, z),虽然点云的维度减少,但点云的有效信息是不减少的:

  • d = sqrt(x*x + y*y) ,相当于把笛卡尔坐标系转换到极坐标系。

  • 保留Z轴的信息,要基于z的高度信息判断是否该点是否为路面点。

地面线段拟合:

通过第一步的划分与映射,我们已经得到了许多的Segment和Bin。接下来获取每个Bin里的最低点MinZPoint,从近到远连接每个Bin里的MinZPoint,获取最近相连的两个MinZPoint之间的距离和误差,如果距离较小,允许的误差阈值也比较小,反之误差阈值比较大。如果两个MinZPoint之间的误差小于误差阈值,视这两个点为一个平面,将这两个点放入LocalLines,接着往远处迭代,直到没有点或者下一个点跟此前的其他点不在一个平面,这时候LocalLines里的点如果大于2,则将线发布到GroundLines,这样就得到了一条地面线。按照这样的逻辑一直迭代,直到所有MinZPoint都迭代过至少一次。

地面点云分割:

有了第二步得到的众多地面线,我们计算所有激光点到当前或者相邻的Segment中的地面线的投影误差,如果小于设置的max_dist_to_line阈值,则认为是地面点,否则为非地面点。

算法缺陷

基本逻辑已经清楚那么算法有什么缺陷吗

有的实测当雷达扫描到地面上比较小的物体可能认为是地面

原因什么

我们计算所有激光点到当前或者相邻的Segment中的地面线的投影误差,如果小于设置的max_dist_to_line阈值,则认为是地面点,否则为非地面点。

想象一下多线雷达其中一根线扫到了及其低矮的障碍物时,在障碍物上面点云地面点云高度是不是不会太大。那么这个障碍物会被视为地面如果障碍物比较可以被多根线扫到可能下面线还是会被障碍物上面线地面线比较远了不会被障碍物了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值