三维旋转&坐标系变换


旋转三维向量


图中 u 为单位向量,表示转轴。将 x u 逆时针旋转角度 ϕ 得到 x 。可将 x 分解为沿转轴的分量 x 和垂直转轴的分量 x x 在转动时不变, x 在平面上旋转角度 ϕ 得到 x ,可得

(1) x = x + x cos ϕ + ( u × x ) sin ϕ


u × x = [ u ] × x

其中
[ u ] × [ 0 u 3 u 2 u 3 0 u 1 u 2 u 1 0 ]

为反对称矩阵。

那么式 (1) 可写成:

x = u u T x + ( x u u T x ) cos ϕ + [ u ] × x sin ϕ = ( ( 1 cos ϕ ) u u + cos ϕ I + sin ϕ [ u ] × ) x

因此旋转作用可用一个矩阵表示。

旋转群

旋转是线性变换,将 v 变为 r ( v ) 。其保持:

  1. 向量长度
  2. 两向量的内积
  3. 相对方向 u × v = w r ( u ) × r ( v ) = r ( w )

1和2是等价的。1推2可由 r ( u v ) = u v 得到,2推1可由 r ( u ) r ( u ) = u u 得到。

因此可定义旋转群:

S O ( 3 ) : { R 3 R 3 v , w R 3 , r ( v ) = v , r ( v ) × r ( w ) = r ( v × w ) }

旋转矩阵

算符 r 是线性的,可用矩阵 R 表示,

r ( v ) = R v

R v = v ,即
( R v ) ( R v ) = v R R v = v v

可得:
R R = I

即旋转矩阵是正交矩阵。

由旋转性质3,对于向量 u , v , w 组成的六面体,旋转前后的有向体积应该相等,即

| R u R v R w | = det ( R ) | u v w | = | u v w |

det ( R ) = 1

这就构成了 S O ( 3 ) 群(Special Orthogonal group),其中的special就是指 det ( R ) = 1

欧拉定理

是说存在向量 u ,使得旋转前后不变:

R u = u

u 就是转轴方向。

证明:
只要证明 R 有为1的特征值即可。

det ( R I ) = det ( ( R I ) T ) = det ( R T I ) = det ( R 1 R 1 R ) = det ( R 1 ( I R ) ) = det ( R 1 ) det ( ( R I ) ) = det ( R I ) det ( R I ) = 0.

指数映射

d d t ( R T R ) = R ˙ T R + R T R ˙ = 0

得:

R T R ˙ = ( R T R ˙ ) T

R T R ˙ 是反对称矩阵。三维的反对称矩阵集合用 s o ( 3 ) 表示,称为 S O ( 3 ) 的李代数。

那么有

R T R ˙ = [ ω ] ×

得到:
R ˙ = R [ ω ] ×

R = I 时, R ˙ = [ ω ] × ,即李代数是在幺元处的切空间。

如果 ω 为常数,上述方程解得

R ( t ) = R ( 0 ) e [ ω ] × t

其中矩阵的指数按泰勒级数定义。

这称为指数映射:

exp : s o ( 3 ) S O ( 3 ) ; [ ϕ ] × exp ( [ ϕ ] × ) = e [ ϕ ] ×

还可以定义"大写的"指数映射:
Exp : R 3 S O ( 3 ) ; ϕ Exp ( ϕ ) = e [ ϕ ] ×

如果绕转轴 u 转了角度 ϕ ,那么旋转矩阵:
R = e ϕ [ u ] ×

上式按泰勒展开后得:
R = I + sin ϕ [ u ] × + ( 1 cos ϕ ) [ u ] × 2

这就是Rodrigues旋转公式。推导过程用到了
[ a ] × 2 = a a a a I

根据这个式子,又可写成:
(2) R = cos ϕ I + sin ϕ [ u ] × + ( 1 cos ϕ ) u u

这就是式 (1)

R 得到 ϕ u

(2) 可得:

t r ( R ) = 2 cos ϕ + 1

即:
ϕ = arccos ( t r ( R ) 1 2 )

又有

R R T = 2 sin ϕ [ u ] ×

因此
u = ( R R T ) 2 sin ϕ

其中 [ ] × 的逆,即 ( [ v × ] ) = v .

如果 sin ϕ = 0 ,分两种情况:

  1. cos ϕ = 1 ,这时候 R = I ,转轴未定义
  2. cos ϕ = 1 ,这时 R + I = 2 u u T ,这个矩阵的每一列都平行于 u ,只要对非0的一列归一化即可。这时候 u 也满足条件,但是不影响,因为绕 ± u 转180度效果是一样的。

四元数

四元数.md

旋转公式为:

(3) x = q x q

旋转要求
x = x = q 2 x

因此 q 2 = 1 ,即 q 是单位四元数:
q q = 1 = q q

这与 R T R = I = R R T 的条件类似。

还可以看到,自动保持了相对方向:

r ( v ) × r ( w ) = ( q v q ) × ( q w q ) = 1 2 ( ( q v q ) ( q w q ) ( q w q ) ( q v q ) ) = 1 2 ( q v w q q w v q ) = 1 2 ( q ( v w w v ) q ) = q ( v × w ) q = r ( v × w )

其中第2和第5个等号是因为:

p v q v q v p v = 2 p v × q v

指数映射

d ( q q ) d t = q ˙ q + q q ˙ = 0

得:

q q ˙ = ( q ˙ q ) = ( q q ˙ )

q q ˙ 是虚四元数。令:
q q ˙ = Ω

两边左乘 q ,得到:
q ˙ = q Ω

q = 1 时, q ˙ = Ω ,可见虚四元数构成了单位四元数球 S 3 的切空间。

