SLAM中的三维运动学【SLAM】

李群视角下的运动学

连续时间下的运动学模型

物体在连续时间下运动的位姿由 R ( t ) R(t) R(t) t ( t ) t(t) t(t)表示,根据 R R R的正交性质有:
R ( t ) T R ( t ) = I R(t)^{T}R(t) = I R(t)TR(t)=I
公式两边对时间 t t t求导有:
R ( t ) ˙ T R ( t ) + R ( t ) T R ( t ) ˙ = 0 \dot{R(t)}^{T}R(t) + R(t)^{T}\dot{R(t)}= 0 R(t)˙TR(t)+R(t)TR(t)˙=0
R ( t ) T R ( t ) ˙ = − ( R ( t ) T R ( t ) ˙ ) T R(t)^{T}\dot{R(t)} = -(R(t)^{T}\dot{R(t)})^{T} R(t)TR(t)˙=(R(t)TR(t)˙)T
可以发现 R ( t ) T R ( t ) ˙ R(t)^{T}\dot{R(t)} R(t)TR(t)˙是反对称矩阵,不妨取 ω ( t ) ∧ = R ( t ) T R ( t ) ˙ \omega(t)^{\wedge} = R(t)^{T}\dot{R(t)} ω(t)=R(t)TR(t)˙,后面推导会发现 ω ( t ) \omega(t) ω(t)的意义其实就是瞬时角速度,此时有:
R ( t ) ˙ = R ( t ) ω ( t ) ∧ \dot{R(t)} = R(t)\omega(t)^{\wedge} R(t)˙=R(t)ω(t)
这里本人认为明确标出 ( t ) (t) (t)可以更容易理解变量之间的关系,否则很容易产生误解或疑惑。

上面的方程称为泊松方程(Poinsson Formula),这是一个微分方程,但是不要对它直接求解,我们假设 ω \omega ω是固定的值,并给定初值 t 0 t_{0} t0时刻的旋转矩阵为 R ( t 0 ) R(t_{0}) R(t0),此时微分方程有解:
R ( t ) = R ( t 0 ) e x p ( ω ∧ ( t − t 0 ) ) R(t) = R(t_{0}) exp(\omega^{\wedge}(t - t_{0})) R(t)=R(t0)exp(ω(tt0))
此时会发现 ω \omega ω刚好对应为角速度,而这个解描述的就是角速度不变的情况下的运动方程,如果让 t t t无限接近 t 0 t_{0} t0,也就是利用极限的思想, ω \omega ω就是瞬时角速度。

离散时间下的运动学模型

离散时间下认为瞬时角速度在短时间内不变,也就是 t 0 t_{0} t0 t t t时刻内不变,于是有:
R ( t ) = R ( t 0 ) e x p ( ω ∧ ( t − t 0 ) ) = R ( t 0 ) e x p ( ω ∧ △ t ) R(t) = R(t_{0}) exp(\omega^{\wedge}(t - t_{0})) = R(t_{0}) exp(\omega^{\wedge}\triangle t) R(t)=R(t0)exp(ω(tt0))=R(t0)exp(ωt)

线性近似形式

R ( t ) R(t) R(t) t 0 t_{0} t0时刻做一阶泰勒展开:
R ( t 0 + △ t ) ≈ R ( t 0 ) + R ( t 0 ) ˙ △ t = R ( t 0 ) + R ( t 0 ) ω ∧ △ t = R ( t 0 ) ( I + ω ∧ △ t ) R(t_{0} + \triangle t) \approx R(t_{0}) + \dot{R(t_{0})}\triangle t = R(t_{0}) +R(t_{0})\omega^{\wedge} \triangle t = R(t_{0})(I + \omega^{\wedge}\triangle t) R(t0+t)R(t0)+R(t0)˙t=R(t0)+R(t0)ωt=R(t0)(I+ωt)

离散形式和线性近似形式是更常用的处理形式。

四元数视角下的运动学

描述旋转的四元数具有单位性约束,也就是说必须是单位四元数,所以满足 q q ∗ = q ∗ q = 1 qq^{\ast} = q^{\ast}q =1 qq=qq=1

