从零入门激光SLAM(十)——刚体位姿表达与优化

这篇具有很好参考价值的文章主要介绍了从零入门激光SLAM(十)——刚体位姿表达与优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激光SLAM,也方便想入门SLAM的同学和小白学习参考,相信看完会有一定的收获。如有不对的地方欢迎指出,欢迎各位大佬交流讨论,一起进步。博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。

SLAM是一个定位问题,定位问题就离不开刚体运动的表达和传感器和全局坐标系之间的相互转换,下面我们来一起学习一下。

目录

1. 刚体位姿的表达

1.1. 变换矩阵

1.2. 旋转向量和欧拉角

1.3. 四元数

1.4 相关代码

2. 刚体位姿优化

2.1 李群

2.2 李群与李代数 

 2.3 指数与对数映射

2.4 求导与扰动模型

2.5 Sophus李群李代数计算

1. 刚体位姿的表达

1.1. 变换矩阵

        变换矩阵由旋转矩阵和平移矩阵构成,用来表述刚体在三维空间的运动。在三维空间中的任何一种变换都可以用一个旋转矩阵和一个平移矩阵来表示。

从零入门激光SLAM(十)——刚体位姿表达与优化

 表达式如下所示,其中R为旋转矩阵,t为平移矩阵,T为变换矩阵。

从零入门激光SLAM(十)——刚体位姿表达与优化

在SLAM中,4x4变换矩阵通常用于表示相机或机器人在三维空间中的姿态变换。这种变换矩阵通常称为齐次变换矩阵(Homogeneous Transformation Matrix),它由以下组成部分构成:

旋转矩阵(Rotation Matrix):3x3的旋转矩阵表示物体的旋转姿态。它描述了相机或机器人在空间中的方向变化。

平移向量(Translation Vector):3维向量表示物体从一个位置平移到另一个位置的平移量。它描述了相机或机器人在空间中的位置变化。

齐次坐标(Homogeneous Coordinates):齐次坐标是为了方便表示平移和旋转而引入的一种扩展坐标系统。通过将3维坐标扩展为4维,可以用一个4维向量来表示平移和旋转。齐次坐标通常用于将平移和旋转合并到一个矩阵中。 

                                            R11 R12 R13 T1
                                            R21 R22 R23 T2
                                            R31 R32 R33 T3
                                              0      0      0    1

其中,R11到R33是3x3的旋转矩阵,描述了物体的旋转姿态;T1到T3是平移向量,描述了物体的位置变化。最后一行是[0 0 0 1],用于保持齐次坐标的一致性。

1.2. 旋转向量和欧拉角

从变换矩阵可以看到,变换矩阵用16个变量,表达了6自由度,比较麻烦,求解困难。所以想寻求一种更为简单的表达方式,便引入了欧拉角,欧拉角( Euler Angles)将旋转分解为三个方向上的转动例,按Z-Y-X顺序转动轴可以是定轴或动轴,顺序亦可不同常见的有 : yaw-pitch-roll,这样表达旋转参数量大大减少。

从零入门激光SLAM(十)——刚体位姿表达与优化

但欧拉角有一个严重的问题是万向锁问题:第一次随便绕一个轴旋转一定角度,第二次绕第二个轴旋转90°,第三次绕最后一个轴旋转的效果与绕第一个轴相同。以扭头形象的举例子,身体转向代表绕x轴旋转,昂首俯首代表绕y轴旋转,头向左右肩膀歪头代表绕z轴旋转。首先将身体随意旋转一定角度,接着昂首90°即看向天花板,随后保证面一直朝向天花板歪头任意角度,则会发现此时歪头和身体转向的效果相同,出现了奇异性。并且理论上可以证明,用3个实数来描述旋转问题都会出现奇异性问题,因为这个问题,欧拉角不适用与插值或者迭代。 

从零入门激光SLAM(十)——刚体位姿表达与优化

1.3. 四元数

旋转矩阵用9个量描述3自由度旋转具有冗余性,欧拉角虽然紧凑但存在奇异性,所以需要寻求一种新的旋转描述方式。

  • 复数

复数最直观的理解就是旋转,4*i*i=-4;就是“4”在数轴上旋转了180度。那么4*i就是旋转了90度。

从零入门激光SLAM(十)——刚体位姿表达与优化

