一文搞懂旋转矩阵


三维旋转矩阵的应用比较广泛,在姿态控制等领域具有重要的应用价值。网上有不少讲解三维矩阵旋转的文章,但大多数文章只是机械地描述旋转矩阵的形式和坐标的转换关系,记忆点比较多,而且过于强调不同情况下旋转矩阵的差异,容易引发记忆混乱。因此笔者根据自身的试验和堆旋转矩阵的理解,重新整理成了这篇文章。本文整理了物体绕固定坐标轴旋转、物体绕自身坐标系旋转、坐标系旋转和物体绕任意轴旋转等多种情况,力求全面地讲解各种不同情况下的旋转矩阵计算。
众所周知,三维旋转矩阵问题分为物体旋转和坐标系旋转两者,坐标系旋转又可以分为物体随坐标系转动和物体不随转动两种情况。为了方便理解,我们还是从最简单的情况说起,并逐步推导复杂的情况。

第一部分 基础概念

形如下图所示的三维坐标系,我们称之为符合右手定则的坐标系:
右手坐标系

所谓“符合右手定则”,是指手四根手指由X转向Y时,大拇指方向与Z轴正方向一致。
对于该坐标系内的任意一点,用列向量的方式描述为:
P 0 = [ x 0 y 0 z 0 ] P_{0}=\begin{bmatrix}x_0\\y_0\\z_0\end{bmatrix} P0= x0y0z0
首先分析单轴运动的情况,也就是物体分别绕坐标轴XYZ旋转。在旋转前,首先要知道向哪个方向旋转为向正方向旋转,根据右手定则:当右手大拇指与某一条坐标轴重合时,四根手指弯曲的方向就是旋转的正方向。
同时在描述角速度的方向时,也可以用到右手定则,即大拇指指向的方向,就是该旋转方向的角速度。比如位于XOY平面上的某点,从X轴向Y轴方向旋转,那么他的角速度方向就是Z轴的方向。

第二部分:物体绕单轴旋转的旋转矩阵推导

