本文主要是介绍velodyne的数据结构以及如何自定义一个点云库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
velodyne的数据结构以及如何自定义一个点云库
velodyne数据结构
对于数据结构/velodyne_points,有三个返回值:
- point: 坐标(x,y,z)
- intensity: 反射值强度(0~255)
- ring: 第几线激光束(0~15)
· point就是雷达返回的点的坐标;
· 激光雷达除了返回距离之外,还返回反射值强度(Intensity),不同的障碍物材质反射的激光束的强度(Intensity)不同。Velodyne 测量 1m - 100m 物体的反射率(距离小于一米的点应该被忽略),其反射率的标定文件存储在VLP-16内置的FPGA中。当反射为漫反射(Diffuse Reflector)时,反射率的数值为0~100;当反射为逆反射(Retro-Reflector)时,数值为101~255。在Velodyne的配置页面中可以选择反射模型: Strongest, Last 或 Dual。
自定义一个点云库
先看一下代码 :
namespace plane_ground_filter
struct PointXYZIRL
{PCL_ADD_POINT4D; //这将添加成员x,y,z,他们可以用point访问float intensity; //反射值强度uint16_t ring; //激光的环数(说明是第几根线)uint16_t label; EIGEN_MAKE_ALIGNED_OPERATOR_NEW //确保new操作符对齐操作
} EIGEN_ALIGN16; //强制SSE对齐
EIGEN_MAKE_ALIGNED_OPERATOR_NEW 是Eigen库的一个涉及字节对齐的问题,这个是对于固定维数的矩阵(雷达数据)会出现的错误,动态维数的矩阵不存在这样的问题。
下面是关于将PCL类型的点云数据转换为我们自定义的数据类型的代码:
SLRPointXYZIRL point; //Plane_ground_filter::PointXYZIRL point
for (size_t i = 0; i < laserCloudIn.points.size(); i++)
{point.x = laserCloudIn.points[i].x;point.y = laserCloudIn.points[i].y;point.z = laserCloudIn.points[i].z;point.intensity = laserCloudIn.points[i].intensity; point.ring = laserCloudIn.points[i].ring; point.label = 0u; // 0 means unclusterg_all_pc->points.push_back(point);
}
这篇关于velodyne的数据结构以及如何自定义一个点云库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!