复数域定义如下,对应了复数的平面坐标系称为复平面x轴和y轴分别称为实轴虚轴。当r等于1时称为单位复数。 

从零入门激光SLAM(十)——刚体位姿表达与优化

从零入门激光SLAM(十)——刚体位姿表达与优化

 特别的我们拿i乘以一个复数,对应的几何意义是旋转90°

从零入门激光SLAM(十)——刚体位姿表达与优化

在知道了可以用复数表达旋转后,引入了四元数

四元数:三维情况下,四元数可作为复数的扩充,具有三个虚部和一个实部。四元数相比于角轴、欧拉角的优势:紧凑、无奇异性。且四元数与角轴之间可以相互转换。

从零入门激光SLAM(十)——刚体位姿表达与优化

1.4 相关代码

矩阵基本运算(代码lidar_slam_course/ch3/eigen/useEigen)

  • 安装Eigen
Sudo apt-get install libeigen3-dev
  • Eigen矩阵线性代数库常用函数
  • 编译运行
mkdir ./build
cd build
cmake ..
make
./eigenMatrix
  • 旋转向量、欧拉角、四元数相互转换

(代码lidar_slam_course/ch3/eigen/useGeomety)

  • 坐标变换小例子

(代码lidar_slam_course/ch3/eigen/examples/coordinateTransform)

  • 位姿可视化小例子

(代码lidar_slam_course/ch3/eigen/examples/plotTrajectory)

  • 可视化位姿各种表达方式,左侧对应旋转矩阵、平移矩阵、欧拉角和四元数

(代码lidar_slam_course/ch3/eigen/visualizeGeometry)

2. 刚体位姿优化

2.1 李群

上面介绍过怎么表达位姿的变化,一个合适的表达是为了更方便的求解优化。而求解优化的过程常常需要求最小值,用到求导运算,那么如何方便快速的求导矩阵是一个问题。

从零入门激光SLAM(十)——刚体位姿表达与优化

2.2 李群与李代数 

可以看到李群没有加法,意味着不能够定义导数求导,所以需要找到一个与之对应的且能够加法的形式。对于任意旋转矩阵有:

从零入门激光SLAM(十)——刚体位姿表达与优化

从零入门激光SLAM(十)——刚体位姿表达与优化

说明在t=0附近,R可求解。给定某时刻的R即求一个Φ与之对应。即为SO(3)对应的李代数so(3)。每个李群都有与之对应的李代数。李代数描述了李群单位元附近的正切空间性质。指数相乘底数不变,指数相加,李群和李代数成为了乘法与加法转变的桥梁。

从零入门激光SLAM(十)——刚体位姿表达与优化

 2.3 指数与对数映射

从零入门激光SLAM(十)——刚体位姿表达与优化

从零入门激光SLAM(十)——刚体位姿表达与优化

2.4 求导与扰动模型

从零入门激光SLAM(十)——刚体位姿表达与优化

扰动模型求解更加简洁,避免了求雅可比矩阵。通过李群和李代数定义了运动变换的导数,就可以进行优化求解了。

2.5 Sophus李群李代数计算

Sophus依赖eigen和fmt库,所以首先安装这俩库。

  • Eigen
sudo apt-get install libeigen3-dev
  • fmt库
git clone GitHub - fmtlib/fmt: A modern formatting library
cd fmt
mkdir build
cd build
cmake ..
make
sudo make install
  • Sophus库
git clone GitHub - strasdat/Sophus: C++ implementation of Lie Groups using Eigen.
cd sophus
mkdir build
cd build
cmake ..
make
sudo make install

由旋转矩阵构建李群、李代数并进行指数对数映射

(代码lidar_slam_course/ch3/sophus/SOSEsose)

评估轨迹误差

(代码lidar_slam_course/ch3/sophus/example)

到此,你知道了刚体运动的表达和求导方式,有了这些基础就可以进行位姿的求解优化了。前面的Ubunru、ROS、编译、点云、位姿优化的基础终于铺垫差不多了,下一节将讲解如何求解SLAM问题。文章来源地址https://www.toymoban.com/news/detail-451339.html

