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

本文深入探讨旋转矩阵及其在刚体运动中的应用,包括特殊正交群的概念、旋转矩阵的性质及其实现向量坐标变换的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

所有满足上述两个约束(RTR=IR^TR = IRTR=IdetR=Idet R = IdetR=I)的3×33\times33×3的实矩阵的集合构成特殊正交群SO(3)SO(3)SO(3)
所有满足上述两个约束(RTR=IR^TR = IRTR=IdetR=Idet R = IdetR=I)的2×22\times22×2的实矩阵的集合构成特殊正交群SO(2)SO(2)SO(2)

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

特殊正交群的一些性质

假设AAABBB都属于特殊正交群:

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

2. 旋转矩阵的使用方法

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

在这里插入图片描述

2.1. 一种姿态的表示方法

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

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

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

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

比如,存在一个向量ppppbp_bpb是它在{b}系下的表示,如何得到它在{a}系下的表示呢?
pa=Rab⋅pbp_a = R_{ab} \cdot p_bpa=Rabpb

2.3. 一个转动向量的操作

在这里,旋转矩阵被用于转动向量或者坐标系。
为了区别于前面两种用法,我们把旋转矩阵写成如下形式:
R=Rot(ω^,θ)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’’}系表示如下:
Rsb′=rotate_by_R_in_{s}_frame(Rsb)=R⋅RsbR_{sb'}= rotate\_by\_R\_in\_\{s\}\_frame\left( R_{sb} \right) = R \cdot R_{sb}Rsb=rotate_by_R_in_{s}_frame(Rsb)=RRsb
Rsb′′=rotate_by_R_in_{b}_frame(Rsb)=Rsb⋅RR_{sb''}= rotate\_by\_R\_in\_\{b\}\_frame\left( R_{sb} \right) = R_{sb} \cdot RRsb=rotate_by_R_in_{b}_frame(Rsb)=RsbR
其中:
R=Rot(ω^,θ)=Rot(ω^s,θ)=Rot(ω^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=ω^

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

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

本篇文章结束。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值