当前位置: 首页 > news >正文

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

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

本章将介绍视觉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程序中直接使用欧拉角表达姿态,同样不会在滤波或优化中使用欧拉角表达旋转,因为它具有奇异性。如果想验证自己的算法是否有错,转换成欧拉角能够帮你快速分辨结果是否正确。

相关文章:

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

专栏系列文章如下: 【视觉SLAM十四讲学习笔记】第一讲——SLAM介绍 【视觉SLAM十四讲学习笔记】第二讲——初识SLAM 【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵 本章将介绍视觉SLAM的基本问题之一:如何描述刚体在三维空间中的运动? 旋转向…...

【UGUI】制作用户注册UI界面

这里面主要的操作思想就是 1.打组 同一个事情里面包含两个UI元素都应该打组便于管理和查找 2.设置锚点位置 每次创建一个UI都应该设置他的锚点以便于跟随画布控制自己的:相对位置 3. 设置尺寸(像素大小) 每一次UI元素哪怕是作为父物体的…...

【UE】透视效果

效果 步骤 1. 新建一个空白工程 2. 添加一个第三人称游戏和初学者内容包到内容浏览器 3. 新建一个材质,这里命名为“M_Perspective” 打开“M_Perspective”,设置材质域为后期处理 添加三个“SceneTexture”节点,场景纹理ID选项分别设置为“…...

前端下载文件或者图片方式,window.open或者a标签形式

首先分别讲一下下载文件的方式都有哪些 1.通过a标签的方式下载文件 <a href"http://www.baidu.com" download"baidu.html">下载</a> 我们点击下载&#xff0c;发现是跳转到了百度的首页&#xff0c;并没有真的下载文件。 因为a标签下载只能…...

webpack配置scss loader

国内GPT站点&#xff1a;https://www.atalk-ai.com 在 Webpack 中配置 sass-loader 用于处理 .scss 文件通常涉及以下步骤&#xff1a; 安装必要的依赖&#xff1a; 你需要安装 sass-loader&#xff0c;以及 sass 本身&#xff08;sass 是 node-sass 的替代品&#xff0c;更快且…...

k8s有状态部署mysql主从(local pv持久化)

1、修改自己对应的命名空间 2、local pv的方式必须先创建好目录在给权限 3、sts部署文件密码都要修改好在部署 yaml资源文件如下&#xff1a; #配置mysql的root密码再部署&#xff0c;如果部署了在修改root密码就会失败&#xff0c;必须在初始化就把root密码修改好 #部署采…...

下载并安装anaconda和VScode,配置虚拟环境,并使用VScode运行代码

文章目录 前言软件下载Anaconda下载VScode下载 软件安装Anaconda安装Vscod安装 配置虚拟环境并运行代码Anaconda创建环境VScode使用&#xff0c;运行代码1. 打开代码所在文件夹2. 选择解释器3. 运行代码 总结 前言 运行python代码&#xff0c;需要2个软件如下&#xff1a; Ana…...

拼图 游戏

运行出的游戏界面如下&#xff1a;按住A不松开&#xff0c;显示完整图片&#xff1b;松开A显示随机打乱的图片 User类 package domain;/*** ClassName: User* Author: Kox* Data: 2023/2/2* Sketch:*/ public class User {private String username;private String password;p…...

python循环语句和函数

1.使用for循环打印9*9乘法表 for i in range(1, 10):for j in range(1, i1):print(i, "*", j, "", i*j, end"\t")print()结果&#xff1a; 2.使用while循环打印9*9乘法表 i 1 while i < 10:j 1while j < i1:print(i, "*", j…...

php框架dcat-admin速查笔记

要想灵活的使用dcat-admin框架开发,必须知道框架有哪些类提供给我们使用. 每一个自定义的按钮,弹框,信息展示,小组件都用到特定的类和接口. 常用核心类 Dcat\Admin\Http\Controllers\AdminController 需要继承的公共控制器 Dcat\Admin\Layout\Content 布局核心 Dcat\Admin\Gr…...

【Java】文件I/O-文件内容操作-输入输出流-Reader/Writer/InputStream/OutputStream四种流

导读 在文件I/O这一节的知识里&#xff0c;对文件的操作主要分为两大类&#xff1a; ☑️针对文件系统进行的操作 ☑️针对文件内容进行的操作 上文已经讲了针对文件系统即File类的操作&#xff0c;这篇文章里博主就来带了解针对文件内容的操作&#xff0c;即输入输出流&am…...

rocky8.9配置K8S集群kubernetes,centos同理

注意&#xff01;&#xff01;&#xff01; 虚拟机实验环境不要使用’克隆’&#xff01;&#xff01;&#xff01; 唯一标识冲突&#xff1a;K8S集群中的每个节点都需要具有唯一的标识符&#xff0c;例如节点名称、IP地址、MAC地址等。当克隆虚拟机时&#xff0c;这些唯一标识…...

Linux下的文件IO之系统IO

1. 知识点 读入写出&#xff0c;切记以我们程序为中心向文件或者别的什么东西读入写出&#xff08;输入流输出流&#xff09; 人话就是 文件向我们程序就是读入 程序向文件或者别的什么就是写出 2. open打开文件 open.c /****************************************************…...

iptables防火墙之SNAT与DNAT