q ∗ q = 1 q^{\ast}q =1 qq=1两侧对时间求导有:
q ∗ ˙ q + q ∗ q ˙ = 0 \dot{q^{\ast}}q + q^{\ast}\dot{q} =0 q˙q+qq˙=0
q ∗ q ˙ = − q ∗ ˙ q = − ( q ∗ q ˙ ) ∗ q^{\ast}\dot{q} = -\dot{q^{\ast}}q = -(q^{\ast}\dot{q})^{\ast} qq˙=q˙q=(qq˙)
可以发现 q ∗ q ˙ q^{\ast}\dot{q} qq˙是一个纯虚四元数,不妨令其为 ϖ \varpi ϖ后面会发现 ϖ \varpi ϖ和李群下的 ω \omega ω有关系,准确的说,虚部为 1 2 ω \frac{1}{2} \omega 21ω,也体现了瞬时角速度的意义。

于是有:
q ∗ q ˙ = ϖ q^{\ast}\dot{q} = \varpi qq˙=ϖ
q ˙ = q ϖ \dot{q} = q\varpi q˙=qϖ

同样假设 ϖ \varpi ϖ为固定值,上面的微分方程的解为 q ( t ) = q ( t 0 ) e x p ( ϖ △ t ) q(t) = q(t_{0})exp(\varpi \triangle t) q(t)=q(t0)exp(ϖt)

这里要说明的是这里的指数映射为纯虚四元数的指数映射,结果为单位四元数,具体的定义为:
e x p ( ϖ ) = e x p ( θ u ) = c o s θ + u s i n θ exp(\varpi) = exp(\theta \mathbf{u}) = cos\theta + \mathbf{u}sin \theta exp(ϖ)=exp(θu)=cosθ+usinθ

不妨把纯虚四元数 ϖ \varpi ϖ看成四元数形式的李代数。

四元数视角下的运动学与李群视角下运动学的关系

下面要介绍的是上面两中运动学表达之间的关系,我们的关注点在于如何把两种表达的物理意义统一在一个描述下。

假设有一个旋转矩阵 R R R和对应的旋转向量 ϕ = θ n \phi = \theta\mathbf{n} ϕ=θn,对应的四元数为 q = e x p ( ϖ ) q=exp(\varpi) q=exp(ϖ)

根据四元数与旋转向量之间的转换关系可知 q = [ c o s θ 2 , n T s i n θ 2 ] T q = [cos\frac{\theta}{2}, \mathbf{n}^{T}sin\frac{\theta}{2}]^{T} q=[cos2θ,nTsin2θ]T,所以有 ϖ = [ 0 , 1 2 ϕ T ] T \varpi = [0, \frac{1}{2}\phi^{T}]^{T} ϖ=[0,21ϕT]T

所以四元数视角下的“角速度” ϖ \varpi ϖ其实是瞬时角速度的一半。

为了统一物理意义,我们让 ω \omega ω仍然代表瞬时角速度,此时四元数视角下的运动学方程为:
q ˙ = 1 2 q [ 0 , ω T ] T \dot{q} = \frac{1}{2}q[0, \omega^{T}]^{T} q˙=21q[0,ωT]T

假设某一时刻 t 0 t_{0} t0的瞬时角速度为 ω = ϕ = θ n \omega = \phi = \theta \mathbf{n} ω=ϕ=θn,由上一部分的四元数微分方程的解 q ( t ) = q ( t 0 ) e x p ( ϖ △ t ) q(t) = q(t_{0})exp(\varpi \triangle t) q(t)=q(t0)exp(ϖt)可以看出离散形式下的四元数更新方式:
q ( t ) = q ( t 0 ) e x p ( ϖ △ t ) = q ( t 0 ) e x p ( [ 0 , 1 2 ϕ T ] T △ t ) q(t) = q(t_{0})exp(\varpi \triangle t) = q(t_{0})exp([0, \frac{1}{2}\phi^{T}]^{T} \triangle t) q(t)=q(t0)exp(ϖt)=q(t0)exp([0,21ϕT]Tt)
因为 e x p ( [ 0 , 1 2 ϕ T ] T ) = [ c o s θ 2 , n T s i n θ 2 ] T exp([0, \frac{1}{2}\phi^{T}]^{T}) = [cos\frac{\theta}{2}, \mathbf{n}^{T}sin\frac{\theta}{2}]^{T} exp([0,21ϕT]T)=[cos2θ,nTsin2θ]T,当 ω \omega ω很小时,就可以近似,于是四元数的更新近似为:
q ( t ) = q ( t 0 ) [ 1 , 1 2 ω T ] T q(t) = q(t_{0})[1, \frac{1}{2}\omega^{T}]^{T} q(t)=q(t0)[1,21ωT]T

