【视觉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

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

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

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

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

相关文章

Ubuntu22.04基于ROS2-Humble安装moveit2教程(亲测)

一、安装ROS2-Humble 1、参考&#xff1a;Ubuntu22.04安装ROS2-humble-CSDN博客 2、确保安装完成 source /opt/ros/humble/setup.bash 方法一&#xff1a;二进制安装 sudo apt install ros-humble-moveit* 方法二&#xff1a;安装源码编译 一、卸载二进制安装包 sudo a…

一些常见网络安全术语

1、黑帽 为非法目的进行黑客攻击的人&#xff0c;通常是为了经济利益。他们进入安全网络以销毁&#xff0c;赎回&#xff0c;修改或窃取数据&#xff0c;或使网络无法用于授权用户。这个名字来源于这样一个事实&#xff1a;老式的黑白西部电影中的恶棍很容易被电影观众识别&…

ISCTF 2024 web

ISCTF 2024 web 小蓝鲨的冒险 源码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__); $a "isctf2024"; $b $_GET["b"]; parse_str($b); echo "小蓝鲨开始闯关&#xff0c;你能帮助他拿到flag吗?<br>"; if ($a…

AIGC----生成对抗网络(GAN)如何推动AIGC的发展

AIGC: 生成对抗网络(GAN)如何推动AIGC的发展 前言 随着人工智能领域的迅猛发展&#xff0c;AI生成内容&#xff08;AIGC&#xff0c;AI Generated Content&#xff09;正成为创意产业和技术领域的重要组成部分。在AIGC的核心技术中&#xff0c;生成对抗网络&#xff08;GAN&am…

删除k8s 或者docker运行失败的脚本

vi delete_exited_containers.sh#!/bin/bash# 列出所有停止的容器并存储到数组 list_exited_containers() {echo -e "\nStopped containers:"containers()# 获取停止的容器信息并存入数组while IFS read -r line; docontainers("$line")done < <(do…

如何在MindMaster思维导图中制作PPT课件?

思维导图是一种利用色彩、图画、线条等图文并茂的形式&#xff0c;来帮助人们增强知识或者事件的记忆。因此&#xff0c;思维导图也被常用于教育领域&#xff0c;比如&#xff1a;教学课件、读书笔记、时间管理等等。那么&#xff0c;在MindMaster免费思维导图软件中&#xff0…

【unity小技巧】一些unity3D灯光的使用与渲染及性能优化方案

文章目录 天空盒反射配置太阳耀斑眩光烘培光照烘培光照时弹出错误&#xff0c;记得勾选模型下面的选择阴影项目配置光源模型模型shader的问题 全局光照混合光照模式混合照明模式减性照明模式Shadowmask照明模式间接烘焙照明模式 环境光遮罩灯光探针反射探针技术关闭反射探针可以…

Linux :进程间通信之管道

一、进程间通信 1.1 是什么和为什么 1、进程间通信是什么&#xff1f;&#xff1f; ——>两个或多个进程实现数据层面的交互&#xff0c;但是由于进程独立性的存在&#xff0c;导致通信的成本比较高。 2、既然通信成本高&#xff0c;那为什么还要通信呢&#xff1f;&…

“乐鑫组件注册表”简介

当启动一个新的开发项目时&#xff0c;开发者们通常会利用库和驱动程序等现有的代码资源。这种做法不仅节省时间&#xff0c;还简化了项目的维护工作。本文将深入探讨乐鑫组件注册表的概念及其核心理念&#xff0c;旨在指导您高效地使用和贡献组件。 概念解析 ESP-IDF 的架构…

ATmaga8单片机Pt100温度计源程序+Proteus仿真设计

目录 1、项目功能 2、仿真图 ​3、程序 资料下载地址&#xff1a;ATmaga8单片机Pt100温度计源程序Proteus仿真设计 1、项目功能 设计Pt100铂电阻测量温度的电路&#xff0c;温度测量范围是0-100摄氏度&#xff0c;要求LCD显示。画出电路图&#xff0c;标注元器件参数&am…

【代码pycharm】动手学深度学习v2-05 线性代数

课程链接-05 线性代数 可以先看完特定轴求和再去看p2 import torch xtorch.tensor([3.0]) ytorch.tensor([2.0]) #标量 print(1.标量只有一个元素&#xff1a;\n,xy,x*y,x/y,x**y) x2torch.arange(4) #向量 print(2.向量视为标量值组成的列表&#xff1a;\n,x2) print(3.访问张…

SpringBoot源码解析(四):解析应用参数args

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;引导上下文DefaultBootstrapContext SpringBoot源码解析(三)&#xff1a;启动开始阶段 SpringBoot源码解析(四)&#xff1a;解析应用参数args 目录…

ZSTD 内存泄漏问题

优质博文&#xff1a;IT-BLOG-CN Zstandard&#xff08;简称zstd&#xff09;是一种无损压缩算法&#xff0c;由Facebook开发并开源。它旨在提供高压缩比和高解压速度的平衡&#xff0c;适用于多种数据压缩需求。 特点 【1】高压缩比&#xff1a; zstd能够在保持较高压缩比的…

前端:HTML (学习笔记)【1】

一&#xff0c;网络编程的三大基石 1&#xff0c;URL &#xff08;1&#xff09;url —— 统一资源定位符&#xff1a; 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

【C++动态规划】3148. 矩阵中的最大得分|1819

本文涉及知识点 C动态规划 LeetCode 3148. 矩阵中的最大得分 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&#xff09;。从值为 c1 的单元格移动到值为 c2 的单元格的得…

STM32完全学习——使用标准库点亮LED

一、使用标准库建立工程 &#xff08;1&#xff09;首先我们在ST的网站上面&#xff0c;下载标准库 &#xff08;2&#xff09;将标准外设库加入到项目中 我们一般只会使用到红色标注的那个文件夹&#xff0c;我们一般也只会将这个文件夹导入到工程里面&#xff0c;其他的还有…

解决微信小程序自定义tabbar点击两次才能跳转

在每个页面的js文件下加上此代码&#xff0c;selected属性代表每一个页面的下标&#xff0c;在不同的js文件下&#xff0c;要对应不同的selected值 代码&#xff1a; onShow() { // 确保 TabBar 存在并且设置选中项 if (this.getTabBar && this.getTabBar()) { this.…

学习threejs,使用AnimationMixer实现变形动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AnimationMixer 动画…

Solana应用开发常见技术栈

编程语言 Rust Rust是Solana开发中非常重要的编程语言。它具有高性能、内存安全的特点。在Solana智能合约开发中&#xff0c;Rust可以用于编写高效的合约代码。例如&#xff0c;Rust的所有权系统可以帮助开发者避免常见的内存错误&#xff0c;如悬空指针和数据竞争。通过合理利…

【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用

文章目录 前言1. 指令要处理的数据有多长&#xff1f;1.1 通过寄存器指明数据的尺寸1.1.1 字操作1.1.2 字节操作 1.2 用操作符X ptr指明内存单元的长度1.2.1 访问字单元1.2.2 访问字节单元1.2.3 为什么要用操作符X ptr指明 1.3 其他方法 2. 寻址方式的综合应用2.1 问题背景&…