IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 自动驾驶中常见的位姿表示和坐标系问题 -> 正文阅读

[人工智能]自动驾驶中常见的位姿表示和坐标系问题

0. 简介

在自动驾驶中,我们常常会面对这线性代数位姿表示和坐标系变换问题。之前作者陆陆续续写了一些

1. 线性代数位姿

1.1 矩阵伴随

R T exp ? ( p ∧ ) R = exp ? ( ( R T p ) ∧ ) ? exp ? ( p ∧ ) R = R exp ? ( ( R T p ) ∧ ) \begin{aligned} \boldsymbol{R^\mathrm{T}}\exp{(\boldsymbol{p}^\wedge)}\boldsymbol{R} &= \exp{((\boldsymbol{R^\mathrm{T}p})^\wedge)} \\ \Rightarrow\exp{(\boldsymbol{p}^\wedge)}\boldsymbol{R} &= \boldsymbol{R}\exp{((\boldsymbol{R^\mathrm{T}p})^\wedge)} \end{aligned} RTexp(p)R?exp(p)R?=exp((RTp))=Rexp((RTp))?

1.2 四元数实部和虚部

一个标量和一个矢量来表示四元数就会如下图所示,这样会便于我们计算四元数之间的累乘变换
q = [ q 0 q 1 q 2 q 3 ] T = [ w x y z ] T = [ s v ] T \begin{aligned} \boldsymbol{q} &= \begin{bmatrix} q_0 & q_1 & q_2 & q_3 \end{bmatrix}^T \\ &= \begin{bmatrix} w & x & y & z \end{bmatrix}^T \\ &= \begin{bmatrix} s & \boldsymbol{v} \end{bmatrix}^T \end{aligned} q?=[q0??q1??q2??q3??]T=[w?x?y?z?]T=[s?v?]T?
乘法运算中,向量的计算方法比较容易记忆,相乘后实部为两实部相乘减去两虚部正交,虚部为两个四元数和实部和虚部交叉相乘的和加上虚部的叉积。连续旋转两个角度可以用这两个旋转对应的四元数的乘积来表示,即 q ( t 1 + t 2 ) = q ( t 1 ) q ( t 2 ) \boldsymbol{q}(t_1+t_2) = \boldsymbol{q}(t_1)\boldsymbol{q}(t_2) q(t1?+t2?)=q(t1?)q(t2?)
q a ? q b = q ( a ) q ( b ) = ? ? w a w b ? x a x b ? y a y b ? z a z b + ( w a x b + x a w b + y a z b ? z a y b ) i + ( w a y b ? x a z b + y a w b + z a x b ) j + ( w a z b + x a y b ? y a x b + z a w b ) k = [ s a s b ? v a T v b T s a v b + s b v a + v a × v b ] \begin{aligned} \boldsymbol{q}_a \otimes \boldsymbol{q}_b = \boldsymbol{q}(a)\boldsymbol{q}(b) =& \quad\, \ w_aw_b - x_ax_b - y_ay_b - z_az_b \\ &+ (w_ax_b + x_aw_b + y_az_b - z_ay_b)i \\ &+ (w_ay_b - x_az_b + y_aw_b + z_ax_b)j \\ &+ (w_az_b + x_ay_b - y_ax_b + z_aw_b)k \\ =&\begin{bmatrix} s_as_b - \boldsymbol{v}_a^T\boldsymbol{v}_b^T & s_a\boldsymbol{v}_b + s_b\boldsymbol{v}_a + \boldsymbol{v}_a\times \boldsymbol{v}_b \end{bmatrix} \end{aligned} qa??qb?=q(a)q(b)==??wa?wb??xa?xb??ya?yb??za?zb?+(wa?xb?+xa?wb?+ya?zb??za?yb?)i+(wa?yb??xa?zb?+ya?wb?+za?xb?)j+(wa?zb?+xa?yb??ya?xb?+za?wb?)k[sa?sb??vaT?vbT??sa?vb?+sb?va?+va?×vb??]?

