当前位置: 首页 > article >正文

A-LOAM工程笔记(三):雷达里程计(lidar odometry)高频粗估计

1.前言

雷达里程计部分实现点到线,点到面匹配,在雷达坐标系下,通过点到线及点到面距离,利用LM得到雷达位姿高频估计,输出10hz。主要包含点云运动补偿,点云匹配,线面误差项优化求解位姿三部分。

2.运动补偿

由于激光lidar在采集数据的时候是运动的,导致采集到的数据并不是在统一坐标系下的及在一个 sweep 期间,不同时刻 Lidar 坐标系不一样。所以需要对激光lidar进行补偿,将一帧数据转换到统一的lidar坐标系下的。及根据插值将Pk映射到k时刻sweep起始坐标系下(点云去掉运动漂移),一般来说是转换到这一帧的起始时刻,运动补偿公式:

P_{start} = T_{start2current} * P_{current}

    

LOAM假设一帧内是匀速运动,基于上一帧的运动差值为这一帧运动作补偿。通过时间dt的线性插值计算补偿位姿量。以代码为例:

void TransformToStart(PointType const *const pi, PointType *const po)
{
    //interpolation ratio
    double s;
    if (DISTORTION)
        s = (pi->intensity - int(pi->intensity)) / SCAN_PERIOD;
    else
        s = 1.0;
    //s = 1;
    Eigen::Quaterniond q_point_last = Eigen::Quaterniond::Identity().slerp(s, q_last_curr);
    Eigen::Vector3d t_point_last = s * t_last_curr;
    Eigen::Vector3d point(pi->x, pi->y, pi->z);
    Eigen::Vector3d un_point = q_point_last * point + t_point_last;
 
    po->x = un_point.x();
    po->y = un_point.y();
    po->z = un_point.z();
    po->intensity = pi->intensity;
}

s表示比例,其中pi->intensity表示点云的强度值,在前面的点云数据预处理中,强度值的实数部分存的是Scan_id,虚数部分存的是该点相对于起始时刻的漂移。这里算出的s就表示该点的时间相当于整个帧时间的比例。DISTORITI


http://www.kler.cn/a/582632.html

相关文章:

  • 挤压车间降温设备
  • CTFshow 【WEB入门】信息搜集 【VIP限免】 web1-web17
  • 目标思维——数据分析源自问题,高于问题
  • ListView_GetIconBufferX函数和ListView_GetIconBufferY函数和RECT结构的关系
  • C语言实现队列数据结构:思路与代码详解
  • ARM Cortex-M 内存映射详解:如何基于寄存器直接读写 寄存器映射方式编码程序 直接操作硬件寄存器来控制 MCU
  • JAVA(6)-运算符
  • [密码抓取] Windows 密码抓取 — 浏览器、数据库等其它密码的抓取
  • 【C++】【数据结构】链表与线性表
  • LeetCode 513. 找树左下角的值 java题解
  • Rabbitmq运维
  • 设计模式Python版 模板方法模式
  • 21 | 全面测试项目功能
  • python数据分析--pandas读取数据--按行和列提取数据
  • 【贪心算法4】
  • 人工智能在医疗领域的应用:技术革新与未来展望
  • 【解决报错】:detected dubious ownership in repository at ‘D:/idea_code/xxx‘问题
  • 【2步解决】phpstudy开机自启(自动启动phpstudy、mysql、nignx或apache、自动打开网址)
  • 【蓝桥杯python研究生组备赛】003 贪心
  • Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示)