【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

相关文章

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

pycharm远程连接服务器运行pytorch的过程详解

《pycharm远程连接服务器运行pytorch的过程详解》:本文主要介绍在Linux环境下使用Anaconda管理不同版本的Python环境,并通过PyCharm远程连接服务器来运行PyTorc... 目录linux部署pytorch背景介绍Anaconda安装Linux安装pytorch虚拟环境安装cu

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot 3 整合 Spring Cloud Gateway实践过程

《SpringBoot3整合SpringCloudGateway实践过程》本文介绍了如何使用SpringCloudAlibaba2023.0.0.0版本构建一个微服务网关,包括统一路由、限... 目录引子为什么需要微服务网关实践1.统一路由2.限流防刷3.登录鉴权小结引子当前微服务架构已成为中大型系统的标

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

SpringBoot整合easy-es的详细过程

《SpringBoot整合easy-es的详细过程》本文介绍了EasyES,一个基于Elasticsearch的ORM框架,旨在简化开发流程并提高效率,EasyES支持SpringBoot框架,并提供... 目录一、easy-es简介二、实现基于Spring Boot框架的应用程序代码1.添加相关依赖2.添

SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程

《SpringBoot中整合RabbitMQ(测试+部署上线最新完整)的过程》本文详细介绍了如何在虚拟机和宝塔面板中安装RabbitMQ,并使用Java代码实现消息的发送和接收,通过异步通讯,可以优化... 目录一、RabbitMQ安装二、启动RabbitMQ三、javascript编写Java代码1、引入