LOAM详解(二)激光里程计

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

在这里插入图片描述

二、用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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值