【视觉SLAM十四讲学习笔记】第三讲——旋转向量和欧拉角

专栏系列文章如下:
【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍
【视觉SLAM十四讲学习笔记】第二讲——初识SLAM
【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵
【视觉SLAM十四讲学习笔记】第三讲——Eigen库

本章将介绍视觉SLAM的基本问题之一:如何描述刚体在三维空间中的运动

旋转向量

矩阵表示方式至少有一下两个缺点:

  1. SO(3)的旋转矩阵有9个量,但一次旋转只有3个自由度。因此这种表达方式是冗余的。同理,变换矩阵用16个量表达了6自由度的变换。
  2. 旋转矩阵自身带有约束:它必须是个正交矩阵,且行列式为 1。变换矩阵也是如此。当想要估计或优化一个旋转矩阵/变换矩阵时,这些约束会使得求解变得更困难。

因此,我们希望有一种方式能够紧凑地描述旋转和平移。例如,用一个三维向量表达旋转,用六维向量表达变换。事实上,任意旋转都可以用一个旋转轴和一个旋转角来刻画。于是,我们可以使用一个向量,其方向与旋转轴一致,而长度等于旋转角。这种向量称为旋转向量(或轴角/角轴,Axis-Angle),只需一个三维向量即可描述旋转。同样,对于变换矩阵,我们使用一个旋转向量和一个平移向量即可表达一次变换。这时的变量维数正好是六维。

考虑某个用R表示的旋转。如果用旋转向量来描述,假设旋转轴为一个单位长度的向量n,角度为 θ,那么向量 θn也可以描述这个旋转。

从旋转向量到旋转矩阵的转换过程由罗德里格斯公式(Rodrigues’s Formula )表明,转换的结果 :

img

符号∧是向量到反对称矩阵的转换符。反之,我们也可以计算从一个旋转矩阵到旋转向量的转换。对于转角 θ,取两边的(矩阵对角线元素之和),有

在这里插入图片描述

因此:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关于转轴n,由于旋转轴上的向量在旋转后不发生改变,说明:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,转轴n是矩阵R特征值1对应的特征向量。求解此方程,再归一化,就得到了旋转轴。也可以从“旋转轴经过旋转之后不变”的几何角度看待这个方程。

欧拉角

无论是旋转矩阵、旋转向量,它们虽然能描述旋转,但对我们人类是非常不直观的。当我们看到一个旋转矩阵或旋转向量时,很难想象出这个旋转究竟是什么样的。当它们变换时,我们也不知道物体是向哪个方向在转动。而欧拉角则提供了一种非常直观的方式来描述旋转——它使用了3个分离的转角,把一个旋转分解成 3 次绕不同轴的旋转。而人类很容易理解绕单个轴旋转的过程。

但是,由于分解方式有许多种,所以欧拉角也存在着众多不同的、易于混淆的定义方法。比如说,先绕X轴旋转,再绕Y轴,最后绕Z轴,就得到了一个XYZ轴的旋转。同理,可以定义ZYZ、ZYX等旋转方式。如果讨论得更细一些,还需要区分每次是绕固定轴旋转的,还是绕旋转之后的轴旋转的。这种定义方式上的不确定性带来了很多实用当中的困难。

欧拉角当中比较常用的一种,便是用“偏航−俯仰−滚转”(yaw-pitch-roll)3个角度来描述一个旋转。它等价于ZYX轴的旋转。假设一个刚体的前方(朝向我们的方向)为X轴,右侧为Y轴,上方为Z轴。那么,ZYX转角相当于把任意旋转分解成以下3个轴上的转角:

  1. 绕物体的Z轴旋转,得到偏航角 yaw;

  2. 旋转之后的Y轴旋转,得到俯仰角 pitch;

  3. 旋转之后的 X 轴旋转,得到滚转角 roll。

此时,可以使用 [r,p,y]T 这样一个三维的向量描述任意旋转。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

欧拉角的一个重大缺点是会碰到万向锁问题(Gimbal Lock ):在俯仰角为 ±90◦时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由 3 次旋转变成了 2 次旋转)。这被称为奇异性问题,只要想用3个实数来表达三维旋转时,都会不可避免地碰到奇异性问题(旋转向量也有奇异性,发生在转角θ超过2Π而产生周期性时)。

由于这种问题,欧拉角不适于插值和迭代,往往只用于人机交互中。我们很少在SLAM程序中直接使用欧拉角表达姿态,同样不会在滤波或优化中使用欧拉角表达旋转,因为它具有奇异性。如果想验证自己的算法是否有错,转换成欧拉角能够帮你快速分辨结果是否正确。

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

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

相关文章

sql21(Leetcode1174即时食物配送2)

代码: # Write your MySQL query statement belowselect round (sum(order_date customer_pref_delivery_date) * 100 /count(*),2 ) as immediate_percentage from Delivery where (customer_id, order_date) in (select customer_id, min(order_date)from deliv…

Unity 自带的一些可以操控时间的属性或方法。

