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

news2024/9/20 9:37:41

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

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. 变换矩阵

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

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

在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,这样表达旋转参数量大大减少。

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

1.3. 四元数

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

  • 复数

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

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

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

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

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

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 李群

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

2.2 李群与李代数 

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

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

 2.3 指数与对数映射

2.4 求导与扰动模型

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

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问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/544207.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django ORM框架 第三章 关联表的数据创建与查询

一、背景: 创建一组一对多的表。 # 班级表 class Class(models.Model):class_id models.IntegerField(primary_keyTrue, verbose_name班级id, help_text班级id)class_name models.CharField(max_length20,verbose_name班级名称, help_text班级名称)# 学生信息表 …

Centos虚拟机与window共享文件夹

1.安装完centos系统后,查看是否安装好VMware tools 如果未安装,请参考此文章安装: CentOS安装VMwareTools_centos安装vmware tools_Sunqk5665的博客-CSDN博客 2.添加共享文件夹 3.使用vmware-hgfsclient查看共享文件夹。本例中为share 4. 挂…

5.1 标准IO介绍及缓冲区

目录 标准I/O介绍 文件的概念和类型 标准I/O-流(可理解为数据) 流的缓冲类型 标准I/O——stdin,stdout,stderr 标准I/O介绍 在寄存器中的输入输出标准,在任何系统上可运行,是一系列的接口,所以被称为标准IO lin…

学会ECharts 数据缩放组件

本文首发自「慕课网」(imooc.com),想了解更多IT干货内容,程序员圈内热闻,欢迎关注"慕课网"或慕课网公众号! 作者:范文杰_fe|慕课网讲师 在一个数据图表中,可能由于数据所表…

Mtlab基础(十):极限的求解

在做研究的过程中,需要涉及到极限的求解,面对简单的极限大家都能够轻松解决,但是当面临复杂的问题时,传统的差分进化算法就难以解决了。 对于求解极限,Matlab提供了非常好的工具**limit**,具体的使用方法: limit(f,v,a)-------------------------------------------…

RFID在空调装配中的作用

RFID在空调装配中的作用 随着物联网和射频识别技术 (RFID) 的发展,越来越多的应用开始使用 RFID 技术来提高生产效率和产品质量。在空调装配过程中,RFID 技术可以发挥重要作用。 RFID 技术可以帮助空调制造商提高装配效率。使用 RFID 技术,…

CircuitBreaker Resilience4J 介绍

最近接触到了CircuitBreaker Resilience4J ,网上查了查资料,这里整合记录一下,供大家学习和参考 目录 前言 1、熔断器出现背景 ​​​​​​​ 2、支持断路器实现有以下几种 3、Circuit Breaker原理 4、概念说明 限流 — RateLimiter …

CPU Architecture

CPU Architecture [/ˈɑːrkɪtektʃər/] 指令集架构 (Instruction Set Architecture)精简指令集处理器 RISC (Reduce Instruction Set Computer)复杂指令集处理器 CISC (Complex Instruction Set Computer) CPU按指令集架构分类ARM运行模式非特权模式…

什么是NTFS for Mac?2023新版本如何下载

在NTFS for Mac中包含了多种功能操作,促进软件更好地使用,可以进行全局设置,也可以针对某一各挂载的磁盘进行针对性设置。 本集小编主要向大家介绍它包含的一些基本功能,看看这款mac读写工具能够实现那些功能,全面了解…

安科瑞电能表对于预付费平台的费控策略应用

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:基于智能电能表的预付费系统平台可以实现对预付费客户的适时算费、远程费控和服务。预付费系统的费控策略包括算费子策略、催费预警提醒子策略、欠费停电子策略,介绍3个子策略的制定原则、设计流程&…

Flink学习——状态编程

目录 一、Flink中的状态 二、状态编程 (一)ValueState案例——判断传感器的数据 1.代码实现 2.端口进行传输数据 3.运行结果 (二)ListState (三)MapState案例——比较学生每次考试成绩 1.代码实现 2.端口传输学生成绩 3.运行结果 (四)ReducingState 一、Flink中的状…

0Ω的电阻作用

0欧姆电阻即电阻标值为0欧姆的电阻,多用于PCB设计等方面,是一种理想电阻。那0欧姆电阻是表示没有电阻吗?当然不是,0欧姆电阻的阻值不是0欧姆,只是接近0欧姆。 1、调试方便或者兼容设计:可以选择器件、功能…

网络安全--XXE漏洞利用思路

一、XXE 是什么 介绍 XXE 之前,我先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞 如图所示: 既然能插入 XML 代码,那我们肯定不能善罢甘休,我们需要更多,于是出…

Python环境安装,操作MySQL数据脚本

安装Python 下载地址Python Releases for macOS | Python.org下载安装包点击安装执行python3命令查看安装及版本 安装插件 安装PyMySQL python3 -m pip install PyMySQL 编写脚本 创建文件selectMysql.py #!/usr/bin/python import pymysql.cursors def updateuser(user_…

chatgpt赋能Python-python3_4

Python3-4: 编程领域的瑰宝 简介 Python3-4 是一种开源解释型高级编程语言,具有简单易学、可读性强、语法简洁的特点。它由谷歌公司所开发,在全球范围内被广泛应用于Web开发、人工智能、科学计算、数据分析等领域。 优势 1. 语法简洁 Python3-4采用…

今天面试招了个20K的人,从腾讯出来的果然都有两把刷子···

现在找个会自动化测试的人真是难呀,10个里面有8个写了会自动化,但一问就是三不知 公司前段时间缺人,也面了不少测试,前面一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在15-20k,面试的…

实施基于零信任网络安全的设备控制

零信任安全是一种数据保护策略,除非系统管理员进行彻底验证,否则网络边界内外的所有设备和实体都不受信任。Device Control Plus 可帮助管理员为其网络实施和自动化零信任安全协议,以确保对来自未经批准的外围设备的所有端点数据提供最佳保护…

嵌入式软件测试笔记1 | 简单说明 嵌入式系统认识和测试目标

1 | 简单说明 & 嵌入式系统认识和测试目标 1 为什么看这个?2 一些说明3 主要内容是什么?4 嵌入式系统测试的目标4.1 测试的任务4.2 最终目标4.3 测试过程4.4 通用元素 5 嵌入式系统的一些基础 1 为什么看这个? 一直在间断性的学习和了解…

chatgpt赋能Python-python3_6怎么调整字体大小

Python3.6 是一种广泛使用的编程语言,可以帮助人们创建各种各样的应用程序。不过,当我们在使用 Python3.6 编写程序时,有时会遇到一些困难,比如如何调整字体大小。那么,今天我们就来看看如何应对这个问题。 如何在 Py…

(十二)centos7案例实战——swap虚拟内存配置

前言 在实际生产环境中,我们的服务器由于内存配置资源有限,会遇到一些线上服务宕机或者内存溢出等问题,那么如何解决这些问题呢,一方面我们要确认问题的具体原因,通过排查自身应用服务的问题,一方面增加我…