loam学习1.

代码 https://github.com/Mitchell-Lee-93/kitti-A-LOAM

从cmake.txt里面看到

接下来就按照顺序看这几个主要的代码

ScanRegististration.cpp

从main函数看起,主要是下面的几个函数

在这里插入图片描述

大致是接收bag文件中的点云信息,然后做了处理,处理完了就再发布出去,供后面的算法使用.

laserCloudHandler

通篇所用的 PointType 指的是

在这里插入图片描述

但是从 laserCloudHandler 中可以看出来

在这里插入图片描述

而是用 PointXYZ 去和 bag中的数据进行的对接,这说明原始的算法只需要接收 点云数据的 xyz就行了,连强度都不需要.

所以 laserCloudHandler的前半部分的主要功能其实就是得到intensity.

这个东西 竟然可以算得出来,(理论上肯定是可以的),
那这个 intensity 在激光slam中的算法作用是什么 呢?它好像并不能够提供关于位置的信息,可能能够反应每个点的feature.这一点还要再确认。

这里先不细看到底intensity是怎么算出来的,但是这个函数的前 面的目的主要就是这个,然后 把扫到的点按照 scanID给排好,这里的scanId我理解就是 ring index。

在这里插入图片描述

pubLaserCloud

   sensor_msgs::PointCloud2 laserCloudOutMsg;                                                                            
    pcl::toROSMsg(*laserCloud, laserCloudOutMsg);
    laserCloudOutMsg.header.stamp = laserCloudMsg->header.stamp;
    laserCloudOutMsg.header.frame_id = "/camera_init";
    pubLaserCloud.publish(laserCloudOutMsg);  


看来是 laserCloud 与它进行的对接。

在这里插入图片描述

这里主要是记录每个scanid开始的index和结束的index,这里+5与-6个人理解是为了去noise,因为在交界的地方容易有误差。(自己猜测。) 这一步有了之后,就相当于知道了 具体每一个scanid对应的起始位置与结束位置,便于后面进行处理.

接下来是计算曲率

在这里插入图片描述

for 里面的5就是因为,上面一步把前5个点,与后5个点都去掉了,因此,只用中间的点来算。

可以看到这里每个点,都取了它的前5个,和后5个点总共10个点,然后 再减去当前点的10倍
就相当于是

( x 1 − x 0 ) + ( x 2 − x 0 ) + . . . . + ( x 10 − x 0 ) (x1-x0) + (x2-x0)+....+(x10-x0) (x1x0)+(x2x0)+....+(x10x0)

这里需要查一下,曲率的离散计算方式

然后 接下来算完曲率之后就是要根据曲率来判断哪些点是 corner点,哪些点是surface点。

得到这些点之后,再发布出去.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值