今天来总结下Unity自带的一些可以操控时间的方法。 1、Time.time。比较常用计算运行时间而触发特定事件。 public class Controller : MonoBehaviour {public float eventTime 5f; // 触发事件的时间private float startTime; // 游戏开始的时间private void Start(){startT…

1300.二人的花纹纸游戏【算法必会题目】(前缀和题-JavaPythonC++实现)

文章目录 一.二人的花纹纸游戏【算法必会题目】(模拟题-Java&Python&C++实现)1.1题目背景1.2题目描述1.3形式化题面1.4提示二.题解2.1 解题思路2.1.1 题解2.2 解题代码2.2.1 C++2.2.2 python2.2.3 Java2.3 代码解释2.3.1 C++ 代码解释:2.3.2 Java 代码解释:2.3.3 P…

大数据学习(24)-spark on hive和hive on spark的区别

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

计算机毕业设计|基于SpringBoot+MyBatis框架的电脑商城的设计与实现(用户资料修改)

计算机毕业设计|基于SpringBootMyBatis框架的电脑商城的设计与实现(用户资料修改) 该项目分析着重于设计和实现基于SpringBootMyBatis框架的电脑商城。首先,通过深入分析项目所需数据,包括用户、商品、商品类别、收藏、订单、购物…

【活动回顾】sCrypt在2023伦敦区块链大会上的精彩表现

2023伦敦区块链大会,是本年度最盛大的比特币及区块链行业活动。大会于2023年5月31日至6月2日,在伦敦女王伊丽莎白二世中心举行,旨在展示BSV区块链的真正潜力。 sCrypt Inc 的创始人兼 CEO 刘晓晖, 作为演讲嘉宾出席了会议。他向大…

掌握高效性能测试技能:JMeter基础入门!

一、JMeter基础 A、JMeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。 Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and …

【活动回顾】sCrypt在柏林B2029开发者周

B2029 是柏林的一个区块链爱好者、艺术家和建设者聚会,学习、讨论和共同构建比特币区块链地方。 在2023年6月9日至11日,举行了第7次Hello Metanet研讨会。本次研讨会旨在为参与者提供一个学习、讨论和共同构建比特币区块链的平台。 在这个充满激情和创意…

旋转框检测项目相关python库知识总结(mmrotate、ppyolo_r、yolov5_obb)

旋转框常用于检测带有角度信息的矩形框,即矩形框的宽和高不再与图像坐标轴平行。相较于水平矩形框,旋转矩形框一般包括更少的背景信息。旋转框检测常用于遥感等场景中,本博文简单的介绍了可应用于旋转框数据训练的开源库,数据结构…

SpringCloud 微服务全栈体系(十八)

第十一章 分布式搜索引擎 elasticsearch 八、RestClient 查询文档 文档的查询同样适用 RestHighLevelClient 对象,基本步骤包括: 准备 Request 对象准备请求参数发起请求解析响应 1. 快速入门 以 match_all 查询为例 1.1 发起查询请求 代码解读&…

数字技术-IPC专利分类号对应表

数字技术-IPC专利分类号对应表,基于2023年的关键数字技术专利分类体系,通过国际专利分类(IPC)号进行筛选。这些数据涵盖了各种数字技术领域的创新,包括但不限于人工智能、大数据、云计算、物联网、5G通信等。利用关键词…

538. 把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树 题目: 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒…

浅谈联网汽车安全漏洞

“智能网联汽车存在内生共性问题,即软硬件的漏洞后门,基于此进行的网络攻击可以直接带来勒索、盗窃、大规模车辆恶意操控风险,还有数据泄露等网络安全事件。如果内生的漏洞后门问题不解决,系统自身难保,很难谈系统安全…

QTextEdit多行富文本框控件

​锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计21条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…

推荐你一个基于Koin, Ktor Paging等组件的KMM Compose Multiplatform项目

推荐你一个基于Koin, Ktor & Paging等组件的KMM Compose Multiplatform项目 Kotlin Multiplatform Mobile(KMM)已经从一个雄心勃勃的想法发展成为一个稳定而强大的框架,为开发人员提供了在多个平台上无缝共享代码的能力。通过最近的稳定…

平衡二叉树(AVL)

(附代码,简洁好理解) 目录 什么是平衡二叉树? 如何保证二叉树平衡? 左旋/右旋 左右双旋/右左双旋 代码 树的结构: 树的高度与平衡因子: 左/右旋: 平衡维护: …

70-76-堆、贪心算法

LeetCode 热题 100 文章目录 LeetCode 热题 100堆70. 中等-数组中的第K个最大元素71. 中等-前K个高频元素72. 困难-数据流中的中位数 贪心算法73. 简单-买卖股票的最佳时机74. 中等-跳跃游戏75. 中等-跳跃游戏II76. 中等-划分字母区间 本文存储我刷题的笔记。 堆 70. 中等-数组…

数字图像处理Python实现-图像特效与卷积滤波

图像特效与卷积滤波 文章目录 图像特效与卷积滤波1、准备2、快速了解卷积滤波3、应用卷积滤波在这篇文章中,我们将探索如何使用卷积内核来实现图像的模糊、锐化、轮廓和浮雕等特效。 1、准备 像往常一样,我们导入 numpy 和 matplotlib 等库。 此外,我们从 skimage 和 scipy…

命令行编译java

十分惭愧,java学了有七八年了,现在才来写这个博客,但是相信正确的事情即使迟到也好过不到,希望借助博客可以帮助记忆。 单个java文件 这个相信大家都知道,只是为了结构明确。这里java会找到内部的main方法。必须是在…

跨境电商系统开发:开启全球贸易新纪元

随着全球电子商务的飞速发展,跨境电子商务已经成为了一种日益重要的贸易形式。跨境电商系统开发,为企业提供了全新的商业机遇,打开了全球贸易的新纪元。 跨境电商系统开发,旨在实现不同国家和地区之间的电子商务交易,促…