⑴ 3D激光SLAM:LOAM 论文--算法详细解读
LOAM(Lidar Odometry and Mapping)论文算法详细解读
一、LOAM简介
LOAM实现了一种实时激光里程计并建图的算法,使用的硬件是一个在三维空间中运动的两轴单线激光雷达。这种雷达在水平方向和垂直方向不断变换形成点云,每个点的时间戳不同。与现在主流的velodyne 16线或32线雷达相比(它们在垂直方向上有16或32个点,具有相同的时间戳,在水平方向时间戳递增),LOAM算法同样可以用于16线的lidar。
实现功能的难点:
- 点云不是相同时间获得的,运动畸变会导致点云位置错误,进而造成匹配和里程计信息估计的错误。
- 一致性较好的3D地图通常通过离线方式获得,还需通过回环检测来消除累计误差。
LOAM的优点:
- 实现了低的漂移,计算复杂度低,实时性好。
- 不需要高精度的lidar和惯导。
算法核心:
- 将SLAM问题拆分,通过两个算法实现:一个是执行高频率但低精度的运动估计(定位),另一个算法在比定位低一个数量级的频率执行匹配和注册点云信息(建图和校正里程计)。
- 这两个算法都需要提取特征点(角点和面点),然后进行配准。前端算法(里程计算法)中特征点提取使用快速计算方法,后端算法(建图算法)中相互关联的特征点通过特征值和特征向量获得。
二、算法部分
激光雷达的每个帧分别输入两个算法:前端里程计计算相邻两帧的运动,用于校正畸变,运行频率大致为10Hz;前端的输出之后会被后端处理,运动补偿后的点云和地图进行配准,运行频率1Hz。最终,最后的位姿是两个算法结合的结果,以10Hz里程计的输出为准。
1. 激光雷达里程计
A. 特征点提取
- 选择的特征点是角点和面点。
- 通过计算曲率来判断一个点是否为特征点,把一帧里面的每个点的曲率计算出来,然后根据曲率进行排序,选择最大的几个曲率点作为边缘点,最小的几个曲率点作为平面点。
- 为了使提取的特征点均匀,把一帧雷达分成4等分,每个部分提取出2个边缘点和4个面点。
- 曲率值要满足阈值范围才会被判断为是否是特征点,并且选择的数量不允许超过设定的值。
- 在提取特征点时,要避免点过于集中,并排除一些不可靠的点,如平面上的点和激光的射线平行、被遮挡的点等。
B. 找特征点的匹配对
- 假设^Pk和Pk+1都是可用的,然后开始找出特征点的匹配对。
- 对于Pk+1,找出边缘点和面点,用上一节曲率的方法,用Ek+1和Hk+1来代表边缘点集合和面点集合。
- 在第k+1帧开始的时候,Pk+1还是空的,点在之后逐渐接收。lidar里程计在k+1帧开始接收的时候,递归地估计6自由度的运动。
- 在每一次迭代,用当前估计的变换,将Ek+1和Hk+1投影到tk+1时刻的坐标系中,用^Ek+1和^Hk+1表示投影后的点集。
- 对于在^Ek+1和^Hk+1中的每个点,需要找到在^Pk中的距离最近的点,通过3D KD-tree的方法。
- 边缘点由两个点表示,找到^Pk中与之对应的两个点(确保这三个点不在一条直线上),并确认这两个点都是边缘点。
- 面点由一个平面表示,找到^Pk中与之对应的三个点(确保这三个点不在一条直线上),并确认这三个点都是面点。
- 计算边缘点到对应直线的距离和面点到对应平面的距离,通过非线性优化的方式,来让这两个距离最小,从而估计出位姿变换。
C. 运动估计
- 在每帧的过程中,lidar的运动视为匀速运动(因为时间很短),这使得可以通过线性插值的方式赋值一帧里面每个点的位姿变换。
- 通过LM(Levenberg-Marquardt)方法求出非线性优化的结果。
2. lidar建图
- 建图算法运行的频率要比里程计低,每一帧执行一次。
- 在k+1帧的最后,激光里程计得到了经过畸变校正的点云^Pk+1,并且同时得到了一个位姿变换Tk+1。
- 建图算法就是将^Pk+1配准到世界坐标系中。
- Qk是已存在地图中的点云,是前k帧的累积。Tw是地图中最后一帧k的位姿在tk+1时刻。
- 用来自激光里程计的输出,建图算法将^Pk+1投影到世界坐标系中,形成^Qk+1。
- 然后就是配准^Qk+1和Qk,这个过程会优化lidar的位姿Twk+1。
- 特征提取的方法和之前一样,但是要多10倍的个数。
- 在进行特征点配对上面有些许的不同,主要是因为地图的点很多,为了提高效率,地图的点会按10m的立方体划分,在立方体中有点和^Qk+1相交立方体的点才会存入3D kd-tree中。
- 找出Qk中特征点周围一定范围的点,对于边缘点,就把范围内的边缘点作为一个点集,对于平面点,就把平面点作为一个点集。
- 然后求这个点集的协方差矩阵,并计算特征值和特征向量。
- 边缘线和平面的位置就认为是在几何中心。
- 然后就是求点到直线的距离和点到平面的距离,方法和前面里程计的类似。
- 通过LM非线性优化出位姿。
- 最后将整个地图进行一个体素滤波。
三、测试结果
(由于图片无法直接在此处展示,但根据提供的markdown格式,可以想象在相关段落前后会插入展示LOAM算法在KITTI数据集上测试结果的图片,这些图片可能包括算法在不同场景下的点云图、轨迹图等,用以证明LOAM算法的高精度和实时性。)
综上所述,LOAM算法通过拆分SLAM问题为前端里程计和后端建图两个算法,实现了高精度、实时性的激光里程计和建图功能。该算法在特征点提取、特征点匹配、运动估计和建图等方面都有详细的设计和实现,并通过实验验证了其有效性。
⑵ 3d算法必中 计算公式
在3D图形和算法领域,不存在一个所谓的“必中计算公式”。
3D算法的成功与否取决于多种因素: 算法的准确性:算法的数学基础和逻辑是否正确。 实现方式:算法在计算机中的具体实现和优化程度。 输入数据的质量:提供给算法的3D模型、光照条件、材质属性等数据的准确性和完整性。 计算资源的可用性:硬件性能、内存大小、处理速度等计算资源的限制。
3D算法的应用场景和需求多样化: 3D渲染:涉及光线追踪、光栅化、纹理映射等技术,每种技术都有其特定的计算公式和方法。 3D物理模拟:模拟重力、碰撞、摩擦力等物理现象,基于物理学原理和数学公式构建。
提高3D算法效果和性能的策略: 充分测试和验证:确保算法在各种情况下都能产生可靠的结果。 优化实现方式:提高算法的运行效率和响应速度。 利用并行计算和硬件加速:充分利用计算资源并提高算法的性能。
综上所述,成功应用3D算法需要深入理解相关的数学和计算机图形学原理,并结合具体的应用场景和需求进行定制和优化。