LEGO-LOAM(LOAM)部分公式推导---未完待续

2023-05-16

一、featureAssociation相关推导

1)帧间匹配雅可比矩阵推导

首先明确LEGO-LOAM中,运动坐标系(符合右手系)的设置为:
在这里插入图片描述
因此对于平面运动来说,影响最大的三个分量为 t x , t z , r y t_x,t_z,r_y tx,tz,ry,因此仅考虑这三个分量对雅可比矩阵,也就是对非线性优化问题的贡献。首先让我们考虑整个非线性优化过程,首先将本帧点 p p p转换至上一帧坐标系中,得到 p ′ p' p,即

p ′ = T p p' = Tp p=Tp

通过计算 p ′ p' p点和其近邻线(以corner为例,存在于上一帧点云系中)的点线间距离,得到残差 f f f,即

f = d i s t ( p ′ , l i n e ) = d i s t ( T p , l i n e ) f = dist(p', line) = dist(Tp, line) f=dist(p,line)=dist(Tp,line)

于是雅可比矩阵可以写为

J = ∂ f ∂ T = ∂ ( d i s t ( T p , l i n e ) ) ∂ T J =\frac{{\partial f}}{{\partial T}} = \frac{{\partial (dist(Tp,line))}}{{\partial T}} J=Tf=T(dist(Tp,line))

由于我们只关心三个分量,且每一帧包含多个点线配对,可以计算许多个残差,则雅可比矩阵写开以后是这个类型: J = J= J=
在这里插入图片描述 f f f对这三个位姿量的求导,使用链式法则来计算,首先将残差使用这个位姿量转换过去的点 p ′ = ( x , y , z ) p'=(x,y,z) p=(x,y,z)进行求导(将本帧点转换至上一帧坐标系中的点),然后再使用被转换过去的点 p ′ = ( x , y , z ) p'=(x,y,z) p=(x,y,z)位姿量求导。也就是:

∂ f k ∂ t x = ∂ f k ∂ x ∂ x ∂ t x + ∂ f k ∂ y ∂ y ∂ t x + ∂ f k ∂ z ∂ z ∂ t x \frac{{\partial {f_k}}}{{\partial {t_x}}} = \frac{{\partial {f_k}}}{{\partial x}}\frac{{\partial x}}{{\partial {t_x}}} + \frac{{\partial {f_k}}}{{\partial y}}\frac{{\partial y}}{{\partial {t_x}}} + \frac{{\partial {f_k}}}{{\partial z}}\frac{{\partial z}}{{\partial {t_x}}} txfk=xfktxx+yfktxy+zfktxz

每一项链式法则的求导分为两部分,在程序中分别在findCorrespondingCornerFeatures函数和calculateTransformationCorner函数中完成。之后我们再细说,在这里先推导 ∂ f k ∂ x \frac{{\partial {f_k}}}{{\partial x}} xfk ∂ x ∂ t x \frac{{\partial x}}{{\partial {t_x}}} txx的具体形式,首先推导前半部分 ∂ f k ∂ x \frac{{\partial {f_k}}}{{\partial x}} xfk,根据公式(这里的公式复制自知乎某回答),点线距离为:
在这里插入图片描述

在这里插入图片描述
其中,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
令分母为:
在这里插入图片描述
接下来求 ∂ f k ∂ x \frac{{\partial {f_k}}}{{\partial x}} xfk,也就是这里的 ∂ d ε ∂ x \frac{{\partial {d_\varepsilon }}}{{\partial x}} xdε x x x即为公式里面的 x 0 x_0 x0

∂ d ε ∂ x 0 = 1 2 ( m 11 2 + m 22 2 + m 33 2 ) ( 2 m 11 ∂ m 11 ∂ x 0 + 2 m 22 ∂ m 22 ∂ x 0 ) l 12 = m 11 ∂ m 11 ∂ x 0 + m 22 ∂ m 22 ∂ x 0 l 12 m 11 2 + m 22 2 + m 33 2 \frac{{\partial {d_\varepsilon }}}{{\partial {x_0}}}{\rm{ = }}\frac{{\frac{1}{2}(\sqrt {m_{11}^2 + m_{22}^2 + m_{33}^2} )(2{m_{11}}\frac{{\partial {m_{11}}}}{{\partial {x_0}}} + 2{m_{22}}\frac{{\partial {m_{22}}}}{{\partial {x_0}}})}}{{{l_{12}}}}{\rm{ = }}\frac{{{m_{11}}\frac{{\partial {m_{11}}}}{{\partial {x_0}}} + {m_{22}}\frac{{\partial {m_{22}}}}{{\partial {x_0}}}}}{{{l_{12}}\sqrt {m_{11}^2 + m_{22}^2 + m_{33}^2} }} x0dε=l1221(m112+m222+m332 )(2m11x0m11+2m22x0m22)=l12m112+m222+m332 m11x0m11+m22x0m22

对另两个位姿分量的就省略了,是同理的,这一块对应源码中的:

                tripod1 = laserCloudCornerLast->points[pointSearchCornerInd1[i]];
                tripod2 = laserCloudCornerLast->points[pointSearchCornerInd2[i]];

                float x0 = pointSel.x;
                float y0 = pointSel.y;
                float z0 = pointSel.z;
                float x1 = tripod1.x;
                float y1 = tripod1.y;
                float z1 = tripod1.z;
                float x2 = tripod2.x;
                float y2 = tripod2.y;
                float z2 = tripod2.z;

                float m11 = ((x0 - x1)*(y0 - y2) - (x0 - x2)*(y0 - y1));
                float m22 = ((x0 - x1)*(z0 - z2) - (x0 - x2)*(z0 - z1));
                float m33 = ((y0 - y1)*(z0 - z2) - (y0 - y2)*(z0 - z1));

                float a012 = sqrt(m11 * m11  + m22 * m22 + m33 * m33);

                float l12 = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2) + (z1 - z2)*(z1 - z2));

                float la =  ((y1 - y2)*m11 + (z1 - z2)*m22) / a012 / l12;

                float lb = -((x1 - x2)*m11 - (z1 - z2)*m33) / a012 / l12;

                float lc = -((x1 - x2)*m22 + (y1 - y2)*m33) / a012 / l12;

                float ld2 = a012 / l12;