1.3 四元数与时间

我们说四元数是除了旋转矩阵以外的另一种对旋转表达方式,并且它不具备奇异性,可以表达任意三维旋转,因此有必要学习一下它对时间的求导方式。

首先来看四元数和角轴的转换关系,假设某个旋转运动的旋转轴为单位向量 u \boldsymbol{u} u, 绕该轴旋转的角度为 θ \theta θ 那这个旋转的对应的四元数可表示为:

q = [ cos ? θ 2 u sin ? θ 2 ] \boldsymbol{q} = \begin{bmatrix} \cos{\frac{\theta}{2}} \\ \boldsymbol{u}\sin{\frac{\theta}{2}} \end{bmatrix} q=[cos2θ?usin2θ??]

对时间求导:当旋转一段微小时间时,旋转经过角度可以视为趋于 0 0 0 ,因此上述四元数为:

Δ q = [ cos ? θ 2 u sin ? θ 2 ] ≈ [ 1 u δ θ 2 ] = [ 1 1 2 δ θ ] \begin{aligned} \Delta \boldsymbol{q} &= \begin{bmatrix} \cos{\frac{\theta}{2}} \\ \boldsymbol{u}\sin{\frac{\theta}{2}} \end{bmatrix} \\ &\approx \begin{bmatrix} 1 \\ \boldsymbol{u}\frac{\delta \theta}{2} \end{bmatrix} \\ &= \begin{bmatrix} 1 \\ \frac{1}{2} \delta\boldsymbol{\theta} \end{bmatrix} \end{aligned} Δq?=[cos2θ?usin2θ??][1u2δθ??]=[121?δθ?]?

其中, δ θ \delta\boldsymbol{\theta} δθ 的方向为旋转轴,模长为(这段时间内非常微小的)旋转角度。

下面对时间求导:

q ˙ = lim ? Δ t → 0 q ( t + Δ t ) ? q ( t ) Δ t = lim ? Δ t → 0 q ( t ) ? q ( Δ t ) ? q ( t ) Δ t = lim ? Δ t → 0 q ? Δ q ? q Δ t = lim ? Δ t → 0 q ? ( [ 1 1 2 δ θ ] ? [ 1 0 ] ) Δ t = q ? lim ? Δ t → 0 ( [ 0 1 2 δ θ ] ) Δ t = q ? [ 0 1 2 ω ] \begin{aligned} \dot{\boldsymbol{q}} &= \lim_{\Delta t \rightarrow 0}\frac{\boldsymbol{q}(t+\Delta{t})- \boldsymbol{q}(t)}{\Delta{t}} \\ &= \lim_{\Delta t \rightarrow 0}\frac{\boldsymbol{q}(t)\otimes\boldsymbol{q}(\Delta{t})- \boldsymbol{q}(t)}{\Delta{t}} \\ &= \lim_{\Delta t \rightarrow 0}\frac{\boldsymbol{q}\otimes\Delta\boldsymbol{q}- \boldsymbol{q}}{\Delta{t}} \\ &= \lim_{\Delta t \rightarrow 0}\frac{\boldsymbol{q}\otimes( \begin{bmatrix} 1 \\ \frac{1}{2}\delta\boldsymbol{\theta} \end{bmatrix} - \begin{bmatrix} 1 \\ \boldsymbol{0} \end{bmatrix})}{\Delta{t}} \\ &= \boldsymbol{q}\otimes\lim_{\Delta t \rightarrow 0}\frac{( \begin{bmatrix} 0 \\ \frac{1}{2}\delta\boldsymbol{\theta} \end{bmatrix} )}{\Delta{t}} \\ &= \boldsymbol{q}\otimes\begin{bmatrix} 0 \\ \frac{1}{2}\boldsymbol{\omega} \end{bmatrix} \end{aligned} q˙??=Δt0lim?Δtq(t+Δt)?q(t)?=Δt0lim?Δtq(t)?q(Δt)?q(t)?=Δt0lim?Δtq?Δq?q?=Δt0lim?Δtq?([121?δθ?]?[10?])?=q?Δt0lim?Δt([021?δθ?])?=q?[021?ω?]?

