【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记:学习空间变换的三种数学表达形式。

文章目录

  • 1. 旋转矩阵
    • 1.1 向量运算
    • 1.2 坐标系空间变换
    • 1.3 变换矩阵与齐次坐标
  • 2. 旋转向量和欧拉角
    • 2.1 旋转向量
    • 2.2 欧拉角
  • 3. 四元数

1. 旋转矩阵

1.1 向量运算

对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 a,bR3,其内积可描述向量间的投影关系, c o s < a , b > cos<a,b> cos<a,b>表示两向量的夹角:
在这里插入图片描述

外积
在这里插入图片描述
外积运算结果为一个垂直于 a , b a,b a,b的向量,大小为 ∣ a ∣ ∣ b ∣ s i n < a , b > |a||b|sin<a,b> a∣∣bsin<a,b>(两个向量组成的四边形的有向面积)。

对外积运算,引入符号^,把 a a a写成一个反对称矩阵(Skew-symmetric Matrix),这样就把外积变成线性运算。这是一个一一映射,即任意向量都对应唯一的一个反对称矩阵,反之亦然:

a ^ = [ 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ] a\hat{}= \begin{bmatrix} 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 \end{bmatrix} a^= 0a3a2a30a1a2a10

1.2 坐标系空间变换

包括旋转平移两个过程,由矩阵 T T T 表示。

旋转过程由**旋转矩阵(Rotation Matrix)**表示,它是一个 3 × 3 3 \times 3 3×3的矩阵,且是一个行列式为1的正交矩阵(反之行列式为1的正交矩阵是一个旋转矩阵)。将n维旋转矩阵集合定义如下(特殊正交群(Special Orthogonal Group),后面讲):

S O ( n ) = { R ∈ R n × n ∣ R R T = 1 , d e t ( R ) = 1 } SO(n)=\{R \in \R^{n \times n} | RR^T=1, det(R)=1 \} SO(n)={RRn×nRRT=1,det(R)=1}

平移过程由平移向量 t表示。

1.3 变换矩阵与齐次坐标

变换矩阵T(Transform Matrix)是一个 4 × 4 4 \times 4 4×4矩阵,由旋转矩阵R平移向量t组成。可由特殊欧氏群表示这一集合:
S E ( 3 ) = { T = [ R t 0 T 1 ] ∈ R 4 × 4 ∣ R ∈ S O ( 3 ) , t ∈ R 3 } SE(3)=\{ T= \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} \in \R^{4 \times 4} | R \in SO(3), t \in \R^3 \} SE(3)={T=[R0Tt1]R4×4RSO(3),tR3}

T − 1 = [ R T − R T t 0 T 1 ] T^{-1} = \begin{bmatrix} R^T & -R^Tt \\ 0^T & 1 \end{bmatrix} T1=[RT0TRTt1]

对三维向量进行空间变换运算时,在其末尾添加1变成四维向量,便于运算,称为齐次坐标

2. 旋转向量和欧拉角

利用矩阵表示旋转存在两个问题:

  • SO(3)用9个量表示3个自由度的旋转、SE(3)用16个量表示6自由度的变换,不够紧凑;
  • 旋转矩阵自身约束:必须正交、行列式为1,因此很难直接对其进行优化;

2.1 旋转向量

任意旋转都可以用一个旋转轴一个旋转角来表示:具体可用一个向量来表示,其方向与旋转轴一致,而长度等于旋转角,这类向量称为旋转向量(或轴角/角轴,Axis-Angle),仅需一个三维向量即可描述旋转;
同样,可用一个旋转向量一个平移向量来表达一次变换;