接下来求链式法则的后面那部分,也就是 ∂ x ∂ t x \frac{{\partial x}}{{\partial {t_x}}} txx x x x指代的是经过变换矩阵变换,将本帧点转换至上一帧坐标系中的点的坐标。因此,首先需要明确旋转变换关系。LEGO-LOAM(LOAM)中的帧间坐标变换关系如下:
在这里插入图片描述

其中, p ′ = ( x , y , z ) p'=(x,y,z) p=(x,y,z)表示被转换到上一帧坐标系中的点, p = ( x c , y c , z c ) p=(x_c,y_c,z_c) p=(xc,yc,zc)表示本帧这个点。 R R R t x , t y , t z t_x,t_y,t_z tx,ty,tz分别代表旋转和平移变换关系,角度为本帧坐标系转了多少欧拉角能转到上一帧坐标系,象征着所有欧拉角加符号带入公式才能获得本帧坐标系点转换到上一帧坐标系中。至于LOAM为什么这样设定不清楚(有点拧巴)。

在这里插入图片描述

要求 ∂ x ∂ t x \frac{{\partial x}}{{\partial {t_x}}} txx,必须要明确R是什么形式。根据wiki上给出的公式(上图右边红色框),欧拉角(-rx,-ry,-rz)转换为旋转矩阵的公式为:

这里之所以加负号,与欧拉角设定相关?

因此易求 ∂ x ∂ t x \frac{{\partial x}}{{\partial {t_x}}} txx,仅看第一行第一列乘出来的东西就行,即:
在这里插入图片描述
化简可以得到