如果 Ω 为常数,上式解得 q ( t ) = q ( 0 ) e Ω t (可代回验证),这就引出了指数映射。

如果绕转轴 u 转了角度 ϕ ,定义“大写的”指数映射:

(4) q Exp ( ϕ u ) = e ϕ u / 2 = cos ϕ 2 + u sin ϕ 2

旋转作用

将式 (4) 代入式 (3) , 推导可得式 (1) ,这就验证了 (3) 的正确性。

在证明中有一步 u x u = x ( u T u ) 2 u ( u T x ) 用到了 ( a × b ) × c = a ( c b ) + b ( c a )

四元数到旋转矩阵的转换


q x q = [ q ] R [ q ] L [ 0 x ] = [ 0 R x ]

可以得到:
R = ( q w 2 q v q v ) I + 2 q v q v + 2 q w [ q v ] ×

旋转合成

假设旋转2作用于旋转1之后。

对于旋转矩阵,

R 2 ( R 1 x ) = ( R 2 R 1 ) x

对于四元数,
q 2 ( q 1 x q 1 ) q 2 = ( q 2 q 1 ) x ( q 2 q 1 )

因此,后旋转的都是乘在左边。


坐标系变换

方向余弦矩阵(DCM)

用G表示global,或者n系;L表示local,或者b系。

r G , r L 分别为向量 r 在坐标系 G L 中的坐标,由

r = ( i G j G k G ) r G = ( i L j L k L ) r L

得:

r G = ( i G j G k G ) ( i L j L k L ) r L R G L r L

表示从 L G 的坐标变换。

R G L 的定义还可得基变换:

( i L j L k L ) = ( i G j G k G ) R G L

对于一个与 L 系固连的向量 r ,经过主动旋转 R ,得到 r ,那么:

r G = R r G

r L = r G ,因此
r G = R r L

而按定义:
r G = R G L r L

因此坐标变换矩阵与主动旋转矩阵 R 的关系是:
R G L = R

欧拉角

intrinsic rotation是指绕当前坐标系(而不是某个固定坐标系)的轴转动。

G 绕某轴逆时针旋转 θ ,得到 L 。对于 R L G ,根据定义得出如下结果1

X 轴旋转

R x = [ 1 0 0 0 c θ s θ 0 s θ c θ ]

Y 轴旋转
R y = [ c θ 0 s θ 0 1 0 s θ 0 c θ ]

Z 轴旋转
R z = [ c θ s θ 0 s θ c θ 0 0 0 1 ]

如果按 Z Y X 的顺序转动,
R L G = R x R y R z = [ c y c z c y s z s y s x s y c z c x s z s x s y s z + c x c z s x c y c x s y c z + s x s z c x s y s z s x c z c x c y ]

可得欧拉角和DCM的转换关系:
tan ( θ z ) = R 12 R 11 sin ( θ y ) = R 13 tan ( θ x ) = R 23 R 33

若是小角度转动,
(5) R = [ 1 θ z θ y θ z 1 θ x θ y θ x 1 ] = I [ θ ] ×

可见小角度转动与转动顺序无关(即只与绕XYZ各轴转过的角度有关。如果只有俩轴,比如Z->X->Z,那么未出现的轴角度为0,出现两次的轴的角度相加),等效于一次转动:角度为 θ = θ x 2 + θ y 2 + θ z 2 ,转轴为 1 θ ( θ x θ y θ z ) ,也可以从Rodrigues旋转公式做小角近似看出来:
R L G = R T I ϕ [ u ] ×

Extrinsic rotation

设固定坐标系为 A 。坐标系 B A u 轴转动角度 ϕ ,这个转动用 R ϕ u 表示,得坐标系 C 。求 R C A

首先

R C A = R B D

其中 D A u 轴转动角度 ϕ 得到。这个结论对于二维转动很直观,对于三维其实也容易看出。按定义,只要证明两对坐标系的基的内积相等即可。把基分解到平行于转轴和垂直于转轴。平行部分的内积显然不变,垂直部分由二维情况可知也不变,且平行于垂直部分内积为0。因此得证。
R B D = R B A R A D = R B A R D A 1 = R B A R ϕ u 1 = R B A R ϕ u

因此得到结论,绕固定坐标系的轴转动, R 是乘在右边的。

四元数

和DCM类比有

(6) x G = q G L x L q G L

其中 q G L 等于主动旋转 q

运动方程

推导的要点是从当前 L 系做扰动得到新的 L 系,而陀螺仪的测量值刚好是在角速度在 L 系的值。

四元数

(6) 可得, q G L 2 = q G L 1 q L 1 L 2 ,即扰动是乘在右边的(L表示local):

q ( t + Δ t ) = q ( t ) Δ q L = q ( t ) Exp ( Δ ϕ L )

q ˙ lim Δ t 0 q ( t + Δ t ) q ( t ) Δ t = lim Δ t 0 q Δ q q Δ t = lim Δ t 0 q ( [ cos Δ ϕ 2 u sin Δ ϕ 2 ] [ 1 0 ] ) Δ t = lim Δ t 0 q ( [ 1 Δ ϕ / 2 ] [ 1 0 ] ) Δ t ( ) = lim Δ t 0 q [ 0 Δ ϕ / 2 ] Δ t = 1 2 q ω L

方向余弦矩阵

(5) 得:

R L 2 L 1 = I [ θ ] ×

因此
R L 1 L 2 = R L 2 L 1 T = I + [ θ ] ×

R G L 2 = R G L 1 R L 1 L 2 ,推导可得:
R ˙ G L = R G L [ ω L ] ×

参考资料

Quaternion kinematics for the error-state Kalman filter


  1. s θ 放置位置记忆方法:放在转动轴的上一列(循环)。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM