自动驾驶中常见的位姿表示和坐标系问题

举报
Hermit_Rabbit 发表于 2022/11/29 22:04:15 2022/11/29
【摘要】 0. 简介在自动驾驶中,我们常常会面对这线性代数位姿表示和坐标系变换问题。之前作者陆陆续续写了一些 1. 线性代数位姿 1.1 矩阵伴随RTexp⁡(p∧)R=exp⁡((RTp)∧)⇒exp⁡(p∧)R=Rexp⁡((RTp)∧)\begin{aligned} \boldsymbol{R^\mathrm{T}}\exp{(\boldsymbol{p}^\wedge)}\boldsy...

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}

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 ( 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 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}

1.3 四元数与时间

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

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

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

对时间求导:当旋转一段微小时间时,旋转经过角度可以视为趋于 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}

其中, δ θ \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}

上式中, ω = lim Δ t 0 δ θ Δ t \boldsymbol{\omega} = \lim_{\Delta t \rightarrow 0}\frac{\delta\boldsymbol{\theta}}{\Delta{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}

从旋转矩阵到旋转向量的过程可以利用矩阵迹(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}

1.5 李群李代数扰动

李群( S O ( 3 ) SO(3) )对应的李代数 ( ϕ 1 , ϕ 2 ) (\boldsymbol{\phi}_1, \boldsymbol{\phi}_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}

当我们对一个旋转 R \boldsymbol{R} 左乘或者右乘一个扰动 Δ R \Delta\boldsymbol{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}

而反过来,当我们对一个李代数 ϕ \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}

1.6 李群累加

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

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

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

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

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

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

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

2.1 摄像头坐标系

…详情请参照古月居

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。