2)高频率里程计位姿累积函数:integrateTransformation

    void integrateTransformation(){
        float rx, ry, rz, tx, ty, tz;
        AccumulateRotation(transformSum[0], transformSum[1], transformSum[2], 
                           -transformCur[0], -transformCur[1], -transformCur[2], rx, ry, rz);

        float x1 = cos(rz) * (transformCur[3] - imuShiftFromStartX) 
                 - sin(rz) * (transformCur[4] - imuShiftFromStartY);
        float y1 = sin(rz) * (transformCur[3] - imuShiftFromStartX) 
                 + cos(rz) * (transformCur[4] - imuShiftFromStartY);
        float z1 = transformCur[5] - imuShiftFromStartZ;

        float x2 = x1;
        float y2 = cos(rx) * y1 - sin(rx) * z1;
        float z2 = sin(rx) * y1 + cos(rx) * z1;

        tx = transformSum[3] - (cos(ry) * x2 + sin(ry) * z2);
        ty = transformSum[4] - y2;
        tz = transformSum[5] - (-sin(ry) * x2 + cos(ry) * z2);

        PluginIMURotation(rx, ry, rz, imuPitchStart, imuYawStart, imuRollStart, 
                          imuPitchLast, imuYawLast, imuRollLast, rx, ry, rz);

        transformSum[0] = rx;
        transformSum[1] = ry;
        transformSum[2] = rz;
        transformSum[3] = tx;
        transformSum[4] = ty;
        transformSum[5] = tz;
    }

(1)AccumulateRotation函数:

输入:

  • 上一帧粗配准的激光里程计的累积位姿(全局),仅取旋转部分欧拉角:transformSum[0], transformSum[1], transformSum[2]
  • 上一帧本帧间的位姿变化量(增量),仅取旋转部分欧拉角: -transformCur[0], -transformCur[1], -transformCur[2]。由于transformCur处于本帧坐标系,取负号表示从上一帧变换到本帧的欧拉角变化量。
  • 本帧粗配准的激光里程计的累积位姿,仅取旋转部分欧拉角,由以上两组量求得:rx, ry, rz

在这里插入图片描述

首先从位姿变换基础公式入手,根据wiki上给出的公式(上图画黄色框处),这里欧拉角(x,y,z)转换为旋转矩阵的公式为:
在这里插入图片描述
设上一帧全局位姿的旋转部分为 R 1 = ( x 1 , y 1 , z 1 ) R_1=(x_1, y_1, z_1) R1=(x1,y1,z1),本帧全局位姿的旋转部分为 R 2 = ( x 2 , y 2 , z 2 ) R_2=(x_2, y_2, z_2) R2=(x2,y2,z2),上一帧到本帧的旋转变化量 δ R = ( δ x , δ y , δ z ) \delta R=(\delta x, \delta y, \delta z) δR=(δx,δy,δz),于是根据姿态变换公式:

R 2 = R 1 ⋅ δ R R_2=R_1·\delta R R2=R1δR

根据上面欧拉角转旋转矩阵的通式,与待求欧拉角相关的 R 2 R_2 R2为:
在这里插入图片描述
观察到,第二行第三列直接与 x 2 x_2 x2相关,因此考虑先求 x 2 x_2 x2,即先求 R 2 ( 2 , 3 ) R_2^{(2,3)} R2(2,3),也就是 ( R 1 R_1 R1 δ R \delta R δR也按照上面通式转为旋转矩阵) R 1 R_1 R1的第二行乘以 δ R \delta R δR的第三列,即:
在这里插入图片描述

展开就能用来求 − s i n x 2 -sinx_2 sinx2,于是就有了AccumulateRotation函数内部的:

float srx = cos(lx)*cos(cx)*sin(ly)*sin(cz) - cos(cx)*cos(cz)*sin(lx) - cos(lx)*cos(ly)*sin(cx);
ox = -asin(srx);

接下来求 y 2 y_2 y2,可以看到:

a r c t a n ( R 2 ( 1 , 3 ) / R 2 ( 2 , 3 ) ) = y 2 arctan(R_2^{(1,3)} / R_2^{(2,3)})=y_2 arctan(R2(1,3)/R2(2,3))=y2,同理,按照上述几行几列的思路写出公式,可得函数内部的:

 float srycrx = sin(lx)*(cos(cy)*sin(cz) - cos(cz)*sin(cx)*sin(cy)) + cos(lx)*sin(ly)*(cos(cy)*cos(cz) 
              + sin(cx)*sin(cy)*sin(cz)) + cos(lx)*cos(ly)*cos(cx)*sin(cy);
 float crycrx = cos(lx)*cos(ly)*cos(cx)*cos(cy) - cos(lx)*sin(ly)*(cos(cz)*sin(cy) 
              - cos(cy)*sin(cx)*sin(cz)) - sin(lx)*(sin(cy)*sin(cz) + cos(cy)*cos(cz)*sin(cx));
 oy = atan2(srycrx / cos(ox), crycrx / cos(ox));