让我们从最简单的情况——单轴旋转说起,为了简化分析,首先分析位于三个基准正交平面上的物体是怎么旋转的。
对于绕X轴旋转,其旋转平面为ZOY平面,如下图所示,其旋转方向为由Y轴向Z轴旋转的方向
在这里插入图片描述
该平面内的物体沿正方向旋转的示意图如下图
在这里插入图片描述
对于绕Y轴旋转,其旋转平面为ZOX平面,如下图所示,旋转方向为由Z轴指向X轴
在这里插入图片描述
该平面内的物体沿正方向旋转的示意图如下图所示
在这里插入图片描述
对于绕Z轴旋转,旋转平面为XOY平面,旋转方向为X轴转向Y轴
在这里插入图片描述
该平面内物体沿正方向旋转的示意图如下图所示
在这里插入图片描述
上图中初始位置和旋转角度非常明确,转换为极坐标系求解可以很容易的求出物体的旋转矩阵:
对于绕X轴向旋转的情况
利用极坐标系进行分析,显然有
y 1 = r c o s ( γ + γ 0 ) = r ( c o s γ c o s γ 0 − s i n γ s i n γ 0 ) = r c o s γ 0 c o s γ − r s i n γ 0 s i n γ = y 0 c o s γ − z 0 s i n γ y_1=rcos(\gamma+\gamma_0) \\=r(cos\gamma cos\gamma_0 - sin\gamma sin\gamma_0) \\=rcos\gamma_0 cos\gamma - rsin\gamma_0 sin\gamma \\=y_0cos\gamma-z_0sin\gamma y1=rcos(γ+γ0)=r(cosγcosγ0sinγsinγ0)=rcosγ0cosγrsinγ0sinγ=y0cosγz0sinγ
z 1 = r s i n ( γ + γ 0 ) = r ( s i n γ c o s γ 0 + c o s γ s i n γ 0 ) = y 0 s i n γ + z 0 z_1=rsin(\gamma+\gamma_0) \\=r(sin\gamma cos\gamma_0+cos\gamma sin\gamma_0) \\=y_0sin\gamma+z_0 z1=rsin(γ+γ0)=r(sinγcosγ0+cosγsinγ0)=y0sinγ+z0
写成矩阵的模式则有
[ y 1 z 1 ] = [ c o s γ − s i n γ s i n γ c o s γ ] [ y 0 x 0 ] \begin{bmatrix}y_1\\z_1\end{bmatrix}=\begin{bmatrix}cos\gamma&-sin\gamma\\ sin\gamma&cos\gamma\end{bmatrix}\begin{bmatrix}y_0\\x_0\end{bmatrix} [y1z1]=[cosγsinγsinγcosγ][y0x0]
我们将其扩充为三维,显然绕X轴旋转时X轴的坐标是不变的,于是有
[ x 1 y 1 z 1 ] = [ 1 0 0 0 c o s γ − s i n γ 0 s i n γ c o s γ ] [ x 0 y 0 z 0 ] \begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix}=\begin{bmatrix}1&0&0\\0&cos\gamma&-sin\gamma\\0&sin\gamma&cos\gamma\end{bmatrix}\begin{bmatrix}x_0\\y_0\\z_0\end{bmatrix} x1y1z1 = 1000cosγsinγ0sinγcosγ x0y0z0
绕Y轴和绕Z轴的方式同理可得,但本文为了说明得更详细些,也把他们的推导过程写上
对于绕Y轴旋转的情况,显然有
x 1 = r s i n ( γ + γ 0 ) = r ( s i n γ c o s γ 0 + c o s γ s i n γ 0 ) = r c o s γ 0 s i n γ + r s i n γ 0 c o s γ = x 0 c o s γ + z 0 s i n γ x_1=rsin(\gamma+\gamma_0) \\=r(sin\gamma cos\gamma_0+cos\gamma sin\gamma_0) \\=rcos\gamma_0sin\gamma + rsin\gamma_0cos\gamma \\=x_0cos\gamma+z_0sin\gamma x1=rsin(γ+γ0)=r(sinγcosγ0+cosγsinγ0)=rcosγ0sinγ+rsinγ0cosγ=x0cosγ+z0sinγ
z 1 = r c o s ( γ + γ 0 ) = r ( c o s γ cos ⁡ γ 0 − s i n γ sin ⁡ γ 0 ) = r c o s γ 0 cos ⁡ γ − r s i n γ 0 sin ⁡ γ = − x 0 s i n γ + z 0 c o s γ z_1=rcos(\gamma+\gamma_0) \\=r(cos\gamma\cos\gamma_0-sin\gamma\sin\gamma_0) \\=rcos\gamma_0\cos\gamma-rsin\gamma_0\sin\gamma \\=-x_0sin\gamma+z_0cos\gamma z1=rcos(γ+γ0)=r(cosγcosγ0sinγsinγ0)=rcosγ0cosγrsinγ0sinγ=x0sinγ+z0cosγ
扩充到三维并写成向量形式显然有:
[ x 1 y 1 z 1 ] = [ c o s γ 0 s i n γ 0 1 0 − s i n γ 0 c o s γ ] [ x 0 y 0 z 0 ] \begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix}=\begin{bmatrix}cos\gamma&0&sin\gamma\\0&1&0\\-sin\gamma&0&cos\gamma\end{bmatrix}\begin{bmatrix}x_0\\y_0\\z_0\end{bmatrix} x1y1z1 = cosγ0sinγ010sinγ0cosγ x0y0z0
对于绕Z轴旋转的情况,显然有
x 1 = r c o s ( γ + γ 0 ) = r ( c o s γ c o s γ 0 − s i n γ s i n γ 0 ) = r c o s γ 0 c o s γ − r s i n γ 0 s i n γ = x 0 c o s γ − y 0 s i n γ x_1=rcos(\gamma+\gamma_0) \\=r(cos\gamma cos\gamma_0-sin\gamma sin\gamma_0) \\=rcos\gamma_0 cos\gamma-rsin\gamma_0 sin\gamma \\=x_0cos\gamma-y_0sin\gamma x1=rcos(γ+γ0)=r(cosγcosγ0sinγsinγ0)=rcosγ0cosγrsinγ0sinγ=x0cosγy0sinγ
y 1 = r s i n ( γ + γ 0 ) = r ( s i n γ c o s γ 0 + c o s γ s i n γ 0 ) = r c o s γ 0 s i n γ + r sin ⁡ γ 0 c o s γ y_1=rsin(\gamma+\gamma_0) \\=r(sin\gamma cos\gamma_0+cos\gamma sin\gamma_0) \\=rcos\gamma_0 sin\gamma+r\sin\gamma_0cos\gamma y1=rsin(γ+γ0)=r(sinγcosγ0+cosγsinγ0)=rcosγ0sinγ+rsinγ0cosγ
扩充到三维并写成向量形式显然有:
[ x 1 y 1 z 1 ] = [ c o s γ − s i n γ 0 s i n γ c o s γ 0 0 0 1 ] [ x 0 y 0 z 0 ] \begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix}=\begin{bmatrix}cos\gamma&-sin\gamma&0\\sin\gamma&cos\gamma&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_0\\y_0\\z_0\end{bmatrix} x1y1z1 = cosγsinγ0sinγcosγ0001 x0y0z0
综上:坐标系内一物体(向量坐标)绕单一坐标轴旋转的变换矩阵为
R X = [ 1 0 0 0 c o s α − s i n α 0 s i n α c o s α ] R_X=\begin{bmatrix}1&0&0\\0&cos\alpha&-sin\alpha\\0&sin\alpha&cos\alpha\end{bmatrix} RX= 1000cosαsinα0sinαcosα