上式中, ω = lim ? Δ t → 0 δ θ Δ t \boldsymbol{\omega} = \lim_{\Delta t \rightarrow 0}\frac{\delta\boldsymbol{\theta}}{\Delta{t}} ω=limΔt0?Δtδθ? 是求导时间的角速度。

1.4 旋转矩阵和旋转向量

从旋转向量到旋转矩阵基本就是通过罗德里格斯公式表明:

R = cos ? θ I + ( 1 ? cos ? θ ) n n T + sin ? θ n ∧ \boldsymbol{R} = \boldsymbol{\mathrm{\cos{\theta}}I + \mathrm{(1-\cos{\theta})}nn^\mathrm{T} + \mathrm{\sin{\theta}}n^\wedge} R=cosθI+(1?cosθ)nnT+sinθn

从旋转矩阵到旋转向量的过程可以利用矩阵迹(trace)的性质进行推导:

t r ( R ) = cos ? θ ? t r ( I ) + ( 1 ? cos ? θ ) ? t r ( n n ) T + sin ? θ ? n ∧ = 3 cos ? θ + ( 1 ? cos ? θ ) = 1 + 2 cos ? θ ? θ = arccos ? t r ( R ) ? 1 2 \begin{aligned} \mathrm{tr}(\boldsymbol{R}) &= \boldsymbol{\mathrm{\cos{\theta}\ tr}(I) + \mathrm{(1-\cos{\theta})\ tr}(nn)^\mathrm{T} + \mathrm{\sin{\theta}}\ n^\wedge} \\ &= 3\cos{\theta} + (1 - \cos{\theta}) \\ &= 1 + 2\cos{\theta} \\ \Rightarrow \theta &= \arccos{\frac{\mathrm{tr}(\boldsymbol{R}) - 1}{2}} \end{aligned} tr(R)?θ?=cosθ?tr(I)+(1?cosθ)?tr(nn)T+sinθ?n=3cosθ+(1?cosθ)=1+2cosθ=arccos2tr(R)?1??

1.5 李群李代数扰动

李群( S O ( 3 ) SO(3) SO(3))对应的李代数 ( ? 1 , ? 2 ) (\boldsymbol{\phi}_1, \boldsymbol{\phi}_2) (?1?,?2?)的指数映射时。并且两个李代数其中有一个为小量时,二次项以上的小量都可以忽略。此时, BCH 公式有以下线性形式:

