《Modern Robotics》阅读笔记2——刚体的运动(二)

《Modern Robotics》阅读笔记2——刚体的运动(二)

在这篇文章中,主要讲述的是旋转矩阵的内容。

1. 旋转矩阵与特殊正交群(刚体的三维运动表示方法)

旋转矩阵的概念不用再介绍。我们知道,旋转矩阵有9个元素,但其中可以自由选取的元素只有3个,因为旋转矩阵必须满足额外的6个约束,这些约束可以总结为下面的式子:
R T R = I R^TR = I RTR=I
以及:
d e t R = I det R = I detR=I
第二个约束是用于保证旋转矩阵符合右手坐标系的定义。

基于以上这两个约束,有人定义了 特殊正交群(Special Orthogonal Group) 的概念(传说中的李群)。也就是满足上面这两个约束的矩阵组成的集合,详细的定义如下:

所有满足上述两个约束( R T R = I R^TR = I RTR=I d e t R = I det R = I detR=I)的 3 × 3 3\times3 3×3的实矩阵的集合构成特殊正交群 S O ( 3 ) SO(3) SO(3)
所有满足上述两个约束( R T R = I R^TR = I RTR=I d e t R = I det R = I detR=I)的 2 × 2 2\times2 2×2的实矩阵的集合构成特殊正交群 S O ( 2 ) SO(2) SO(2)

实际上,旋转矩阵就属于 S O ( 2 ) SO(2) SO(2) S O ( 3 ) SO(3) SO(3)

特殊正交群的一些性质

假设 A A A B B B都属于特殊正交群:

  • A B AB AB也属于该群
  • ( A B ) C = A ( B C ) (AB)C=A(BC) (AB)C=A(BC)
  • 群内存在一个元素 I I I,使得 A I = I A = A AI=IA=A AI=IA=A成立
  • 群内存在一个元素 A − 1 A^{-1} A1,使得 A A − 1 = A − 1 A = I AA^{-1}=A^{-1}A=I AA1=A1A=I成立
  • 对于任意向量 x ∈ R 3 x \in \mathbb{R}^3 xR3并且 R ∈ S O ( 3 ) R\in SO(3) RSO(3),那么 y = R x y=Rx y=Rx x x x的长度相等(即纯旋转)

2. 旋转矩阵的使用方法

旋转矩阵通常可用作三类用途,下面会一一介绍。
下面这幅图中,定义了三个坐标系,分别是{a}系,{b}系和{c}系。其中{a}系和{s}系是完全对齐的。

在这里插入图片描述

2.1. 一种姿态的表示方法