R Y = [ c o s β 0 s i n β 0 1 0 − s i n β 0 c o s β ] R_Y=\begin{bmatrix}cos\beta&0&sin\beta\\0&1&0\\-sin\beta&0&cos\beta\end{bmatrix} RY= cosβ0sinβ010sinβ0cosβ

R Z = [ c o s γ − s i n γ 0 s i n γ c o s γ 0 0 0 1 ] R_Z=\begin{bmatrix}cos\gamma&-sin\gamma&0\\sin\gamma&cos\gamma&0\\0&0&1\end{bmatrix} RZ= cosγsinγ0sinγcosγ0001
这样我们就完成了第一步,证明了单轴情况下,物体绕坐标轴旋转时坐标变换的规律
在分析坐标系旋转之前,我们先来讨论一下旋转矩阵的性质,这样有助于加深对旋转矩阵的理解。
对于绕X轴运动的旋转矩阵,可其为关于 α \alpha α的函数,则有
R X ( α ) = [ 1 0 0 0 c o s α − s i n α 0 s i n α c o s α ] R_X(\alpha)=\begin{bmatrix}1&0&0\\0&cos\alpha&-sin\alpha\\0&sin\alpha&cos\alpha\end{bmatrix} RX(α)= 1000cosαsinα0sinαcosα
显然有 R X ( α ) T = R X ( α ) − 1 = R X ( − α ) R_X(\alpha)^T=R_X(\alpha)^{-1}=R_X(-\alpha) RX(α)T=RX(α)1=RX(α)
R X R_X RX的转置矩阵即是 R X R_X RX的逆矩阵,同时,也是绕相反方向运动的旋转矩阵 R X ( − α ) R_X(-\alpha) RX(α)
也就是 R X ( α ) R_X(\alpha) RX(α)的逆矩阵相当于将物体绕X轴反方向旋转 α \alpha α度的旋转矩阵
从物理很好理解这个关系,所谓逆矩阵,就是满足
P = R X ( α ) − 1 R X ( α ) P P=R_X(\alpha)^{-1}R_X(\alpha)P P=RX(α)1RX(α)P
的矩阵,那自然就是把转过去的物体再按照相反的反向转回来。

