A-LOAM(前端-1)的特征提取及均匀化-算法流程+代码注释

这个函数是个回调函数,在订阅到点云数据的时候才会运行,ALOAM中的点云接收频率为先判断初始化,等待几帧来到后才认定为初始化成功进行线束id计算与每个点的时间戳,并将点云存到其对应的个数组中标记每个线束的最左5与最右5不参与曲率计算开始曲率计算,:这里实际处理是将全部点云都参与曲率计算了,计算曲率的公式可以这样认为x1+x2+x3+x4+x5−10∗x6+x7+x8+x9+x10+x11开始特征提取,用到第4点的曲率信息。.................................
摘要由CSDN通过智能技术生成

laserCloudHandler流程

该函数是提取特征点的处理函数,接收到雷达硬件发送过来的消息的时候就会运行这个函数,来对点云进行预处理
这个函数是个回调函数,在订阅到点云数据的时候才会运行,ALOAM中的点云接收频率为10HZ

  1. 先判断初始化,等待几帧来到后才认定为初始化成功

  2. 进行线束id计算与每个点的时间戳,并将点云存到其对应的第scanID个数组中

  3. 标记每个线束的最左5与最右5不参与曲率计算

  4. 开始曲率计算,notic:这里实际处理是将全部点云都参与曲率计算了,计算曲率的公式可以这样认为 ,这里是仅对x处理时,对y,z操作同理 d i f f X = x 1 + x 2 + x 3 + x 4 + x 5 − 10 ∗ x 6 + x 7 + x 8 + x 9 + x 10 + x 11 diffX=x1+x2+x3+x4+x5-10*x6+x7+x8+x9+x10+x11 diffX=x1+x2+x3+x4+x510x6+x7+x8+x9+x10+x11
    曲率 σ = d i f f X 2 + d i f f Y 2 + d i f f Z 2 σ = diffX^{2}+ diffY^{2}+ diffZ^{2} σ=diffX2+diffY2+diffZ2

  5. 开始特征提取,用到第4点的曲率信息

    • 提取曲率最大的2个点
    • 提取曲率一般大的20-2个点
    • 边缘点均匀化操作
    1. 将选中点的周围5个点都置1,判断条件为,查看相邻点的距离是否差异过大,过大则说明不连续是边缘点会break跳出不置为,差异小则说明是临近点有冗余,则置为1(往左操作5个点云,往右操作5个点云,共两次for循环)
    • 提取平坦点,只要曲率小于0.1都认为是平坦点,没有最平坦和一般平坦
    • 和上面一样均匀化操作
    • 对平坦点进行体素滤波获得体素滤波后的平坦点
  6. 将原始点云、曲率最大的点、曲率一般大的点、全部平坦点、体素滤波后的平坦点发布出去给odom和mapping进行计算

  7. 判断点云预处理时间是否超过100ms,因为KITTY数据集是10HZ,数据处理超过100ms可能会出现丢帧的情况进而影响odom和mapping的效果

个人学习总结,有错误的地方欢迎指出一起讨论

曲率计算代码

pcl::PointCloud<PointType>::Ptr laserCloud(new pcl::PointCloud<PointType>());
    for (int i = 0; i < N_SCANS; i++)
    {
    //每个scan的前后5个点都不参与曲率计算
        scanStartInd[i] = laserCloud->size() + 5;  //最左5不加入曲率计算,scanStartInd来区分第几个线束的点,判断是否加入曲率计算
        *laserCloud += laserCloudScans[i];
        scanEndInd[i] = laserCloud->size() - 6; //最右5不加入曲率计算
    }

    printf("prepare time %f \n", t_prepare.toc());
	//开始计算曲率,这里将全部点就计算曲率了
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rhys___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值