LeGO-LOAM代码解析---基础知识

本文介绍了SLAM中的关键概念,如位姿(包含旋转和平移)、不同坐标系(如世界、雷达、相机和IMU坐标系)及其变换,以及旋转矩阵、欧拉角和四元数在描述物体旋转中的应用。重点讲解了位姿变换和坐标系转换的区别,以及在LeGO-LOAM中的实际应用。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


目录

前言

一、基础知识

1. 位姿

2. 坐标系

3. 位姿变换

4. 转换矩阵

4.1 旋转矩阵

4.2 欧拉角

4.3 四元数

前言

在学习LeGO-LOAM之前,先介绍一下基础知识:

一、基础知识

1. 位姿

        位姿是旋转和平移的统称。在三维世界中,物体的位姿变换既要考虑物体的位置的变化,也要考虑姿态的变化。

        举个例子,你在宿舍里,以宿舍某个点取个固定坐标系,例如东北天坐标系。现在你要去食堂吃饭,无容置疑在这个坐标系中你的位置肯定发生变化,此外还有一个“东东”也在不断发生变化,也就是你脸的朝向(PS:假设是刚体变换)。假设在起点,你脸的朝向正东面,左手在北面,右手在南面,在行进过程中,显然你自身的姿态肯定不断发生变化。

        我室友是个路痴,不认识去食堂的路。为了引导他去食堂,我只好每走5步,用手机拍个周围环境照片。一段时间后,我到了食堂,手机累计拍了大量的照片。根据拍照顺序发给他,然后他根据我拍的相邻的两张图片,逐个推断我是如何走的。这样一来,他就能根据我拍的照片,抵达我的位置(PS:来了之后,估计食堂也关门了)。

        现在,把人替换为机器人后,手机改为搭载在机器人上的传感器时,而且当传感器获取周围环境信息足够短时,理论上是应该能复原整个路线的,拼接这些环境信息,当然也可以还原地图。讲了这么多,其实这就是SLAM呀!

        SLAM就是搭载特定传感器的主体(机器人,车辆,无人机等),通过感知周围未知的环境信息,估计自身位姿变化并构建环境地图。自身位姿变化,其实就是根据相邻时刻传感器提供的信息,估算出自身的旋转和平移变化。

        好了,从位姿到SLAM,其实SLAM最核心的就是估计位姿变化。现在,你应该对位姿有足够的了解了。

2. 坐标系

        在SLAM中,描述一个位姿离不开坐标系。当然任何一个SLAM算法,都需要一个固定坐标系。大家统一为世界坐标系,此外还有相机坐标系,雷达坐标系,IMU坐标系等等。

        世界坐标系:在整个SLAM系统中,坐标系是固定不变的。一般我们认为起点为世界坐标系的原点,方向可以自行定义。在LOAM和LeGO-LOAM中,世界坐标系为左上前坐标系。请牢记!!!(左上前:以机器人前进方向为基准,左表示行进方向的左边,对应X轴正方向朝向;上(天)表示车辆上方,也就是天空,对应Y轴正方向朝向;前表示行进方向,也是就Z轴正方向朝向)

        雷达坐标系:一般是前左上坐标系。在LAOM和LeGO-LOAM,雷达坐标系是前左上坐标系。在SLAM算法中,

        相机坐标系:普遍是右下前坐标系。

        IMU坐标系:一般是前左上坐标系。

        GPS坐标系:一般是前左上坐标系。

有时候,大家也听到东北天坐标系,里程计坐标系等,

        东北天坐标系:右前上坐标系,根据“上北下南,左西右东”,东便是右,前便是北,天便是上。

        里程计坐标系:每个时刻的激光雷达/相机坐标系,它是不断变化的。

        在LeGO里存在大量的坐标系转换,主要原因就是世界坐标系和雷达坐标系,IMU坐标系的不统一。