1. SNAT SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) SNAT原理:源地址转换&#xff0c;根据指定条件修改数据包的源IP地址&#xff0c;通常被叫做源映射。 数据包从内网发送到公网时&#xff0c;SNAT会把数据包的源IP由私网IP…...

Python与设计模式--命令模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

uni-app 自带返回方法onBackPress,返回上一级并且刷新页面内容获取最新的数据

onBackPress 返回上一级并且刷新页面内容获取最新的数据 onBackPress 方法是uinapp自带返回键方法&#xff0c;也就是在app和H5返回键 onBackPress() {setTimeout(() > {uni.switchTab({url: /pages/Users/index,})}, 300)return true}, methods: {}在这里 uni.switchTab…...

python用YOLOv8对图片进行分类

用yolov8的模型进行分类 先上效果图 图片资源 模型下载地址 https://github.com/ultralytics/ultralytics 代码 import matplotlib.pyplot as plt from ultralytics import YOLO from PIL import Image import cv2model YOLO(../ultralytics/yolov8n.pt)# print(model…...

Spring中@DependsOn 使用详解

一、注解源码 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface DependsOn {String[] value() default {}; } 二、基础概念 DependsOn是Spring框架用来指定bean之间依赖关系的注解之一&#xff0c;即可用户类…...

android笔记 SELinux

1.SELinux解错步骤 log信息&#xff1a; 11-20 02:25:12.526 8976 8976 W om.jzzh.setting: type1400 audit(0.0:1316): avc: denied { write } for name"com.jzzh.setting-IWLR9dkz8TWizbNujdTpWw" dev"mmcblk2p15" ino2661 scontextu:r:system_app:s0…...

vue3 keep-alive页面切换报错:parentComponent.ctx.deactivate is not a function

问题&#xff1a; <router-view v-slot"{ Component }"><keep-alive ><component :is"Component" v-if"$route.meta.keepAlive" /></keep-alive><component :is"Component" v-if"!$route.meta.keepA…...

独立开发者如何借助Taotoken模型广场为不同任务选择性价比模型

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken模型广场为不同任务选择性价比模型 对于资源有限的独立开发者或小型工作室而言&#xff0c;在构建应用…...

配额额度只剩2.3%,而审批流程还要3天?用DeepSeek配额弹性池+预授权令牌实现零等待扩容(附实测TPS提升41%)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek配额管理的核心挑战与业务痛点 DeepSeek大模型服务在企业级落地过程中&#xff0c;配额管理已成为影响稳定性、成本可控性与多租户公平性的关键瓶颈。高频调用场景下&#xff0c;API请求突发性、用户…...

智能体系统设计简明教程

曾经有一段时间&#xff0c;软件系统大多在等待。 它们等待请求&#xff0c;等待输入&#xff0c;等待工程师已经知道系统应该执行的操作序列而编写的明确指令。 即使是大规模分布式系统&#xff0c;在很大程度上也是在同一个假设下运行的。复杂性来自于规模、并发和协调——…...

3分钟为Blender相机添加真实抖动:Camera Shakify新手完全指南

3分钟为Blender相机添加真实抖动&#xff1a;Camera Shakify新手完全指南 【免费下载链接】camera_shakify 项目地址: https://gitcode.com/gh_mirrors/ca/camera_shakify 想让你的Blender动画瞬间拥有电影级的真实感吗&#xff1f;Camera Shakify这款神奇的插件就是你…...

中小团队如何统一管理多个项目的AI模型调用与API密钥

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 中小团队如何统一管理多个项目的AI模型调用与API密钥 在中小型技术团队的日常开发中&#xff0c;多个项目并行是常态。这些项目可能…...

AppImageLauncher:3步解决Linux应用管理的终极难题

AppImageLauncher&#xff1a;3步解决Linux应用管理的终极难题 【免费下载链接】AppImageLauncher Helper application for Linux distributions serving as a kind of "entry point" for running and integrating AppImages 项目地址: https://gitcode.com/gh_mir…...

【紧急通知】ChatGPT桌面版v1.5.2已悄然下架旧安装包!仅剩72小时可获取官方签名安装器(附SHA256校验码)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT桌面版下载安装 OpenAI 官方尚未发布官方支持的 ChatGPT 桌面应用程序&#xff0c;但社区提供了多个稳定、安全且功能完善的第三方桌面客户端。目前主流推荐方案为基于 Electron 构建的开源项目…...

使用Taotoken后模型API调用的延迟与稳定性实际观测体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 使用Taotoken后模型API调用的延迟与稳定性实际观测体验 1. 观测背景与测试方法 作为一名日常需要调用多种大模型API的开发者&…...

DeepSeek审计日志全链路解析:从日志采集、脱敏、存储到SOC对接的7步生产级落地手册

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek审计日志的核心价值与架构全景 DeepSeek审计日志是企业级AI平台安全治理的关键基础设施&#xff0c;它不仅记录模型调用、数据访问、权限变更等关键操作事件&#xff0c;更通过结构化、可追溯、防篡改…...

从激活困境到一键解放:KMS_VL_ALL_AIO如何重塑你的Windows与Office体验

从激活困境到一键解放&#xff1a;KMS_VL_ALL_AIO如何重塑你的Windows与Office体验 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 你是否曾为Windows激活问题而烦恼&#xff1f;每次重装系统后…...