旋转矩阵可以作为一种姿态表示方法。
假设我们已经将{s}系看做参考坐标系或者说是惯性坐标系,那么我们可以通过旋转矩阵来表示其他一切坐标系的姿态。
比如,上图中{a}系就可以表示为:
R a = [ 1 0 0 0 1 0 0 0 1 ] R_a = \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{matrix} \right] Ra=100010001
{b}系可以表示为:
R a = [ 0 − 1 0 1 0 0 0 0 1 ] R_a = \left[ \begin{matrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \\ \end{matrix} \right] Ra=010100001
同理,其他坐标系也可以进行类似的表示。
值得注意,严格的写法是 R a = R s a R_a=R_{sa} Ra=Rsa R b = R s b R_b=R_{sb} Rb=Rsb,上面我们省略了下标。

2.2. 一个改变向量表达的参考坐标系的算子

思考一个问题,假设 R b c R_{bc} Rbc表示{c}系在{b}系下的姿态, R a b R_{ab} Rab表示{b}系在{a}系下的姿态,那么如何求{c}系在{a}系下的姿态 R a c R_{ac} Rac呢?
答案是:
R a c = R a b ⋅ R b c R_{ac}=R_{ab} \cdot R_{bc} Rac=RabRbc
其实在上面式子中,我们可以换一种方式解读:
R a c = c h a n g e _ r e f e r e n c e _ f r a m e _ f r o m _ { b } _ t o _ { a } ( R b c ) R_{ac}= change\_reference\_frame\_from\_\{b\}\_to\_\{a\} \left( R_{bc} \right) Rac=change_reference_frame_from_{b}_to_{a}(Rbc)
R a b R_{ab} Rab可以被看成一个算子,它作用在 R b c R_{bc} Rbc上,将 R b c R_{bc} Rbc的参考坐标系从{b}系变成了{a}系。

所以,利用旋转矩阵的这个性质,我们可以改变任意向量的参考坐标系!!!

比如,存在一个向量 p p p p b p_b pb是它在{b}系下的表示,如何得到它在{a}系下的表示呢?
p a = R a b ⋅ p b p_a = R_{ab} \cdot p_b pa=Rabpb

2.3. 一个转动向量的操作

在这里,旋转矩阵被用于转动向量或者坐标系。
为了区别于前面两种用法,我们把旋转矩阵写成如下形式:
R = R o t ( ω ^ , θ ) R=Rot(\hat{\omega},\theta) R=Rot(ω^,θ)
如下图,旋转矩阵用于表示让坐标系 { x ^ , y ^ , z ^ } \{\hat{x},\hat{y},\hat{z}\} {x^,y^,z^}绕着 ω ^ \hat{\omega} ω^轴旋转 θ \theta θ度,变换到 { x ^ ′ , y ^ ′ , z ^ ′ } \{\hat{x}',\hat{y}',\hat{z}'\} {x^,y^,z^}的这个操作。
在这里插入图片描述
其中, ω ^ \hat{\omega} ω^是一个单位向量。

由此又引出了一个新的问题, ω ^ \hat{\omega} ω^是一个向量,它表示在哪个坐标系里,对我们旋转矩阵的表示有影响吗?
答案是肯定的。

在这里插入图片描述

通过上面这幅图,我们来解释这个问题。
假设存在坐标系{s}和{b},我们希望通过将{b}系绕着 ω ^ \hat{\omega} ω^旋转 θ \theta θ度,得到一个新的坐标系。
显而易见,当 ω ^ \hat{\omega} ω^表示在{b}系下,或者表示在{s}系下时,旋转之后的结果肯定不同。比如,绕{b}系的z轴转和绕{s}系的z轴转,最后结果肯定不同。
我们假设绕{s}系下的 ω ^ s \hat{\omega}_s ω^s旋转得到的坐标系是{b’},绕{b}系下的 ω ^ b \hat{\omega}_b ω^b旋转得到的坐标系是{b’’}。我们将{b’}系和{b’’}系表示如下:
R s b ′ = r o t a t e _ b y _ R _ i n _ { s } _ f r a m e ( R s b ) = R ⋅ R s b R_{sb'}= rotate\_by\_R\_in\_\{s\}\_frame\left( R_{sb} \right) = R \cdot R_{sb} Rsb=rotate_by_R_in_{s}_frame(Rsb)=RRsb
R s b ′ ′ = r o t a t e _ b y _ R _ i n _ { b } _ f r a m e ( R s b ) = R s b ⋅ R R_{sb''}= rotate\_by\_R\_in\_\{b\}\_frame\left( R_{sb} \right) = R_{sb} \cdot R Rsb=rotate_by_R_in_{b}_frame(Rsb)=RsbR
其中:
R = R o t ( ω ^ , θ ) = R o t ( ω ^ s , θ ) = R o t ( ω ^ b , θ ) R = Rot(\hat{\omega},\theta)=Rot(\hat{\omega}_s,\theta)=Rot(\hat{\omega}_b,\theta) R=Rot(ω^,θ)=Rot(ω^s,θ)=Rot(ω^b,θ)
ω ^ s = ω ^ b = ω ^ \hat{\omega}_s= \hat{\omega}_b = \hat{\omega} ω^s=ω^b=ω^

下面,我们来解释如何理解上面两个式子。
式子一:
R s b ′ = r o t a t e _ b y _ R _ i n _ { s } _ f r a m e ( R s b ) = R ⋅ R s b R_{sb'}= rotate\_by\_R\_in\_\{s\}\_frame\left( R_{sb} \right) = R \cdot R_{sb} Rsb=rotate_by_R_in_{s}_frame(Rsb)=RRsb
这个式子,为什么 R R R是左乘?
首先, R s b R_{sb} Rsb矩阵的每一列分别是{b}系的x,y,z轴在{s}系下的表示。
其次, R R R表示的是,绕{s}系下的 ω ^ \hat{\omega} ω^轴旋转。我们这里把 R R R看做是一个转动向量的操作。即,将一个{s}系下表示的向量,绕{s}系下的 ω ^ \hat{\omega} ω^旋转,很自然就是左乘。

式子二:
R s b ′ ′ = r o t a t e _ b y _ R _ i n _ { b } _ f r a m e ( R s b ) = R s b ⋅ R R_{sb''}= rotate\_by\_R\_in\_\{b\}\_frame\left( R_{sb} \right) = R_{sb} \cdot R Rsb=rotate_by_R_in_{b}_frame(Rsb)=RsbR
这个式子,为什么 R R R是右乘?
首先, R s b R_{sb} Rsb可以被看做是一个算子,可以将{b}系下的向量,表示到{s}系中去。
其次, R R R表示绕{b}系下的 ω ^ \hat{\omega} ω^轴旋转。所以 R R R中的每一列都代表{b’’}系的x,y,z轴在{b}系下的向量。所以,要将{b}系下的向量转到{s}系上去,自然要用 R s b R_{sb} Rsb R R R

本篇文章结束。

注:为了更好的阅读体验,避免文章过长,原本一章的内容被拆分成了多篇文章。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值