接下来求 z 2 z_2 z2,可以看到:
a r c t a n ( R 2 ( 2 , 1 ) / R 2 ( 2 , 2 ) ) = z 2 arctan(R_2^{(2,1)} / R_2^{(2,2)})=z_2 arctan(R2(2,1)/R2(2,2))=z2,同理,按照上述几行几列的思路写出公式,可得函数内部的:

float srzcrx = sin(cx)*(cos(lz)*sin(ly) - cos(ly)*sin(lx)*sin(lz)) + cos(cx)*sin(cz)*(cos(ly)*cos(lz) 
             + sin(lx)*sin(ly)*sin(lz)) + cos(lx)*cos(cx)*cos(cz)*sin(lz);
float crzcrx = cos(lx)*cos(lz)*cos(cx)*cos(cz) - cos(cx)*sin(cz)*(cos(ly)*sin(lz) 
             - cos(lz)*sin(lx)*sin(ly)) - sin(cx)*(sin(ly)*sin(lz) + cos(ly)*cos(lz)*sin(lx));
oz = atan2(srzcrx / cos(ox), crzcrx / cos(ox));

接下来观察旋转部分,这里我们忽略IMU的使用,即imuShiftFromStartZ = imuShiftFromStartY = 0 (LEGO-LOAM的IMU听说也很鸡肋)。就有如下代码:

        float x1 = cos(rz) * (transformCur[3]) 
                 - sin(rz) * (transformCur[4]);
        float y1 = sin(rz) * (transformCur[3]) 
                 + cos(rz) * (transformCur[4]);
        float z1 = transformCur[5];

        float x2 = x1;
        float y2 = cos(rx) * y1 - sin(rx) * z1;
        float z2 = sin(rx) * y1 + cos(rx) * z1;

        tx = transformSum[3] - (cos(ry) * x2 + sin(ry) * z2);
        ty = transformSum[4] - y2;
        tz = transformSum[5] - (-sin(ry) * x2 + cos(ry) * z2);

