| |
|
开发:
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 四元数实部和虚部一个标量和一个矢量来表示四元数就会如下图所示,这样会便于我们计算四元数之间的累乘变换 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˙??=Δt→0lim?Δtq(t+Δt)?q(t)?=Δt→0lim?Δtq(t)?q(Δt)?q(t)?=Δt→0lim?Δtq?Δq?q?=Δt→0lim?Δtq?([121?δθ?]?[10?])?=q?Δt→0lim?Δt([021?δθ?])?=q?[021?ω?]? 上式中, ω = lim ? Δ t → 0 δ θ Δ t \boldsymbol{\omega} = \lim_{\Delta t \rightarrow 0}\frac{\delta\boldsymbol{\theta}}{\Delta{t}} ω=limΔt→0?Δ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?为小量? 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 摄像头坐标系…详情请参照古月居 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |