004旋转矩阵系统理解

学习惯导这么久,以为自己入门了,突然发现自己还是活在梦里。就拿这个旋转矩阵来说,在学惯导之前就已经明白是怎么回事了,然而并没有什么用,在INS的海洋里兜兜转转,又回到了旋转矩阵。入门道阻且长,惟有志存高远,方能钻研不休。
为了自己的健忘脑袋着想,还是再次完整的备忘一下关于旋转矩阵的问题。在本文中,对在学习严恭敏老师的《捷联惯导算法与组合导航原理讲义》中产生的疑问也做一个补充说明。文末附上前述讲义。


一、入门基础

在开始本文之前,首先要把坐标系定义好。我还是要偷一下懒,因为我觉得我不可能写的比这篇好。见判断三维坐标系旋转正方向的简单方法。在本文中,坐标系即右手系,正向旋转如前述判断方法。
如图所示,将坐标系 o x 1 y 1 z 1 ox_1y_1z_1 ox1y1z1 z 1 z_1 z1轴正向旋转至 o x 2 y 2 z 2 ox_2y_2z_2 ox2y2z2 P P P点在 o x 1 y 1 z 1 ox_1y_1z_1 ox1y1z1中的坐标为 ( x 1 , y 1 ) (x_1,y_1) (x1,y1),在 o x 2 y 2 z 2 ox_2y_2z_2 ox2y2z2中的坐标为 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)

这里写图片描述

显然,该旋转为正向旋转(不要在意旋转角度的字母),在二维坐标系中有

[ x 2 y 2 ] = [ c o s ψ s i n ψ − s i n ψ c o s ψ ] [ x 1 y 1 ] \left[ \begin{matrix} x_2 \\ y_2 \end{matrix} \right]= \left[ \begin{matrix} cos\psi & sin\psi\\ -sin\psi & cos\psi \end{matrix} \right] \left[ \begin{matrix} x_1 \\ y_1 \end{matrix} \right] [x2y2]=[cosψsinψsinψcosψ][x1y1]

在三维坐标系中有:

[ x 2 y 2 z 2 ] = [ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ] [ x 1 y 1 z 1 ] \left[ \begin{matrix} x_2 \\ y_2 \\ z_2 \end{matrix} \right]= \left[ \begin{matrix} cos\psi & sin\psi & 0\\ -sin\psi & cos\psi & 0 \\ 0 & 0 & 1 \end{matrix} \right] \left[ \begin{matrix} x_1 \\ y_1 \\ z_1 \end{matrix} \right] x2y2z2=cosψsinψ0sinψcosψ0001x1y1z1

即绕 Z Z Z轴正向旋转的旋转矩阵为:

C ψ = [ c o s ψ s i n ψ 0 − s i n ψ c o s ψ 0 0 0 1 ] C_\psi= \left[ \begin{matrix} cos\psi & sin\psi & 0\\ -sin\psi & cos\psi & 0 \\ 0 & 0 & 1 \end{matrix} \right] Cψ=cosψsinψ0sinψcosψ0001

同理,绕 X X X轴正向旋转的旋转矩阵为:

C θ = [ 1 0 0 0 c o s θ s i n θ 0 − s i n θ c o s θ ] C_\theta= \left[ \begin{matrix} 1 & 0 & 0 \\ 0 & cos\theta & sin\theta \\ 0 & -sin\theta & cos\theta \\ \end{matrix} \right] Cθ=1000cosθsinθ0sinθcosθ

Y Y Y轴正向旋转的旋转矩阵为:

C γ = [ c o s γ 0 − s i n γ 0 1 0 s i n γ 0 c o s γ ] C_\gamma= \left[ \begin{matrix} cos\gamma & 0 & -sin\gamma\\ 0 & 1 & 0\\ sin\gamma & 0 & cos\gamma\\ \end{matrix} \right] Cγ=cosγ0sinγ010sinγ0cosγ

如果对绕 Y Y Y轴旋转的情况不了解,请参考003备忘补充之惯性导航基本原理(刘保中)—9.1方向余弦与方向余弦矩阵


二、方向余弦阵

这一小节通过严恭敏老师的讲义进行说明,针对20180206版本。

在该讲义的194页中,给出了两种定义欧拉角的方式,对于图B-2而言,通过以下方式旋转(注意:讲义中旋转角字母的定义跟我上面讲的不一样,不要搞混)
O X 0 Y 0 Z 0 → 正 向 旋 转 α 绕 Z 轴 O X 1 Y 1 Z 1 → 正 向 旋 转 β 绕 X 轴 O X 2 Y 2 Z 2 → 正 向 旋 转 γ 绕 Y 轴 O X 3 Y 3 Z 3 OX_0Y_0Z_0\xrightarrow[正向旋转\alpha]{绕Z轴}OX_1Y_1Z_1\xrightarrow[正向旋转\beta]{绕X轴}OX_2Y_2Z_2\xrightarrow[正向旋转\gamma]{绕Y轴}OX_3Y_3Z_3 OX0Y0Z0Z αOX1Y1Z1X βOX2Y2Z2Y γOX3Y3Z3
那么将坐标系从0系旋转到1系需要
[ X 1 Y 1 Z 1 ] = C 0 1 [ X 0 Y 0 Z 0 ] \left[\begin{matrix} X_1\\ Y_1\\ Z_1 \end{matrix} \right] =C_0^1 \left[ \begin{matrix} X_0\\ Y_0\\ Z_0 \end{matrix} \right] X1Y1Z1=C01X0Y0Z0

C 0 1 = [ c o s α s i n α 0 − s i n α c o s α 0 0 0 1 ] C_0^1= \left[ \begin{matrix} cos\alpha & sin\alpha & 0 \\ -sin\alpha & cos\alpha & 0 \\ 0 & 0 & 1 \end{matrix} \right] C01=cosαsinα0sinαcosα0001

将坐标系从0系旋转到2系需要
[ X 2 Y 2 Z 2 ] = C 0 2 [ X 0 Y 0 Z 0 ] = C 1 2 C 0 1 [ X 0 Y 0 Z 0 ] \left[\begin{matrix}X_2\\Y_2\\Z_2\end{matrix}\right] =C_0^2\left[\begin{matrix}X_0\\Y_0\\Z_0\end{matrix}\right] =C_1^2C_0^1\left[\begin{matrix}X_0\\Y_0\\Z_0\end{matrix}\right] X2Y2Z2=C02X0Y0Z0=C12C01X0Y0Z0

C 1 2 = [ 1 0 0 0 c o s β s i n β 0 − s i n β c o s β ] C_1^2=\left[\begin{matrix} 1 & 0 & 0\\ 0 & cos\beta & sin\beta \\ 0 & -sin\beta & cos\beta \end{matrix}\right] C12=1000cosβsinβ0sinβcosβ
将坐标系从0系旋转到3系需要
[ X 3 Y 3 Z 3 ] = C 0 3 [ X 0 Y 0 Z 0 ] = C 2 3 C 1 2 C 0 1 [ X 0 Y 0 Z 0 ] \left[\begin{matrix}X_3\\Y_3\\Z_3\end{matrix}\right] =C_0^3\left[\begin{matrix}X_0\\Y_0\\Z_0\end{matrix}\right] =C_2^3C_1^2C_0^1\left[\begin{matrix}X_0\\Y_0\\Z_0\end{matrix}\right] X3Y3Z3=C03X0Y0Z0=C23C12C01X0Y0Z0

C 2 3 = [ c o s γ 0 − s i n γ 0 1 0 s i n γ 0 c o s γ ] C_2^3=\left[\begin{matrix} cos\gamma & 0 & -sin\gamma \\ 0 & 1 & 0\\ sin\gamma & 0 & cos\gamma \end{matrix}\right] C23=cosγ0sinγ010sinγ0cosγ

那么从3系旋转到0系即为:
C 3 0 = ( C 0 3 ) T = ( C 2 3 C 1 2 C 0 1 ) T = ( C 0 1 ) T ( C 1 2 ) T ( C 2 3 ) T = C 1 0 C 2 1 C 3 2 C_3^0=(C_0^3)^T=(C_2^3C_1^2C_0^1)^T=(C_0^1)^T(C_1^2)^T(C_2^3)^T=C_1^0C_2^1C_3^2 C30=(C03)T=(C23C12C01)T=(C01)T(C12)T(C23)T=C10C21C32

= [ c o s α − s i n α 0 s i n α c o s α 0 0 0 1 ] [ 1 0 0 0 c o s β − s i n β 0 s i n β c o s β ] [ c o s γ 0 s i n γ 0 1 0 − s i n γ 0 c o s γ ] =\left[\begin{matrix}cos\alpha & -sin\alpha & 0 \\sin\alpha & cos\alpha & 0 \\0 & 0 & 1\end{matrix}\right] \left[\begin{matrix} 1 & 0 & 0\\ 0 & cos\beta & -sin\beta \\ 0 & sin\beta & cos\beta \end{matrix}\right] \left[\begin{matrix} cos\gamma & 0 & sin\gamma \\ 0 & 1 & 0\\ -sin\gamma & 0 & cos\gamma \end{matrix}\right] =cosαsinα0sinαcosα00011000cosβsinβ0sinβcosβcosγ0sinγ010sinγ0cosγ


资源:

捷联惯导算法与组合导航原理讲义(20180206)-资源汇总页中下载

学术不需要积分!!

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
"请用300字中文回答:C是计算机科学中的一种编程语言。它是由贝尔实验室的丹尼斯·里奇在20世纪70年代初设计开发的。C语言被广泛应用于操作系统、编译器、数据库和其他高性能软件的开发中。它是一种高级的、通用的编程语言,具有强大的功能和灵活性。 C语言之所以受到广泛的欢迎和应用,是因为它具有简洁、高效的特点。C语言的语法相对简单,易于学习和理解。C语言支持面向对象的编程方法,同时也支持过程式编程。C语言提供了丰富的函数库,可以实现各种功能。 C语言是一种面向过程的编程语言,它将程序设计看作是一系列的操作步骤。C语言支持变量、表达式、循环、条件判断等基本的编程概念。C语言提供了丰富的数据类型,包括整数、浮点数、字符以及指针等。C语言也支持结构和联合等复杂的数据类型。 C语言是一种编译型语言,它通过编译器将源代码转换成机器码,然后在计算机上执行。C语言的编译过程包括预处理、编译、汇编和链接等步骤。C语言的编译器通常会生成高效的机器码,可以充分发挥计算机的性能。 总的来说,C语言是一种强大而灵活的编程语言,被广泛应用于计算机科学和软件工程领域。它不仅适用于系统级开发,也适用于应用级开发。掌握C语言可以使程序员更加高效地开发软件,并提高软件的性能和可靠性。"

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值