到了这里,关于从零入门激光SLAM(十)——刚体位姿表达与优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零入门激光SLAM(五)——手把手带你编译运行Lego_loam

    大家好呀,我是一个SLAM方向的在读博士,深知SLAM学习过程一路走来的坎坷,也十分感谢各位大佬的优质文章和源码。随着知识的越来越多,越来越细,我准备整理一个自己的激光SLAM学习笔记专栏,从0带大家快速上手激光SLAM,也方便想入门SLAM的同学和小白学习参考,相信看

    2024年01月17日
    浏览(107)
  • 从零开始的三维激光雷达SLAM教程第二讲(搭建Gazebo仿真环境,并添加动态障碍物)

    毕业设计打算做三维激光SLAM,记录一些学习历程,也给后面人一点帮助。本教程不涉及SLAM基本概念(如果没有自行补充),主要包含以下几部分内容。 搭建激光SLAM的运行环境并运行数据集 在Gazebo中构建仿真地图并添加动态障碍物,使用仿真小车采集激光数据。 A-LOAM详解,

    2024年02月01日
    浏览(51)
  • SLAM实操入门(六):连接Velodyne的16线激光雷达并可视化

    好久没更新这部分了,最近在搞中期答辩的东西,简单补充一部分多线激光雷达建图的内容。上文介绍使用自己的激光雷达如何通过GMapping算法建图,接下来两节介绍怎么运行Velodyne的16线激光雷达,并使用港科大改进的A-Loam进行建图。 前文链接如下 SLAM实操入门(一):在已

    2024年02月09日
    浏览(39)
  • 从零实战SLAM-第九课(后端优化)

     在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 ------------------------------------------------------------------------------------------------------------------------------- 后端的目标:从带噪声的数据估计内在状态——状

    2024年02月12日
    浏览(43)
  • 【激光SLAM】激光的前端配准算法

    在激光SLAM中,前端配准(Frontend Registration)是实现定位和地图构建的关键步骤之一。它的作用是将当前帧的激光扫描数据与先前帧(或参考帧)的激光扫描数据进行配准,以获取它们之间的 相对位姿变换 。 通过前端配准,激光SLAM系统可以实现对机器人在环境中的位置和姿

    2024年02月19日
    浏览(40)
  • 移动机器人激光SLAM导航(五):Cartographer SLAM 篇

    参考 Cartographer 官方文档 Cartographer 从入门到精通 1.1 前置条件 推荐在刚装好的 Ubuntu 16.04 或 Ubuntu 18.04 上进行编译 ROS 安装:ROS学习1:ROS概述与环境搭建 1.2 依赖库安装 资源下载完解压并执行以下指令 https://pan.baidu.com/s/1LWqZ4SOKn2sZecQUDDXXEw?pwd=j6cf 1.3 编译 本文只编译 cartographer

    2024年02月21日
    浏览(45)
  • 【3D激光SLAM】Livox-mid-360激光雷达ip配置

    写在前言:请认真阅读mid360官方手册,第一次配雷达ip真的很多坑 参考资料 mid360雷达sdk:https://github.com/Livox-SDK Livox Viewer2:https://www.livoxtech.com/downloads LIO-Livox:https://github.com/Livox-SDK/LIO-Livox Livox-Mapping:https://github.com/Livox-SDK/livox_mapping 首先在Ubuntu20.04下将本机IP地址置于和雷达

    2023年04月23日
    浏览(59)
  • 开源3D激光(视觉)SLAM算法汇总(持续更新)

    目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 十七、PV-LIOVoxelMap Cartographer是由谷歌于2016年开源的一个支持ROS的室内

    2024年02月03日
    浏览(38)
  • 从零开始学习 Java:简单易懂的入门指南之正则表达式(十五)

    在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,我们可以验证用户输入的字符串是否匹配这个规则。 先看一个不使用正则表

    2024年02月12日
    浏览(42)
  • 超全!SLAM论文与开源代码汇总(激光+视觉+融合)

    1.代表性视觉SLAM算法论文与开源代码总结 2.代表性激光SLAM算法论文与开源代码总结 3.代表性激光-视觉融合SLAM算法论文总结 激光-视觉-IMU-GPS融合SLAM算法理论与代码讲解: https://mp.weixin.qq.com/s/CEJPWHVAnKsLepqP3lSAbg 参考文献 [1] CADENA C, CARLONE L, CARRILLO H, et al. Past, present, and future of

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包