LeGO-LOAM是一种在LOAM之上进行改进的激光雷达建图方法,建图效果比LOAM要好,但是建图较为稀疏,计算量也更小了。
本文原地址:wykxwyc的博客
github注释后LeGO-LOAM源码:LeGO-LOAM_NOTED
关于代码的详细理解,建议阅读:1.地图优化代码理解
3.特征关联代码理解
以上博客会随时更新,如果对你有帮助,请点击注释代码的github仓库右上角star按钮,你的鼓励将给我更多动力。
文章目录
imageProjecion.cpp概述
imageProjecion.cpp进行的数据处理是图像映射,将得到的激光数据分割,并在得到的激光数据上进行坐标变换。
imageProjecion
imageProjecion()构造函数的内容如下:
- 订阅话题:订阅来自velodyne雷达驱动的topic
"/velodyne_points"
(sensor_msgs::PointCloud2
),订阅的subscriber是subLaserCloud
。
- 发布话题,这些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线点云横着排列后。每一线点云有一个startRingIndex
和endRingIndex
,表示这一线点云中的一部分,如下图绿色部分。
黑色部分是整体这一线点云中筛选出来满足条件的。