可以这么理解,先使用rx,ry,rz相关的转换矩阵将参考系与世界坐标系同轴(平行),然后transformSum是位于世界坐标系的,因此可以直接做加法。这个原因主要是因为transformCur是存在于本帧坐标系的,推导公式也能推导出来上面式子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LEGO-LOAM(LOAM)部分公式推导---未完待续 的相关文章

  • iOS面试题总结-未完待续

    iOS面试总结 1 网络 HTTP协议 HyperText Transfer Protocol 的请求和响应 请求 请求头 请求行 请求体 请求行 指定请求方法 请求路径 协议版本等信息请求头 描述客户端环境 例如 host要请求的主机地址
  • 论文阅读 | LOAM:实时Lidar里程计和建图

    Zhang J Singh S LOAM Lidar odometry and mapping in real time C Robotics Science and Systems 2014 2 9 1 9 64 inproceeding
  • JS的继承(未完待续。。。)

    1 原型链继承 function Animal name this name 61 name 39 Animal 39 this food 61 39 菜 39 this skill 61 39 吃饭 39 39 睡觉 39 39 打豆豆
  • LOAM livox论文学习笔记

    Loam livox A fast robust high precision LiDAR odometry and mapping package for LiDARs of small FoV 参考 xff1a 多激光雷达的协同定位建图
  • 【leetcode】解题日记(未完待续)

    开坑 xff0c 有生之年系列 xff0c 希望有一天能解出 l e e t c o d
  • lego-loam加入imu数据建图,使用自己的数据集建图

    配置lego loam教程 https blog csdn net qq 35102059 article details 122671432 spm 61 1001 2014 3001 5501 激光雷达与imu的外参标定教程 https
  • APM-3.5.2-EKF2笔记(未完待续)

    20180704 xff1a 一 EKF2 InitialiseFilter 全过程 1 记录开始时间 xff0c 预期步长时间 frameTimeUsec 61 2500 xff0c 每次融合读取IMU次数 framesPerPredic
  • ucos源码阅读3——信号量,互斥信号量(未完待续)

    ucos源码阅读3 信号量 xff0c 互斥信号量 事件控制块ECBInitEventList xff08 xff09 EventWaitListInit xff08 xff09 EventTaskRdy xff08 xff09 Event
  • SLAM会议笔记(三)V-LOAM

    Visual lidar Odometry and Mapping Low drift Robust and Fast Abstract 提出了一种新的使用激光雷达里程计和视觉里程计的框架 xff0c 提升了表现 xff0c 特别是在剧烈运
  • 运行LeGO-LOAM

    参考 链接 xff1a https blog csdn net weixin 39754100 article details 112186264 https blog csdn net NEU Ocean article details
  • A-LOAM源码阅读

    LOAM 论文地址 xff1a https www ri cmu edu pub files 2014 7 Ji LidarMapping RSS2014 v8 pdf A LOAM地址 xff1a https github com HKU
  • velodyne运行Loam_velodyne过程记录

    刚拿到手的3D激光雷达 xff0c 运行一下试试 xff08 1 xff09 loam velodyne环境配置 cd catkin ws src git clone https github com laboshinl loam velo
  • A-LOAM学习

    A LOAM学习 一 复现1 1 Ubuntu 和 ROS1 2 Ceres Solver1 3 PCL 二 下载A LOAM三 下数据集 一 复现 1 1 Ubuntu 和 ROS A LOAM 1 2 Ceres Solver span
  • A-LOAM学习

    A LOAM学习 一 kittiHelper cpp二 scanRegistration cpp三 laserOdometry cpp四 laserMapping cpp 一 kittiHelper cpp 本代码旨在实现 将kitti数据
  • LOAM进行点云地图创建

    3D激光点云数据处理入门 xff08 一 xff09 使用LOAM进行点云地图创建 LOAM 原理简述topic关系算法分析算法伪代码 LOAM 建图实践创建你的 ROS Workspace下载LOAM Package下载数据包运行 LOA
  • SC-Lego-LOAM解析(中)

    上回说到经过连续帧间匹配 xff0c 激光odo给出来一个位姿估计 xff0c 但是是存在不断的误差的积累的 xff0c 需要与绝对的参考 xff08 地图 xff09 进行匹配 xff0c 以及进行回环检测和全局位姿优化 这也是正是map
  • SC-Lego-LOAM解析(下)

    回环检测是一个相对独立的模块 xff0c 这里再开一篇专门说明 前面两篇已经说过 xff0c 先对点云做了预处理 xff0c 然后进行连续帧之间的匹配即激光odom xff0c 然后是scan to map匹配 xff0c 并保存关键帧的位
  • 保存并查看Lego-Loam的三维点云地图

    Loam的安装及运行方法可以参考 https blog csdn net qq 36396941 article details 82973772 本文提供ROS wiki http wiki ros org loam velodyne上无
  • 使用C/C++编程控制LEGO EV3

    环境搭建 1 安装Eclipse 选择Eclipse IDE for C C Developers 网址 http www eclipse org downloads 2 安装c4ev3 网址 https c4ev3 github io 该
  • 利用python语言编程控制LEGO EV3

    1 环境搭建 安装WinSCP 网址 https sourceforge net projects winscp 下载一个自己喜欢的python IDE 例如pycharm 将EV3的系统换为ev3dev 参考网址 https www ev