ln ? ( exp ? ( ? 1 ∧ ) exp ? ( ? 2 ∧ ) ) ∨ ≈ { J l ( ? 2 ) ? 1 ? 1 + ? 2 当 ? 1 为 小 量 J r ( ? 1 ) ? 1 ? 2 + ? 1 当 ? 2 为 小 量 \ln{(\exp(\boldsymbol{\phi}_1^\wedge)\exp{(\boldsymbol{\phi}_2^\wedge))}}^\vee \approx\begin{cases} \boldsymbol{J}_l(\boldsymbol{\phi}_2)^{-1}\boldsymbol{\phi}_1 + \boldsymbol{\phi}_2\qquad \mathrm{当\phi_1 为小量} \\ \boldsymbol{J}_r(\boldsymbol{\phi}_1)^{-1}\boldsymbol{\phi}_2 + \boldsymbol{\phi}_1\qquad \mathrm{当\phi_2 为小量} \end{cases} ln(exp(?1?)exp(?2?)){Jl?(?2?)?1?1?+?2??1?Jr?(?1?)?1?2?+?1??2??
当我们对一个旋转 R \boldsymbol{R} R左乘或者右乘一个扰动 Δ R \Delta\boldsymbol{R} ΔR时,BCH 近似过程可以表示为:

exp ? ( Δ ? ∧ ) exp ? ( ? ∧ ) ) = exp ? ( ( ? + J l ? 1 ( ? ) Δ ? ) ∧ ) exp ? ( Δ ? ∧ ) exp ? ( ? ∧ ) ) = exp ? ( ( ? + J r ? 1 ( ? ) Δ ? ) ∧ ) \begin{aligned} \exp{(\Delta \boldsymbol{\phi}^\wedge)}\exp{(\boldsymbol{\phi}^\wedge))} &= \exp{((\boldsymbol{\phi}+J_l^{\mathrm{-1}}(\phi)\Delta\phi})^\wedge) \\ \exp{(\Delta \boldsymbol{\phi}^\wedge)}\exp{(\boldsymbol{\phi}^\wedge))} &= \exp{((\boldsymbol{\phi}+J_r^{\mathrm{-1}}(\phi)\Delta\phi})^\wedge) \end{aligned} exp(Δ?)exp(?))exp(Δ?)exp(?))?=exp((?+Jl?1?(?)Δ?))=exp((?+Jr?1?(?)Δ?))?

而反过来,当我们对一个李代数 ? \boldsymbol{\phi} ? 加上一个微小扰动 Δ ? \Delta \boldsymbol{\phi} Δ? 时,通过 BCH 可以近似为:

exp ? ( ( ? + Δ ? ) ∧ ) = exp ? ( J l Δ ? ) ∧ exp ? ( ? ∧ ) = exp ? ( ? ∧ ) exp ? ( J r Δ ? ) ∧ \begin{aligned} \exp{(\boldsymbol{(\phi + \Delta\phi)}^\wedge)} &= \exp{\boldsymbol{(J_l\Delta\phi)^\wedge}}\exp{(\boldsymbol{\phi}^\wedge)} \\ &= \exp{(\boldsymbol{\phi}^\wedge)}\exp{\boldsymbol{(J_r\Delta\phi)^\wedge}} \end{aligned} exp((?+Δ?))?=exp(Jl?Δ?)exp(?)=exp(?)exp(Jr?Δ?)?

1.6 李群累加

对于李群而言,由于其没有向量空间上的加法操作,因此为了引入导数的概念,这里用一个映射将局部坐标 ξ \xi ξ 映射到李群元素 a a a 在李群空间附近的邻域上,用来作为李群上的 “加法” 操作,所以常常会使用 ⊕ \oplus 来表示李群的加法,如下所示:

a ⊕ ξ ? a exp ? ( ξ ^ ) a\oplus \xi \triangleq a \exp{(\hat{\xi})} aξ?aexp(ξ^?)

式中, ξ ∈ R n \xi\in\mathbb{R}^n ξRn a a a 系下的局部坐标,这个也是我们所说的极小值右乘的做法,以李群 SO(3) 为例,局部坐标可以表示为 ξ = ω t \xi = \omega t ξ=ωt,其几何意义为以 a a a 作为参考系下的一个角度扰动;

ξ ^ \hat{\xi} ξ^? ξ \xi ξ 的对应李代数,当然也可以像上面表示为 ξ ∧ \xi^{\wedge} ξ

exp ? ξ \exp{\xi} expξ 为李代数到李群的指数映射;

ξ ^ = [ ω t ] × \hat{\xi} = [\omega t]_{\times} ξ^?=[ωt]×? 为李代数,李代数可以转化为反对称矩阵。通过 × _{\times} ×?来表示角度扰动(旋转轴+旋转角度)的旋转向量。

2. 各种传感器默认坐标系

2.1 摄像头坐标系

…详情请参照古月居

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-21 21:26:11  更:2022-06-21 21:28:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 0:42:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码