【SLAM学习】罗德里格斯公式推导详细过程

2023-10-07 19:40

本文主要是介绍【SLAM学习】罗德里格斯公式推导详细过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前,在进实验室之前自己学习SLAM,用的是高翔博士所著的《视觉SLAM十四讲》,其中涉及到罗德里格斯公式,这里讲自己的推导过程记录如下。

罗德里格斯公式如下:
在这里插入图片描述
上述公式是在视觉SLAM中常用的公式,可以讲旋转角变换为旋转矩阵,其中R为旋转矩阵,θ为绕轴旋转的角度,n为旋转轴方向的单位向量。

下面给出推导过程:
在这里插入图片描述
这是一个证明的辅助示意图(比较粗糙,不要见怪),大致是利用了向量的分解以及一些叉乘的知识。

证明

因为我们的最终目的是要的到旋转矩阵R,而所用到R的地方就是vrot =Rv,我们就要尽可能的用v来表示vrot
vrot = v + v//
vrot = a + b + v//
然后我们就把 a,b,v// 分别用 v 来表示就好了。
首先是 v//,从简单到难嘛,很容易看出来
v// = (v·nn
解释一下,v·n是一个内积,也就是向量vn上的投影,是一个数,然后再数乘n,变成一个方向和n相同,大小为v·n的向量,也就是v//.

然后是b,也不难看出
b = cosθ·v
这又是怎么得出来的呢,下面给出简单的推导。
b 应该是长度为 vrot 的膜乘-cosθ,方向与 v 相反,那么
b = ||vrot⊥||·(-cosθ)·(-v⊥n
这里注意cosθ是负的,继续推导,由于||vrot⊥||与||v||相等,
b = ||v||·cosθ·v⊥n
b = cosθ·v

最后是a,先给出a的结果
a = sinθ · n × v
b 的推导一样,a 的长度是 ||vrot⊥||·sinθ,方向是 n×v⊥n,那么
a = ||vrot⊥||·sinθ·n×v⊥n
又因为上面提到的||vrot⊥||与||v||相等,所以
a = ||v||·sinθ·n×v⊥n
a = sinθ·n×v
但是,由于我们最终要表现得形式是 vrotv 之间的,所以把上述a的表示变成由v表示,注意到,n× v 是膜为||n||·||v||·sin90° = ||n||·||v||,方向为n×v的向量,而 n × v 同样也是,所以直接替换
a = sinθ · n × v

到此为止,就把所有的向量用与 v 有关的向量来表示了,目前的推导公式已经变成了如下样子:

vrot = sinθ·n×v + cosθ·v + (v·nn

然而,此时还并没有转换为 vrot = Rv的形式,下面就要把所有的 v 的系数转化为矩阵。

首先第一项,可以直接利用叉乘进行转化,如果你看过《视觉SLAM十四讲》就对这个肯定不陌生,可以转化为 sinθ·n^·v
其中,n^大概就是左边矩阵的这个样子,这是规定好的,可以算一下,这样算出来和直接叉乘的结果一致,图中的 k 即为我所说的 n。
在这里插入图片描述

然后第二项,v = v - v//
所以原式 = cosθ·(v - (v·nn),就转化为了对第三项进行变换

最后是第三项,由数乘的交换律,(v·nn = n·(v·n),然后由于v·n = nT·v,所以原式转化为n·nT·v,前半部分转化为矩阵。

综上所述,最终可得(剩下的自己顺着写就出来了)
在这里插入图片描述
如有问题,欢迎留言~~~

这篇关于【SLAM学习】罗德里格斯公式推导详细过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/160013

相关文章

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.