三维空间的刚体运动

旋转矩阵

点,向量,坐标系

刚体不光有位置,还有自身的姿态.位置是指刚体在空间中的哪个地方,姿态是指刚体的朝向.


欧式变换

相机运动是一个刚体运动,它保证了同一个向量在各坐标系下的长度和夹角都不会发生变化,这种变换称为欧式变换.
假设有一组正交基为(e_1,e_2,e_3)下某个向量的值为 [a_1,a_2,a_3]^T,
那么在(e_1',e_2',e_3')下,这个向量的坐标为[a_1',a_2',a_3']^T

a=[e_1,e_2,e_3] \left [ \begin{matrix} a_1 \\ a_2 \\ a_3 \end{matrix} \right ] =[e_1',e_2',e_3'] \left [ \begin{matrix} a_1' \\ a_2' \\ a_3' \end{matrix} \right ]
于是有
\left [ \begin{matrix} a_1 \\ a_2 \\ a_3 \end{matrix} \right ]= \left [ \begin{matrix} e_1^Te_1'&e_1^Te_2'&e_1^Te_3' \\ e_2^Te_1'&e_2^Te_2'&e_2^Te_3' \\ e_3^Te_1'&e_3^Te_2'&e_3^Te_3' \end{matrix} \right ] \left [ \begin{matrix} a_1' \\ a_2' \\ a_3' \end{matrix} \right ]\triangleq Ra'

  • \triangleq意思是定义为

在上式中,我们把两组基之间的内积定义为矩阵R,这个矩阵刻画了旋转前后同一个向量的坐标变化关系,只要旋转时一样的,这个矩阵就是一样的,因此我们把R称为旋转矩阵
另外,旋转矩阵是一个行列式为1的正交矩阵,反之亦然.
旋转矩阵的集合叫做特殊正交群群( Special Orthogonal Group) 定义如下:
SO(n)=\{R\in\mathbb{R}^{n\times n}|RR^T=I,det(R)=1\}

上式中,SO(n)是特殊正交群的意思,n为向量的维度,I是单位矩阵.
综上,通过旋转矩阵,我们可以直接谈论两个坐标系之间的旋转变换,而不用再从基开始谈起.也就是说旋转矩阵可以描述相机的旋转.
且由于旋转矩阵为正交矩阵,它的逆和转置相同,故有
a' = R^{-1}a=R^{T}a
所以R^TR的逆运算.

综上,向量a,经过一次旋转(用R描述)和一次平移t之后,得到的a'
a'=Ra+t
其中t为平移向量.


变换矩阵与齐次坐标

