LOAM详解(二)激光里程计

该文介绍了里程计模块的关键技术,包括使用角度插值去除点云畸变,通过KD树实现最近点搜索,构建scan2scan的点到线和点到面距离,利用Ceres优化工具进行位姿估计,其中结合了信息矩阵和损失函数。文章还讨论了如何使用四元数和局部参数化进行更高效的优化。
摘要由CSDN通过智能技术生成

一、用之前获得的角度插值来对点云去畸变

在这里插入图片描述

二、用KD树搜索最近点

pcl::KdTreeFLANN对象radiusSearch和nearestKSearch接口的性能分析
【量化课堂】kd 树算法之详细篇

三、构建scan2scan点到线和点到面的距离

  1. 寻找线
    用KD树在上一帧中找到一个最近点 j j j,在 j j j所在的相邻线上再找一个距离最近的点 l l l j j j l l l则构成了线。
  2. 寻找面
    同理找到 j j j m m m l l l为同线上的最近点。
    在这里插入图片描述
  3. 计算点到线和面的距离
    目的是找到一个变换矩阵使得下图的两个残差函数最小
    在这里插入图片描述在这里插入图片描述

四、使用Ceres进行优化

就像14讲中第六章ceres例题,用100个常量去优化三个未知数,这里也用数个点到线点到面的约束去优化位姿。
改进方式:加入信息矩阵,根据点到线面的距离设置权重

  1. 设置loss_function
ceres::LossFunction *loss_function = new ceres::HuberLoss(0.1);
  1. 使用四元数进行优化
ceres::LocalParameterization *q_parameterization =
                        new ceres::EigenQuaternionParameterization();
                   
  1. 构建Problem存放参数块
ceres::Problem::Options problem_options;
                    
ceres::Problem problem(problem_options);
//将参数块存放入问题中
problem.AddParameterBlock(para_q, 4, q_parameterization);
problem.AddParameterBlock(para_t, 3);
  1. 构建cost_function并存放入残差块
    在这里插入图片描述
  2. 手动推导雅可比
    在这里插入图片描述
    在这里插入图片描述
    原理:在不同时刻,某一静态物体相对于运动的激光雷达的位姿是不同的,我们可以通过位姿的变化计算激光雷达的运动状态

五、里程计优化流程

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值