要注意的是,如果使用这种近似形式,更新后的四元数不再是单位四元数,所以长时间更新后要对四元数重新归一化。

参考资料:《自动驾驶与机器人中的SLAM技术》 高翔著

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

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

相关文章

数据库-索引快速学

索引 当表中数据量庞大时,往往搜索一条数据就会耗费很长的时间等待 索引是帮助数据库高效获取数据的数据结构 create index 索引名 on 数据表名(字段名);为该表下的某一字段创建索引,检索耗时会大大的减小 索引的优缺点 优点&…

【Python BUG】CondaHTTPError解决记录

问题描述 CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url https://mirrors.ustc.edu.cn/anaconda/pkgs/free/win-64/current_repodata.json Elapsed: 00:26.513315 解决方案 找到用户路径下的 .condarc文件,建议用这个方法前和我一样做个备份,方…

python中类的导入与使用

1、类的介绍 与C中面向对象思想类似,有时候为了方便,需要专门创建一个类,将相关的函数全部写入到该类中,方便后续创建对象,再使用类中函数。那么如何创建完类,在其他文件中使用类中函数,这是这篇…

Python Flask框架 -- flask-migrate迁移ORM模型

# 之前使用的这个db.create_all()很有局限性,它不能把在class里修改的东西同步上数据库,所以不用了 # with app.app_context(): # 请求应用上下文 # db.create_all() # 把所有的表同步到数据库中去 例如,在User类中增加一个email字段&…

STM32和GD32内部时钟与外部时钟讲解

STM32F103为例: 1. 当 HSI 被用作 PLL 时钟输入时,可以实现的最大系统时钟频率为 64 MHz。 2. 要使 USB 功能可用,必须同时启用 HSE 和 PLL,并使 USBCLK 运行在 48 MHz。 3. 要实现 ADC 转换时间为 1 s,APB2 必须为 14 MHz、28 MHz 或 56 MHz。 ①. HSE = 高速外部时钟信号…

浅谈机器学习分类

I. 前言 在这个信息时代,数据的快速发展促进了人工智能(AI)等智能化技术的迅速发展。机器学习(Machine Learning)作为人工智能的重要分支之一,在数据处理、预测分析、模式识别等方面具有广泛的应用。前言的…

[linux初阶][vim-gcc-gdb] OneCharter: vim编辑器

一.vim编辑器基础 目录 一.vim编辑器基础 ①.vim的语法 ②vim的三种模式 ③三种模式的基本切换 ④各个模式下的一些操作 二.配置vim环境 ①手动配置(不推荐) ②自动配置(推荐) vim是vi的升级版,包含了更加丰富的功能. ①.vim的语法 vim [文件名] ②vim的三种模式 命令…

爬取搜狗翻译项目实例

视频中讲解的是百度翻译,但是视频中的方法现在已经不适用了,因为他们对 URL 的参数进行了修改,导致没法直接修改参数来爬取对应的翻译结果,这里我使用搜狗翻译来做演示,原理是一样的。 我们搜索的关键字会返回在 URL 中…

家用超声波清洗机高端品牌推荐!4款值得入手的热门超声波清洗机

急着洗眼镜的朋友先不要慌,虽然洗眼镜是日常生活中最常见的操作,但是在清洗眼镜方面也是有讲究的,不是随随便便把眼镜擦一下就算清洁干净了!因为我们拿眼镜布擦眼镜的时候,布料粗糙的微粒就会跟砂纸一样打磨着镜片&…