第三部分 坐标系单轴旋转的坐标转换关系推导

现在我们分析坐标系旋转的情况
坐标系旋转其实分为两种情况,第一种是坐标系旋转但物体不动,第二种是物体随坐标系旋转。
网上很多教程由于缺乏坐标系旋转情况下的坐标值的清晰定义,导致对同一个问题,每篇文章的公式都不一样,容易造成混乱。为了方便讨论,本文将点的定义进行了统一,旋转前坐标系下的点统一为 ( x , y ) (x,y) (x,y),旋转后坐标系下的点为 ( x ′ , y ′ ) (x^\prime,y^\prime) (x,y)。而在统一坐标系下的不同点,我们则用下标区分,如 ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ( x 1 , y 1 ) (x_1,y_1) (x1,y1)表示旋转前坐标系下的两点, ( x 0 ′ , y 0 ′ ) (x_0^\prime,y_0^\prime) (x0,y0) ( x 1 ′ , y 1 ′ ) (x_{1}^{\prime},y_1^{\prime}) (x1,y1)表示旋转后坐标系下的两点

物体随坐标系旋转

在这里插入图片描述假设原始坐标系为 X O Y XOY XOY,内有一点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),原始坐标系旋转到 X ′ O Y ′ X^\prime O Y^\prime XOY位置,该点随坐标系一起旋转,因此在 X ′ O Y ′ X^\prime O Y^\prime XOY的坐标为 ( x 0 ′ , y 0 ′ ) (x_0^\prime,y_0^\prime) (x0,y0),其数值与 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)相等,那么该点在原始坐标系下的新位置, ( x 1 , y 1 ) (x_1,y_1) (x1,y1)与该点在新坐标系下的位置 ( x 0 ′ , y 0 ′ ) (x_0^\prime,y_0^\prime) (x0,y0)之间关系为
[ x 1 y 1 z 1 ] = [ c o s γ sin ⁡ γ 0 s i n γ c o s γ 0 0 0 1 ] [ x 0 ′ y 0 ′ z 0 ′ ] \begin{bmatrix}x_1\\y_1\\z_1\end{bmatrix}=\begin{bmatrix}cos\gamma&\sin\gamma&0\\sin\gamma&cos\gamma&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_0^\prime\\y_0^\prime\\z_0^\prime\end{bmatrix} x1y1z1 = cosγsinγ0sinγcosγ0001 x0y0z0

P Z = R Z P Z ′ P_Z=R_ZP_Z^\prime PZ=RZPZ
这里要注意, ( x 0 , y 0 ) (x_0,y_0) (x0,y0) ( x 0 ′ , y 0 ′ ) (x_0^\prime,y_0^\prime) (x0,y0)在数值上相等。

坐标系旋转,物体不转

注意上面的向量 ( x 2 , y 2 ) (x_2,y_2) (x2,y2) ( x 2 ′ , y 2 ′ ) (x_2^\prime,y_2^\prime) (x2,y2),且在数值上 x 2 = x 2 ′ , y 2 = y 2 ′ x_2=x_2^\prime,y_2=y_2^\prime x2=x2,y2=y2,则 X O Y XOY XOY坐标系下的点 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)在经过旋转的 X ′ O Y ′ X^\prime O Y^\prime XOY坐标系下,坐标点为 ( x 2 ′ , y 2 ′ ) (x_2^\prime,y_2^\prime) (x2,y2),数值上与 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)相同,则显然有
[ x 0 y 0 z 0 ] = [ c o s γ − s i n γ 0 s i n γ c o s γ 0 0 0 1 ] [ x 2 ′ y 2 ′ z 2 ′ ] \begin{bmatrix}x_0\\y_0\\z_0\end{bmatrix}=\begin{bmatrix}cos\gamma&-sin\gamma&0\\sin\gamma&cos\gamma&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_2^\prime\\y_2^\prime\\z_2^\prime\end{bmatrix} x0y0z0 = cosγsinγ0sinγcosγ0001 x2y2z2

