1 image_projection
input topic: | |
---|---|
velodyne_points | 点云的输入话题,在utils.h里面可以修改 |
output topic: | |
full_cloud_projected | |
full_cloud_info | |
ground_cloud | 地面点云 |
segmented_cloud | 只去除了outlier的点云(降采样) |
segmented_cloud_pure | 去除了outlier点和地面点的所有的点云(没有降采样) |
segmented_cloud_info | 自定义消息类型 |
outlier_cloud | 不属于规则聚类的点 |
以上加粗的三个话题是传递给下一个节点所需的。
这个cpp的划分十分工整,在雷达的回调函数里进行了以下7个功能的处理;
-
- Convert ros message to pcl point cloud
copyPointCloud(laserCloudMsg);
-
- Start and end angle of a scan
findStartEndAngle();
-
- Range image projection
projectPointCloud();
-
- Mark ground points
groundRemoval();
-
- Point cloud segmentation
cloudSegmentation();
-
- Publish all clouds
publishCloud();
-
- Reset parameters for next iteration
resetParameters();
下面,对每个函数的功能做一个详细的解答;
1.1 copyPointCloud(laserCloudMsg)
概述:将ROS_MSG -> PCL Poindcloud
没什么好说的,就是将点云的消息类型从ROS格式转换成了PCL的格式。
1.2 findStartEndAngle()
找到雷达旋转的开始的角度和结束的角度
atan2()范围在 ( − π , π ) (-\pi,\pi) (−π,