很多Jetson用户在自动化解决方案中选择激光雷达进行定位和感知。激光雷达使用3D点云描绘周围的空间环境。点云可以高精度长距离采样物体表面信息以便于上层应用的障碍感知、绘图、定位和路径规划算法。
使用CUDA-PCL处理点云
CUDA PCL 1.0是基于CUDA开发的点云处理库,在本文中,我们将介绍目前所有的三个库:ICP,segmentation 和 filter。请参考相应的章节获取更多信息。
Jetson | Xavier AGX 8GB |
OS | Jetpack 4.4.1 |
CUDA | 10.2 |
PCL | 1.8 |
Eigen | 3 |
Table 1. 测试平台
CUDA-ICP
迭代最近点算法(Iterative Closest Point,ICP) 用于计算两帧点云数据之间的坐标变换矩阵,从而能够使不同的坐标下的点云数据合并到同一个坐标系统中。ICP算法 通过计算两帧点云的距离误差从而修正变换矩阵(平移和旋转)以便最小化距离误差,通常两帧点云之间的距离误差是通过匹配点的距离计算得来。ICP算法应用广泛,能够获得很高的匹配结果且有很高的鲁棒性,同时会耗费大量的计算资源。为了改进ICP算法在Jetson上的性能,我们推荐使用基于CUDA加速的CUDA-ICP。
使用CUDA-ICP
以下是CUDA ICP的使用实例
我们仅仅需要初始化相关的类对象,并调用接口函数即可。
cudaICP icpTest(nPCountM, nQCountM, stream);
icpTest.icp(cloud_source, nPCount,
float *cloud_target, int nQCount,
int Maxiterate, double threshold,
Eigen::Matrix4f &transformation_matrix, stream);
CUDA-ICP 计算的输出是 transformation_matrix,代表的含义如下:
源点云(P)* transformation = 目标坐标系的点云(Q)
因为激光类型的输出点云