P Z = R Z P Z ′ P_Z=R_ZP_Z^\prime PZ=RZPZ
绕X轴与Y轴的旋转矩阵原理绕Z轴相同,这里仅给出结论,推导时要注意角度的正方向要符合右手定则,避免符号出现错误。
R X = [ 1 0 0 0 c o s α − s i n α 0 s i n α c o s α ] R_X=\begin{bmatrix}1&0&0\\0&cos\alpha&-sin\alpha\\0&sin\alpha&cos\alpha\end{bmatrix} RX= 1000cosαsinα0sinαcosα

R Y = [ c o s β 0 s i n β 0 1 0 − s i n β 0 c o s β ] R_Y=\begin{bmatrix}cos\beta&0&sin\beta\\0&1&0\\-sin\beta&0&cos\beta\end{bmatrix} RY= cosβ0sinβ010sinβ0cosβ

R Z = [ c o s γ − s i n γ 0 s i n γ c o s γ 0 0 0 1 ] R_Z=\begin{bmatrix}cos\gamma&-sin\gamma&0\\sin\gamma&cos\gamma&0\\0&0&1\end{bmatrix} RZ= cosγsinγ0sinγcosγ0001
当坐标系旋转时
P X = R X P X ′ P_X=R_XP_X^\prime PX=RXPX
P Y = R Y P Y ′ P_Y=R_YP^\prime_Y PY=RYPY
P Z = R Z P Z ′ P_Z=R_ZP_Z^\prime PZ=RZPZ

第四部分 多次旋转(外旋与内旋 左乘与右乘)

物体绕外部固定轴旋转

我们首先讨论物体绕外部世界的固定轴旋转,我们假设旋转的顺序是XYZ
此时我们逐步的推导
假设起始点为 P ( x 0 , y 0 ) P(x_0,y_0) P(x0,y0)
先绕X轴旋转
P X = R X P 0 P_X=R_XP_0 PX=RXP0
再绕Y轴旋转
P Y = R Y P X P_Y=R_YP_X PY=RYPX
最后绕Z轴旋转
P Z = R Z P Y P_Z=R_ZP_Y PZ=RZPY
P 1 = P Z P_1=P_Z P1=PZ 显然有 P 1 = R Z R Y R Z P 0 P_1=R_ZR_YR_ZP_0 P1=RZRYRZP0
这便是一些文章中所说的左乘,或者外旋。

物体绕自身轴旋转

