LeGO-LOAM 源码阅读笔记(imageProjecion.cpp)

本文详细解读了LeGO-LOAM中的imageProjecion.cpp源码,涉及点云处理、坐标变换、地面去除、点云分割等关键步骤,解释了各个函数的功能和算法细节,如findStartEndAngle、projectPointCloud等,同时介绍了velodyne雷达数据的相关知识。
摘要由CSDN通过智能技术生成

LeGO-LOAM是一种在LOAM之上进行改进的激光雷达建图方法,建图效果比LOAM要好,但是建图较为稀疏,计算量也更小了。

本文原地址:wykxwyc的博客

github注释后LeGO-LOAM源码:LeGO-LOAM_NOTED
关于代码的详细理解,建议阅读:

1.地图优化代码理解

2.图像重投影代码理解

3.特征关联代码理解

4.LeGO-LOAM中的数学公式推导

以上博客会随时更新,如果对你有帮助,请点击注释代码的github仓库右上角star按钮,你的鼓励将给我更多动力。

imageProjecion.cpp概述

imageProjecion.cpp进行的数据处理是图像映射,将得到的激光数据分割,并在得到的激光数据上进行坐标变换。

imageProjecion

imageProjecion()构造函数的内容如下:

  1. 订阅话题:订阅来自velodyne雷达驱动的topic
    • "/velodyne_points"(sensor_msgs::PointCloud2),订阅的subscriber是subLaserCloud
  2. 发布话题,这些topic有:
    • "/full_cloud_projected"(sensor_msgs::PointCloud2)
    • "/full_cloud_info"(sensor_msgs::PointCloud2)
    • "/ground_cloud"(sensor_msgs::PointCloud2)
    • "/segmented_cloud"(sensor_msgs::PointCloud2)
    • "/segmented_cloud_pure"(sensor_msgs::PointCloud2)
    • "/segmented_cloud_info"(cloud_msgs::cloud_info)
    • "/outlier_cloud"(sensor_msgs::PointCloud2)

然后分配内存(对智能指针初始化),初始化各类参数。

上述的cloud_msgs::cloud_info是自定义的消息类型,其具体定义如下:

Header header 

int32[] startRingIndex  // 长度:N_SCAN
int32[] endRingIndex    // 长度:N_SCAN

float32 startOrientation
float32 endOrientation
float32 orientationDiff

// 以下长度都是 N_SCAN*Horizon_SCAN
bool[]    segmentedCloudGroundFlag 
uint32[]  segmentedCloudColInd 
float32[] segmentedCloudRange

关于上面的自定义消息,另外还需要说明的是,segMsg.startRingIndex[i] = sizeOfSegCloud-1 + 5;或者segMsg.endRingIndex[i] = sizeOfSegCloud-1 - 5;表示的是将第0线和第16线点云横着排列后。每一线点云有一个startRingIndexendRingIndex,表示这一线点云中的一部分,如下图绿色部分。
黑色部分是整体这一线点云中筛选出来满足条件的。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值