旋转矩阵R旋转向量(旋转轴为单位向量n,角度为 θ \theta θ 之间的转换过程由罗德里格斯公式推导:
在这里插入图片描述
反之可由旋转向量推导出旋转矩阵,具体推导过程参考原书和链接。

2.2 欧拉角

可由翻滚角Roll偏航角Yaw俯仰角Pitch表示。注意几个问题:

  • 绕不同轴的旋转顺序会影响最终结果;
  • 在很多工程应用领域,利用欧拉角表示旋转很容易碰到万向锁(Gimbal Lock) 问题;

3. 四元数

问题来源:

  • 旋转矩阵用9个量描述3自由度的旋转,具有冗余性;
  • 欧拉角和旋转向量时紧凑的,但具有奇异性(万向锁);

使用四元数可以很方便地对空间运动数据进行优化,一个四元数 q q q 由一个实部和三个虚部构成:
q = q 0 + q 1 i + q 2 j + q 3 k = [ s , v ] T s = q 0 ∈ R v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q=q_0+q_1i+q_2j+q_3k=[s,v]^T \\ s=q_0 \in \R \\ v=[q_1,q_2,q_3]^T \in \R^3 q=q0+q1i+q2j+q3k=[s,v]Ts=q0Rv=[q1,q2,q3]TR3

这部分推导直接看书吧,没什么好总结的:

  • 四元数的运算;
  • 四元数表示旋转;
  • 四元数转旋转矩阵、旋转向量;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SystemVerilog学习笔记(十):进程/细粒度进程控制

进程 进程或线程是作为独立实体执行的任何代码片段。fork-join块创建并行运行的不同线程。在下面的图-1中&#xff0c;可以看到进程的类型和进程控制。 序号进程描述1.fork-join只有所有子线程执行完毕时&#xff0c;父线程才会执行。2.fork-join_any只有任何一个子线程执行完…

【Visual Studio系列教程】如何在 VS 上编程?

上一篇博客中&#xff0c;我们介绍了《什么是 Visual Studio&#xff1f;》。本文&#xff0c;我们来看第2篇《如何在 VS 上编程&#xff1f;》。阅读本文大约10 分钟。我们会向文件中添加代码&#xff0c;了解 Visual Studio 编写、导航和了解代码的简便方法。 本文假定&…

【3D Slicer】的小白入门使用指南八

3D Slicer DMRI(Diffusion MRI)-扩散磁共振认识和使用 0、简介 大脑解剖 ● 白质约占大脑的 45% ● 有髓神经纤维(大约10微米轴突直径) 白质探索 朱尔斯约瑟夫德杰林(Jules Joseph Dejerine,《神经中心解剖学》(巴黎,1890-1901):基于髓磷脂染色标本的神经解剖图谱)…

GraphPad Prism与鹰谷电子实验记录本强强联合,数据兼容互通

在科研探索的征途上&#xff0c;每一次数据的记录与分析都至关重要。鹰谷很高兴地宣布&#xff0c;鹰谷电子实验记录本InELN&#xff0c;与国际知名生物数据统计分析GraphPad Prism软件&#xff0c;实现数据快速兼容互通&#xff01;使用鹰谷电子实验记录本的用户&#xff0c;将…

HarmonyOS的@State装饰器的底层实现

HarmonyOS的State装饰器的底层实现 序言准备工作实现State装饰器 序言 ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;进一步通过规范强化静态检查和分析&#xff0c;使得在程序运行之前的开发期能检测更…

实战:深入探讨 MySQL 和 SQL Server 全文索引的使用及其弊端

在数据库中处理大量文本数据时,包含搜索(例如查找包含特定单词的文本)往往是必需的。然而,直接使用 LIKE %text% 的方式在大数据量中进行模糊查询会造成性能瓶颈。为了解决这一问题,MySQL 和 SQL Server 提供了全文索引(Full-Text Indexing)功能,可以显著加速文本数据的…

shell 100例

1、每天写一个文件 (题目要求&#xff09; 请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 例如生成的文件为2017-12-20.log&#xff0c;并且把磁盘的使用情况写到到这个文件中不用考虑cron&#xff0c;仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充&#xff1…

网络管理之---3种网络模式配置

目标&#xff1a; 了解几个概念&#xff1a; 1.什么是IP&#xff1f;什么是IP地址&#xff1f; 2.什么是桥接、NAT、仅主机模式 3.端口&#xff1f; 4.什么是网络接口命名规则 5.网络管理器 IP&#xff1a;指网络之间互联的协议&#xff0c;是TCP/IP 体系中的网络协议 I…

ubuntu 下mosquitto TLS配置

1、/etc/mosquitto/mosquitto.conf文件配置 persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d listener 1883 listener 8883 0.0.0.0 password_file /etc/mosquitto/pwfile cert…

zabbix搭建钉钉告警流程

目录 &#x1f324;️zabbix实验规划 &#x1f324;️zabbix实验步骤 &#x1f4d1;1 使用钉钉添加一个自定义的机器人 ​ &#x1f4d1;2在zabbix-server上编写钉钉信息发送脚本&#xff0c;设置钉钉报警媒介 ☁️ 设置钉钉报警媒介​编辑​编辑 ☁️在添加消息模板​编辑​…

【JavaWeb】JavaWeb入门之XML详解

目录 1.XML介绍 1.1.XML概述 1.1.1.什么是XML 1.1.2.XML的作用 1.1.3.XML与HTML的比较 1.1.4.XML和properties&#xff08;属性文件&#xff09;比较 1.1.5.W3C组织 1.2.XML语法概述 1.2.1.XML文档展示 1.2.2.XML文档的组成部分 1.3.XML文档声明 1.3.1.什么是XML文…

基于Zynq FPGA对雷龙SD NAND的测试

一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND有很多型号&#xff0c;在测试中使用的是CSNP4GCR01-AMW与CSNP32GCR01-AOW。芯片是基于NAND FLASH和 SD控制器实现的SD卡。具有强大的坏块管理和纠错功能&#xff0c;并且在意外掉电的情况下同样能保证数据的安全。 其特点如下&…

<Project-23 Navigator Portal> Python flask web 网站导航应用 可编辑界面:添加图片、URL、描述、位置移动

目的&#xff1a; 浏览器的地址簿太厚&#xff0c;如下图&#xff1a; 开始&#xff0c;想给每个 Web 应用加 icon 来提高辨识度&#xff0c;发现很麻烦&#xff1a;create image, resize, 还要挑来挑去&#xff0c;重复性地添加代码。再看着这些密密麻麻的含有重复与有规则的…

【Kafka】集成案例:与Spark大数据组件的协同应用

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是kafka 2、Kafka 的主要特性 3、Kafka 的…

Windows上安装专业版IDEA2024并激活

1、IDEA官方下载 搜索IDEA官网点击进入&#xff0c;点击Download&#xff08;目前这个激活脚本只能激活2024.1.7&#xff0c;2024.2.x的版本都不能激活&#xff0c;2024.1.7版本已上传资源&#xff09;&#xff0c;如图&#xff1a; 2、开始安装 1&#xff09;、双击下载的.…

CSS教程(二)- CSS选择器

1. 作用 匹配文档中的某些元素为其应用样式。根据不同需求把不同的标签选出来。 2. 分类 分类 基础选择器 包含 标签选择器、ID选择器、类选择器、通用选择器等 复合选择器 包含 后代选择器、子代选择器、伪类选择器等 1 标签选择器 介绍 又称为元素选择器&#xff0c;根…

Unix进程

文章目录 命令行参数进程终止正常结束异常终止exit和_exitatexit 环境变量环境变量性质环境表shell中操作环境变量查看环境变量设置环境变量 环境变量接口获取环境变量设置环境变量 环境变量的继承性 进程资源shell命令查看进程的资源限制 进程关系进程标识进程组会话控制终端控…

c# onnx 调用yolo v11进行目标检测

先上图&#xff0c;支持图片&#xff0c;视频检测 FormYoloV11.cs using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.Diagnostics; usin…

【多语言】每种语言打印helloworld,编译为exe会占多大空间

文章目录 背景c语言 53KBc 53KBgo 1.8Mdart 4.6Mpython未测试nodejs未测试rust未测试java未测试cmd || bash || powershell 未测试other 背景 各个版本的helloworld&#xff0c;纯属闲的, 环境如下: - win10 - mingw: gcc8.1.0 - go1.21 - dart3.5.4c语言 53KB gcc main.c -…

前端搭建低代码平台,微前端如何选型?

目录 背景 一、微前端是什么&#xff1f; 二、三大特性 三、现有微前端解决方案 1、iframe 2、Web Components 3、ESM 4、EMP 5、Fronts 6、无界&#xff08;文档&#xff09; 7、qiankun 四、我们选择的方案 引入qiankun并使用&#xff08;src外层作为主应用&#xff09; 主应…