假设进行两次变换:R_1,t_1R_2,t_2,满足:
b = R_1a+t_1
c = R_1b+t_1
即向量a变成c为:
c=R_2(R_1a+t_1)+t_2
这样的形式在多次变换后会过于复杂,引入齐次坐标和变换矩阵重写式:
\left [ \begin{matrix} a'\\ 1 \end{matrix} \right ] = \left [ \begin{matrix} R&t\\ 0^T&1 \end{matrix} \right ] \left [ \begin{matrix} a\\ 1 \end{matrix} \right ] \triangleq T \left [ \begin{matrix} a\\ 1 \end{matrix} \right ]
可以看到,我们在三维向量a末尾加上了1,使其变成了四维向量,称为齐次坐标^*.

T称为变换矩阵:左上角为旋转矩阵R,右上角为平移t

a的齐次坐标用\tilde a

有:
\tilde b = T_1\tilde a

\tilde c=T_2\tilde b
于是有
\tilde c = T_1T_2\tilde a

另外,在不致歧义的情况下,我们一般不区分齐次坐标和非齐次坐标的写法^{**},也就是说,上式可以写成
c = T_1T_2a

对于变换T,具有特殊结构:左上角为旋转矩阵R,右上角为平移向量t,左下角为0,右下角为1,这种矩阵又称为特殊欧式群(Special Euclidean Grop):
SE(3)= \left \{ T = \left [ \begin{matrix} R&t\\ 0^T& 1 \end{matrix} \right ] \in \mathbb{R}^{4\times 4}|R\in SO(3),t\in \mathbb R \right \}

T的逆为:
T^{-1}= \left [ \begin{matrix} R^T&-R^Tt\\ 0^T&1 \end{matrix} \right ]

*: 齐次坐标,通过添加最后一维,我们用四个实数描述了一个三维向量,这显然多了一个自由度,齐次坐标中,某个点乘以一个常数k,得到的向量与原来相同,也就说[1,1,1,1]^T=[2,2,2,2]^T,所以,但最后一项不为1时,我们可以将所有数除以最后一项,以获得标准坐标.
**:当我们使用Ta时,默认是齐次坐标;当使用Ra时,默认是非齐次坐标.


旋转向量和欧拉角

刚体旋转自由度:一一个刚体在空间任意运动时,可分解为质心O的平动和绕通过质心轴的转动

  • 平动自由度:确定到质心的位置,需要三个坐标(x,y,z)
  • 转动自由度: (\alpha,\beta,\gamma)\三个正交的坐标轴上的旋转

旋转矩阵有9个量(3x3矩阵),却只能表达物体的旋转(3个自由度),也就是说:SO(3)的旋转矩阵有9个量,但每次旋转只有3个自由度;
同理,SE(3)有16个变量,可以表达6个自由度(旋转,平移).
综上,我们想知道有没有更紧凑的表达方式.


旋转向量

任意一个旋转,都可以用一个旋转轴和一个旋转角来刻画.于是,我们可以使用一个向量,其方向和旋转轴一致,而长度等于旋转角.这种向量称为旋转向量.(旋转轴过质心)
对于旋转矩阵,这种表示法只需要一个三维向量即可描述旋转.
同样的,对于变换矩阵,我们是有一个旋转向量和一个平移向量即可表示一个变换,此时正好为6维.

所以,旋转向量可以如下表示:
\theta n
其中,n为单位旋转轴,\theta为旋转角度.

旋转向量-->旋转矩阵

旋转向量\theta n和旋转矩阵R的转换叫做罗德里格斯公式:
R = \cos\theta I +(1-\cos\theta)nn^T+\sin\theta n^\wedge
其中I是单位矩阵,\wedge是向量到反对称的转换符.\wedge的定义如下:
a\times b = \left [ \begin{matrix} i&j&k\\ a_1&a_2&a_3\\ b_1&b_2&b_3 \end{matrix} \right ]= \left [ \begin{matrix} a_2b_3-a_3b_2\\ a_3b_1-a_1b_3\\ a_1b_2-a_2b_1 \end{matrix} \right ]= \left [ \begin{matrix} 0&-a_3&a_2\\ a_3&0&-a_1\\ -a_2&a_1&0 \end{matrix} \right ]b \triangleq a^{\wedge}b

旋转矩阵-->旋转向量
\theta = \arccos(\frac{tr(R)-1}{2})
tr(R)是矩阵R的迹.

关于旋转轴,由于旋转轴向量n在经过旋转R之后,不发生改变,于是有:
Rn=n
根据线性代数的知识,我们可以得出转轴n是矩阵R特征值为1的特征向量.


欧拉角

无论是旋转矩阵,还是旋转向量都能描述旋转.但是,对人类却十分不直观.

欧拉角提供一种非常直观的方式来描述旋转--使用3个分离的转角,把一个旋转分解成3次绕不同轴的旋转.
航空中的偏航角,就是ZYX旋转

  • 绕物体Z轴旋转,偏航角,yaw
  • 旋转之后的Y轴旋转,俯仰角,pitch
  • 旋转之后的X轴旋转,滚动角,roll

此时,可以用[r,p,y]^T这样一个三维向量来描述任意旋转.
不同的欧拉叫是按照旋转轴的顺序来称呼的.

欧拉角具有奇异性问题,也就是万向锁问题:在俯仰角pitch为\pm 90时,第一次旋转yaw与第三次roll将使用同一个轴,使得系统丢失一个自由度.
所以,欧拉角不适于插值和迭代,往往只用于人机交互.


四元数

旋转矩阵使用9个量描述3个自由度旋转,具有冗余性;欧拉角和旋转向量是紧凑的,但是具有奇异性;

事实上,我们找不到不带奇异性的三维向量描述方式.

在表达三维空间的旋转的时候,有一种类似于复数的代数:四元数.四元数是一种扩展复数,它即是紧凑的,又是没有奇异性的.虽然,四元数不够直观,计算也较为复杂.

一个四元数q拥有一个实部和三个虚部,下面式子把实部写在前面(有的写在后面):
q = q_0+q_1i+q_2j+q_3k
i,j,k为四元数的三个虚部,满足:
\left \{ \begin{aligned} i^2 = j^2=k^2=-1 \\ij=k,ji=-k \\jk=i,kj=-i\\ ki=j,ik=-j \end{aligned} \right .

由于它的这种特殊表现形式,有时人们也用一个标量和一个向量来表示四元数.
q = [s,v]
其中
s=q_0\in \mathbb{R},v=[q_1,q_2,q_3]^T\in \mathbb{R}^3
这里s称为四元数的实部,v称为虚部.
如果一个四元数的虚部为0,那么为实四元数,反之为虚四元数.
假设某个旋转是绕单位向量n=[n_x,n_y,n_z]^T进行了角度为\theta的旋转,那么该旋转的四元数表示为:
q = [\cos\frac{\theta}{2},n_x\sin\frac{\theta}{2},n_y\sin\frac{\theta}{2},n_z\sin\frac{\theta}{2}]^T

反之,从单位四元数中可以计算出对应的旋转轴和夹角:
\left \{ \begin{aligned} \theta = 2\arccos{q_0}\\ [n_x,n_y,n_z]^T = \frac{[q_1,q_2,q_3]^T}{\sin\frac{\theta}{2}} \end{aligned} \right .
上式给我们一种"转了一半"的感觉,事实上,任意旋转都可以由两个互为相反数的四元数表示,同理,取\theta为0,得到一个没有任何旋转的四元数:
q_0=[\pm 1,0,0,0]^T

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 三维刚体运动,由平移和旋转构成。平移简单,旋转就麻烦些了。这一章的重点就是描述旋转,设计核心概念为:旋转矩阵,变换...
    mjwz5294阅读 3,030评论 0 1
  • 1 前言 OpenGL渲染3D模型离不开空间几何的数学理论知识,而本篇文章的目的就是对空间几何进行简单的介绍,并对...
    RichardJieChen阅读 6,911评论 1 11
  • 作为备用知识,memo 学过矩阵理论或者线性代数的肯定知道正交矩阵(orthogonal matrix)是一个非常...
    HappyPieBinLiu阅读 5,734评论 0 5
  • 概述 又研究了将近两个星期的3D图形到了我最想研究的地方了,因为欧拉角与四元数的原因导致OpenGL ES的研究进...
    神经骚栋阅读 7,739评论 12 40
  • 欧拉角和四元数 笔记主要摘自下列博文和回答中 如何通俗地解释欧拉角?之后为何要引入四元数? - 知乎 【Unity...
    一只浩阅读 1,049评论 0 0