下面我们来讨论物体绕自身轴旋转的问题。
当我们分析一个物体绕自身轴旋转时,该物体显然不是一个点,而是一个具有一定体积的实体,我们讨论的三个轴在物体的身上,物体的点在这三个坐标系内是固定的,于是这种旋转方式就被抽象成了我们之前说的物体(向量)与坐标系一起旋转
假设物体上某一点坐标为 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0),初始位置的坐标系为OXYZ,坐标系按照XYZ轴的顺序分别旋转 α \alpha α, β \beta β γ \gamma γ度,最终的坐标系为 O X ′ Y ′ Z ′ O X^\prime Y^\prime Z^\prime OXYZ,此时最终坐标系下的点 ( x 0 ′ , y 0 ′ , z 0 ′ ) (x_0^\prime,y_0^\prime,z_0^\prime) (x0,y0,z0)在初始坐标系下的位置为 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1,y1,z1),考察二者的关系。
显然当物体绕自身X轴旋转,旋转完成后坐标系记为 O X 1 Y 1 Z 1 O X^1 Y^1 Z^1 OX1Y1Z1,其点坐标在旧坐标系下的坐标向量 P 1 P^1 P1与原位置P的关系如下式
P = R X P 1 P=R_XP^1 P=RXP1
同理有
P 1 = R Y P 2 P^1=R_YP^2 P1=RYP2
P 2 = R Z P 3 P^2=R_ZP^3 P2=RZP3
P 3 = P ′ P^3=P^\prime P3=P
那么显然有
P = R X P 1 = R X R Y P 2 = R X R Y R Z P ′ P=R_XP^1=R_XR_YP^2=R_XR_YR_ZP^\prime P=RXP1=RXRYP2=RXRYRZP
这里注意定义 P P P为旧坐标系内数值, P ′ P^\prime P为新坐标系内数值。
这便是一些文章中所说的右乘,或内旋,注意这里的三个矩阵乘法的顺序恰好与物体旋转时的矩阵乘法顺序相反
根据以上公式推导出 P P P转换置 P ′ P^\prime P的变换关系
P ′ = R Z − 1 R Y − 1 R X − 1 P P^\prime=R_Z^{-1}R_Y^{-1}R_X^{-1}P P=RZ1RY1RX1P
其中
R Z − 1 = [ c o s γ s i n γ 0 − s i n γ c o s γ 0 0 0 1 ] R_Z^{-1}=\begin{bmatrix}cos\gamma&sin\gamma&0\\-sin\gamma&cos\gamma&0\\0&0&1\end{bmatrix} RZ1= cosγsinγ0sinγcosγ0001
也就是一些文章中所说的坐标系旋转矩阵

物体不动,坐标系旋转

最后讨论坐标系旋转而物体不动的情况
假设坐标系初始位置为 O X Y Z OXYZ OXYZ,其上有一点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)记作 P P P,分别经XYZ轴旋转后得到最终坐标系 O X ′ Y ′ Z ′ O X^\prime Y^\prime Z^\prime OXYZ,原坐标系的点在新坐标系的坐标为 ( x 1 ′ , y 1 ′ , z 1 ′ ) (x_1^\prime,y_1^\prime,z_1^\prime) (x1,y1,z1)记作 P ′ P^\prime P。分别分析三次旋转的结果,显然有
P = R X P 1 P=R_XP^1 P=RXP1
P 1 = R Y P 2 P^1=R_YP^2 P1=RYP2
P 2 = R Z P 3 P^2=R_ZP^3 P2=RZP3
P 3 = P ′ P^3=P^\prime P3=P
显然
P = R X P 1 = R X R Y P 2 = R X R Y R Z P ′ P=R_XP^1=R_XR_YP^2=R_XR_YR_ZP^\prime P=RXP1=RXRYP2=RXRYRZP
同时有
P ′ = R Z − 1 R Y − 1 R X − 1 P P^\prime=R_Z^{-1}R_Y^{-1}R_X^{-1}P P=RZ1RY1RX1P
可以看出,坐标系旋转情况下,无论物体是否随坐标系旋转,其转换关系都是相同的,即原来坐标系的位置向量(坐标值)位于等号左侧,变换后坐标系下的位置向量(坐标值)位于等号右侧。只要记住该坐标是属于哪个坐标系的,就可以算对转换关系。

总结表