3. 位姿变换

        位姿变换包括旋转和平移的变换,统称为变换矩阵。

        位姿变换最常见的包括固定坐标系变换和变化坐标系变换。牢记:固定坐标系变换用左乘,变化坐标系变换用右乘。下面进行解释:

        任何一个矩阵X可以写成E*X,其中E表示单位矩阵。左边E表示固定坐标系,右边表示向量X。若绕固定坐标系变换,固定坐标系不变,第一次变换T1,写成T1X;第二次变换T2在T1X的基础上,可以写成T2T1X;第三次变换T3,同理可以写成T3T2T1X。若绕变化坐标系变换,X不变,第一次变换可以写成E*T1*X;第二次变换在ET1基础上,可以简写成ET1T2X;同理第三次变换T3可以写成ET1T2T3X。

        可以观察到,两者的变换矩阵互为转置关系。所以,位姿变换时,首先判断是固定还是变化坐标系变换。若是变化坐标系变化,可以先当成固定左边系变换,再取转置,就变成固定坐标系变换的转换矩阵。

        举个实际例子,如下图:

        世界坐标系O为左上前坐标系,雷达坐标系A为前左上坐标系,雷达坐标系B为前左上坐标系。通过帧间配准,也就是第0帧到第1帧的点云配准,可以得到世界坐标系O到雷达坐标系A的位姿变换(旋转+平移),记为T_{O\_A};同理通过可以得到雷达坐标系A到雷达坐标系B的位姿变换为T_{B\_A}(以A为基准求B)。A点相对世界坐标系O的位姿为:P_{A}=T_{O\_A}*P_{M}。B点相对世界坐标系O的位姿为:P_{B}=T_{O\_B}*P_{M}

        那么B点相对A的位姿变换是多少呢?很多人可能认为:这不是相对固定坐标系变换吗?直接根据上述所讲,P_{B} = T_{B\_A}*P_{A},也就是P_{B}*P_{A}^{-1}

        再看另一种解法,雷达坐标系A到雷达坐标系B的位姿变换T_{B\_A},显然这是坐标系变换,即根据上述所讲,P_{B}=P_{A}*T_{B\_A},也就是B相对A的位姿变换为P_{A}^{-1}*P_{B}

        这两种结果完全不一致,什么原因导致呢?

        原因出在坐标系的不同,前者是确实是相对固定坐标系变换的,求得的结果是B点相对A点在世界坐标系中的位姿变换。后者是相对变化坐标系变换的,也就是相对A点所在的坐标系变换的。在帧间匹配时,同一点P在坐标A和坐标系B中的坐标变换,实际是变化坐标系变换,也就是右乘。        

        结论:k+1时刻相对k时刻的位姿变换矩阵为T_{k}^{-1}T_{k+1}

        注:这里是相对k时刻的雷达/相机坐标系而言,此外这里的位姿T_{k}^{-1}T_{k+1}分别是相对当前时刻的雷达坐标系而言的,并不是世界坐标系下的位姿。

4. 转换矩阵

    描述旋转的有:旋转矩阵、欧拉角、旋转向量以及四元数。通过齐次方程将位移和旋转结合,便构成转换矩阵。

4.1 旋转矩阵

        在三维空间中,旋转矩阵是一个3*3矩阵,转换矩阵且行列式为1。当描述一个物体的旋转时,可以用一个完整的矩阵表示,也可以拆分为基于XYZ轴的旋转。后者在LeGO-LOAM中很常见,方便与欧拉角进行转换。

        假设坐标系为前左上坐标,物体绕Z轴旋转得偏航角Yaw,绕旋转后的Y轴旋转得到Pitch角,绕旋转后的X轴旋转得到Roll。

        绕固定坐标系将物体按上述旋转可得变换后的位姿为:Y=R(Roll)R(Pitch)R(Yaw)X

        绕变化坐标系将物体按上述旋转可得变换后的位姿(单独是旋转或者位移均可)为:Y=R(Yaw)R(Pitch)R(Roll)X。

        显然,两者互为转置关系。

        现在知道了上述欧拉角Yaw,Pitch和Roll,如何得到旋转矩阵呢?

        在二维空间中,物体旋转如下:        

        在三维空间中,物体先绕Z轴旋转,可知z轴坐标不变,仅x,y坐标发生变化,则:

        R(Yaw)=\begin{bmatrix} cos(Yaw) & -sin(Yaw) & 0\\ sin(Yaw) & cos(Yaw) & 0 \\ 0 & 0 & 1\end{bmatrix} \quad

        绕旋转后的Y轴旋转Pitch角:

       R(Pitch)=\begin{bmatrix} cos(Pitch) & 0 & sin(Pitch)\\ 0 & 1 & 0\\ -sin(Pitch) & 0 & cos(Pitch) \end{bmatrix} \quad

         绕旋转后的X轴旋转Roll角:

R(Roll)=\begin{bmatrix} 1 & 0 & 0\\ 0 & cos(Roll) & -sin(Roll)\\ 0 & sin(Roll) & cos(Roll) \end{bmatrix} \quad

        类似常见的欧拉角RPY,实际是绕ZYX旋转。

4.2 欧拉角

        欧拉角提供了一种将旋转分解为3次绕不同轴的旋转。

4.3 四元数

        四元数具有一个实部和三个虚部。单位四元数可以表示任何旋转。三维空间中的点可以用一个虚四元数进行描述。

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萝卜青菜~

感谢您的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值