随机推荐

  • 树莓派+ L298N 控制二相四线步进电机

    树莓派 43 L298N 控制二相四线步进电机 1 步进电机 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机 在非超载的情况下 xff0c 电机的转速 停止的位置只取决于脉冲信号的频率和脉冲数 xff0c 而不受负载变化的影响
  • VTK移动立方体法处理CT图像建立三维模型

    span class token comment 移动立方体 span span class token macro property span class token directive keyword include span span
  • 使用tcp工具调试socket服务端通信

    背景介绍 xff1a 客户端是用tcp连接调试 xff0c 工具链接 https pan baidu com s 1kfjv1jdS8KJgb7YVSu9Wtw 提取码 z34a 服务端是Java代码写的逻辑 xff0c 用byte 流接收
  • Fast Planner 轨迹规划

    文章目录 0 概览1 关键问题2 相关工作3 F a s t P
  • C++继承和多态学习心得

    继承 定义 xff1a 在已有类的基础上创建新类的过程 一个 B 类继承A类 xff0c 或称从类 A 派生类 B 类 A 称为基类 xff08 父类 xff09 xff0c 类 B 称为派生类 xff08 子类 xff09 语法形式 xf
  • Python学习笔记(六):isalpha()函数的用法

    isalpha 方法 xff1a 判断字符串是否只由字母组成 xff0c 如果字符串中所有字符都是字母则返回True xff0c 否则返回False str1 61 34 python 34 print str1 isalpha True
  • ovn-controller源码分析

    ovn controller是运行在chassis hypervisor上的后台进程 xff0c 向上通过OVSDB协议连接到OVN sourthbound数据库 xff0c 向下通过OVSDB协议连接到ovs数据库 xff0c 并通过op
  • ROS学习笔记(十一) rospy介绍(一)

    rospy介绍 xff08 一 xff09 rospy是Python版本的ROS客户端库 xff0c 提供了Python程序需要的接口 xff08 rospy就是一个Python模块 xff09 xff0c 位于 opt ros kinee
  • ROS学习笔记(十三) TF介绍(一)

    TF介绍 xff08 一 xff09 TF xff1a 机器人不停部位之间的坐标转换 坐标转换包括位置和姿态两方面 xff0c ROS中的tf是一个让用户随时记录多个坐标系的软件包 tf保持缓存的树形结构中的坐标系之间的关系 xff0c 并
  • SLAM基础(三) --图优化

    滤波器的缺点 xff1a EKF SLAM不仅要维护自身的状态 xff0c 还需要维护地图 xff08 特征 xff09 于是必须在内存上做出牺牲 xff0c 比如500个特征 xff0c 每个特征在二维环境中是两个点 xff08 x轴 y
  • 前端JS十种继承方式-图解通俗易懂

    1 学习JS继承一定要拿指针的概念去审视 xff0c 不能死记 2 首先要明白 xff1a 原型 xff08 对象 xff09 xff0c let a 61 new A 会发生构成原型链图 xff0c 类对象的prototype指向他的原型
  • ros发布和订阅图像的压缩——高效图传(适用带宽不足问题)

    ros话题机制默认通过TCP进行传输 因此特别容易堵塞 必须要有compressed的图像 xff0c img raw传输速度非常慢 参考 xff1a https blog csdn net qq 30460905 article deta
  • BLAM源码解析(三)—— 定时器总揽大局

    上一节介绍了激光数据的回调 xff0c 最终被依次推入到容器之中 xff0c 存储在pcl pcld queue 那么激光数据的使用是怎么实现的 xff0c 就是这一节要介绍的内容 回想第一节我们介绍的定时器estimate update
  • BLAM源码解析(四)—— 基于ICP的位姿更新

    第三节我们介绍了定时器的定时回调 xff0c 实现对激光数据的批量循环处理 xff0c 在每一个激光数据的循环当中 xff0c 除了一开始filter 的点云过滤 xff0c 最重要的其实是下面的基于ICP的位姿更新 xff0c 即 if
  • BLAM源码解析(五)—— 回环检测

    上一节介绍了BLAM的帧间匹配和帧图匹配 xff0c 代码简洁明了 本节介绍BLAM的回环检测模块 具体代码块如下 xff1a Check for new loop closures bool new keyframe if HandleL
  • PCL安装报错error: ‘shared_ptr’ does not name a type

    将所有报错的位置的 shared ptr 均更换为 boost shared ptr
  • git clone 太慢了的新方法

    将 git clone https github com BIT MJY label objects 修改为 git clone https github com cnpmjs org BIT MJY label objects 参考 xf
  • ovn隧道类型

    本文简单介绍下ovn支持的隧道类型 xff0c 具体可参考ovn architecture的Tunnel Encapsulations部分 报文在跨节点转发时 xff0c 会被封装在隧道内 xff0c 同时需要携带足够的信息 xff0c 到
  • VNC远程桌面使用方法

    参考 xff1a https blog csdn net weixin 41803874 article details 81233789 一共两台电脑 xff0c 分别为服务端和客户端 xff0c 为与场景联系方便 xff0c 我们将需要
  • LEGO-LOAM(LOAM)部分公式推导---未完待续

    一 featureAssociation相关推导 1 xff09 帧间匹配雅可比矩阵推导 首先明确LEGO LOAM中 xff0c 运动坐标系 xff08 符合右手系 xff09 的设置为 xff1a 因此对于平面运动来说 xff0c 影响