【python】flask模板渲染引擎Jinja2中的模板继承,简化前端模块化开发

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

[树莓派5][linux][已解决] arecord -D “plughw:1,0“ 的设备序号怎么确定?

我们常用这条命令来测试麦克风录音&#xff1a; arecord -D "plughw:1,0" -f dat -c 1 -r 16000 -d 10 test.wav 其中plughw:1,0这个格式是&#xff1a; plughw:<card>,<device> 我们先用这条命令来查看设备&#xff1a; aplay -l 我查询到的是 **** Li…

Python:语法糖

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 在编程世界中&#xff0c;有一个词语听起来既甜蜜又神秘&#xff1a;语法糖&#xff08;Syntactic Sugar&#xff09;。这个术语并不是指真正的糖…

什么是Prompt Tuning?

本文是观看视频What is Prompt Tuning?后的笔记。 大语言模型&#xff08;如ChatGPT &#xff09;是基础模型&#xff0c;是经过互联网上大量知识训练的大型可重用模型。 他们非常灵活&#xff0c;同样的模型可以分析法律文书或撰写文章。 但是&#xff0c;如果我们需要用其解…

欧拉操作系统安装opengauss高斯数据库加postgis

怎么在openeuler20.03 x86_64上的opengauss 5.0安装yukon Issue #I8XT22 openGauss/Yukon - Gitee.com 1、拉取镜像 docker pull registry.cn-beijing.aliyuncs.com/supermap/yukon:2.0-opengauss5.0.0-amd64 2、运行加载 mkdir -p /Yukon/opengauss docker run --name Y…

浅析机器学习的步骤与方法

一、引言&#xff1a; 机器学习是人工智能的分支之一&#xff0c;旨在研究如何使计算机系统自主地从数据中学习&#xff0c;并能够根据以往的经验做出预测或决策。现代机器学习主要使用统计学、概率论和优化算法来构建模型和训练算法。 应用场景&#xff1a; 机器学习在众多领…

cocos3.0 关于UI组件学习

Sprite 图片&#xff1a;官方文档 Size Mode: 1.Raw&#xff1a;原始大小 2.TRIMMED: 默认&#xff0c;会裁切原始图片透明像素 3.Custom&#xff1a;自定义&#xff0c;只要修改ContentSize&#xff0c;会自动设置 Type 1.Simple:普通,会铺满&#xff0c;一张图。 2.Sliced…

Python:json.dumps()

json.dumps() 是Python中json模块提供的一个方法&#xff0c;用于将Python对象&#xff08;如字典、列表、字符串等&#xff09;转换为其JSON编码的字符串。其最常用于将Python数据结构转换成JSON格式的数据&#xff0c;这进而可以作为HTTP响应发送给前端&#xff0c;或者保存在…

力扣热门算法题 89. 格雷编码,92. 反转链表 II,93. 复原 IP 地址

89. 格雷编码&#xff0c;92. 反转链表 II&#xff0c;93. 复原 IP 地址&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.24 可通过leetcode所有测试用例。 目录 89. 格雷编码 解题思路 完整代码 Python Java 92. 反转链表…

C++之STL整理(2)之vector超详用法整理

C之STL整理&#xff08;2&#xff09;之vector用法&#xff08;创建、赋值、方法&#xff09;整理 注&#xff1a;整理一些突然学到的C知识&#xff0c;随时mark一下 例如&#xff1a;忘记的关键字用法&#xff0c;新关键字&#xff0c;新数据结构 C 的vector用法整理 C之STL整…

苹果智能戒指专利获批,Find My功能为智能穿戴提供智能防丢

根据美国商标和专利局&#xff08;USPTO&#xff09;近日公示的清单&#xff0c;苹果公司获得了一项关于智能戒指的专利&#xff0c;展示了多种交互手势&#xff0c;不仅支持捏合、画圈等&#xff0c;而且支持玩“石头剪刀布”游戏。 这项新专利名为“皮肤间接触检测”&#xf…