旋转类型物体旋转,坐标系不转物体随坐标系旋转坐标系旋转,物体不转
初始坐标系 O X Y Z OXYZ OXYZ O X Y Z OXYZ OXYZOXYZ
初始坐标系内一点坐标 P 0 = [ x 0 y 0 z 0 ] T P_0=\begin{bmatrix}x_0&y_0&z_0\end{bmatrix}^T P0=[x0y0z0]T P 0 = [ x 0 y 0 z 0 ] T P_0=\begin{bmatrix}x_0&y_0&z_0\end{bmatrix}^T P0=[x0y0z0]T P 0 = [ x 0 y 0 z 0 ] T P_0=\begin{bmatrix}x_0&y_0&z_0\end{bmatrix}^T P0=[x0y0z0]T
旋转顺序XYZXYZXYZ
旋转后坐标系 O X Y Z OXYZ OXYZ O X ′ Y ′ Z ′ OX^\prime Y^\prime Z^\prime OXYZ O X ′ Y ′ Z ′ OX^\prime Y^\prime Z^\prime OXYZ
旋转后,初始点在新坐标系下的坐标 P 0 ′ = [ x 0 ′ y 0 ′ z 0 ′ ] T P_0^\prime=\begin{bmatrix}x_0^\prime&y_0^\prime&z_0^\prime\end{bmatrix}^T P0=[x0y0z0]T P 3 ′ = [ x 3 ′ y 3 ′ z 3 ′ ] T P_3^\prime=\begin{bmatrix}x_3^\prime&y_3^\prime&z_3^\prime\end{bmatrix}^T P3=[x3y3z3]T
旋转后,初始点在旧坐标系下的坐标 P 1 = [ x 1 y z z 1 ] T P_1=\begin{bmatrix}x_1&y_z&z_1\end{bmatrix}^T P1=[x1yzz1]T P 2 = [ x 2 y 2 z 2 ] T P_2=\begin{bmatrix}x_2&y_2&z_2\end{bmatrix}^T P2=[x2y2z2]T P 0 = [ x 0 y 0 z 0 ] T P_0=\begin{bmatrix}x_0&y_0&z_0\end{bmatrix}^T P0=[x0y0z0]T
新旧坐标的关系 P 1 = R Z R Y R X P 0 P_1=R_ZR_YR_XP_0 P1=RZRYRXP0 P 2 = R X R Y R Z P 0 ′ P_2=R_XR_YR_ZP_0^\prime P2=RXRYRZP0 P 0 = R X R Y R Z P 3 ′ P_0=R_XR_YR_ZP_3^\prime P0=RXRYRZP3
简化记忆 P 1 = R P 0 P_1=RP_0 P1=RP0 P = R P ′ P=RP^\prime P=RP P = R P ′ P=RP^\prime P=RP
  • 14
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CAN(Controller Area Network,控制器局域网)总线协议是一种广泛应用于工业自动化、汽车电子等领域的串行通讯协议。其帧格式如下: <img src="https://img-blog.csdnimg.cn/20200925125252655.png" width="400"> CAN总线协议的帧分为标准帧和扩展帧两种,其中标准帧包含11位标识符,扩展帧包含29位标识符。在CAN总线上,所有节点都可以同时发送和接收数据,因此需要在帧中包含发送方和接收方的信息。 帧格式的具体解释如下: 1. 帧起始符(SOF):一个固定的位模式,表示帧的起始。 2. 报文控制(CTRL):包含几个控制位,如IDE、RTR等。其中IDE表示标识符的类型,0表示标准帧,1表示扩展帧;RTR表示远程请求帧,0表示数据帧,1表示远程请求帧。 3. 标识符(ID):11位或29位的标识符,用于区分不同的CAN消息。 4. 控制域(CTL):包含几个控制位,如DLC、EDL等。其中DLC表示数据长度,即数据域的字节数;EDL表示数据长度是否扩展,0表示标准数据帧,1表示扩展数据帧。 5. 数据域(DATA):0~8字节的数据。 6. CRC:用于校验数据是否正确。 7. 确认位(ACK):由接收方发送的确认信息,表示数据是否正确接收。 8. 结束符(EOF):一个固定的位模式,表示帧的结束。 以上就是CAN总线协议的帧格式。在实际应用中,节点之间通过CAN总线进行数据交换,通过解析帧中的各个字段,可以判断消息的发送方、接收方、数据内容等信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值