锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

惯性导航原理(2):导航基础知识

时间:2022-11-12 04:00:00 zg2传感器如何维护

二、导航基础知识

  • 矩阵基础知识
    • 1.向量叉乘和反对称阵
  • 欧拉角、坐标转换矩阵、四元数、等效旋转矢量
    • 1、欧拉角
      • 1、旋转顺序
      • 2.内旋和外旋
    • 2、坐标转换矩阵
    • 3、四元数
    • 轴角/旋转矢量
    • 5.相互转换欧拉角、坐标转换矩阵、四元数、等效旋转矢量
      • 1、欧拉角<=>转换矩阵的坐标
      • 2、欧拉角<=>四元数
      • 三、坐标转换矩阵<=>四元数
      • 4、坐标转换矩阵<=>旋转向量
      • 5、四元数<=>旋转向量
  • 地球形状和重力模型
    • 1、地球形状
      • 1.地心纬度和地理纬度
      • 2.地球坐标和位置矩阵
    • 2、重力模型

??在了解惯导解算和多传感器组合导航之前,必须掌握矩阵基础知识、欧拉角、坐标转换矩阵、四元、等效旋转矢量、地球模型、重力模型等

矩阵基础知识

1.向量叉乘和反对称阵

??两个三维列向量 V 1 = [ V 1 x , V 1 y , V 1 z ] , V 2 = [ V 2 x , V 2 y , V 2 z ] V_1=[V_{1x},V_{1y},V_{1z}],V_2=[V_{2x},V_{2y},V_{2z}] V1=[V1x,V1y,V1z ],V2=[V2x,V2y,V2z]之间的叉乘(外积),可利用行列式计算规则表示为:
在这里插入图片描述
  其中i,j,k分别为直角坐标系三个坐标轴向的单位向量。
  上式等于:

  因此可记:

  可知, ( V × ) (V\times) (V×)是反对称阵,当V是实向量时满足: ( V × ) H = ( V × ) T = − ( V × ) (V\times)^H=(V\times)^T=-(V\times) (V×)H=(V×)T=(V×)(其中H代表共轭转置)。后面将 ( V × ) (V\times) (V×)记为由三维向量V构成的反对称阵。引入三维向量的反对称阵概念后,两向量之间的叉乘运算可等价表示为前一向量的反对称阵与后一向量之间的矩阵乘法运算,亦即 V 1 × V_1\times V1× V 2 = ( V 1 × ) V 2 V_2=(V_1\times)V_2 V2=(V1×)V2。且反对称阵 ( V × ) (V\times) (V×)是正规矩阵 ( V × ) H (V\times)^H (V×)H ( V × ) = (V\times)= (V×)= ( V × ) (V\times) (V×) ( V × ) H (V\times)^H (V×)H

欧拉角、坐标转换矩阵、四元数、等效旋转矢量

1、欧拉角

  三维空间的物体具有六个自由度,绕XYZ轴的平移以及绕XYZ轴的旋转,所以,旋转是具有三个自由度的,惯导中,一般用yaw(偏航), pitch(俯仰), roll(横滚)三个量表示,一般对应(载体)z,y,x(前-右-下坐标系)三个坐标轴(若为右-前-上坐标系则为z,x,y)。
  要清楚描述旋转,则必须明确旋转顺序与内旋还是外旋。

1、旋转顺序

  旋转顺序如先X-Y-Z或先Y-X-Z等, (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z)。
  对于x,y,z三个轴的不同旋转顺序一共有(x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z)六种组合,而旋转具有不可交换性,即先绕Z轴转30度,再绕Y轴转10度,最后绕X轴转40度,先绕Y轴转10度,再绕Z轴转30度,最后绕X轴转40度得到的结果是不同的,因此我们需要明确旋转顺序,才能确定欧拉角所指的姿态。

2、内旋与外旋

  内旋= 绕自身旋转轴(惯导解算采用的就是内旋)
  外旋= 绕世界坐标系固定的旋转轴
  如下图所示,两行都是按照Z-Y顺序旋转,不同的是上面一行的第二次旋转是按照旋转之后的Y轴旋转,而下面一行是按照绕Z轴旋转之前的Y轴进行的旋转,所以,上面一行的旋转被称为内旋(按照坐标系自己的轴向旋转),而下面则被称为外旋(按照参考坐标系的轴向旋转)。

  注意,导航中,我们常常会看到,导航系或当地地理坐标系到载体系的坐标旋转矩阵,绕Y轴旋转时,其与绕X、Z轴的写法不一致(可参考我上一篇文章),是因为绕X、Z轴旋转时,对应的分别是(在yoz、xoy平⾯顺时针旋转),然而绕Y轴旋转时,对应的是在zox平面顺时针旋转(z轴此时是横轴,x是纵轴),因此绕Y轴的坐标转换矩阵与绕其他轴不一样,这个也可以通过右手坐标系比划一下得出~~。
  欧拉角的缺点及优点:
  优点:旋转三个自由度正好通过三个变量表示出来,无冗余,且直观
  缺点:存在万向节死
问题、没办法进行旋转的叠加,必须借助旋转矩阵、插值误差大,因为是三个轴进行的旋转。但是四元数就十分适合插值。
  万向节死锁简易解释:y向上,x向右,z向屏幕里面。假设应用顺序为x->y->z,如果我想转一个(10,90,20),那么我先在x上面转10度,然后,y转90度,此时,z轴指向了y旋转前x的方向的反方向,所以,第三步,在z上转20度,可以直接减在第一步里,在x上转-10度,因此,可以认为此时在z轴向上应用任何旋转是没有意义的,即丢失了一个自由度。
  我们从最简单的矩阵来理解。还是使用XYZ的旋转顺序。当Y轴的旋转角度为90°时,我们会得到下面的旋转矩阵:

  我们对上述矩阵进行左乘可以得到下面的结果:

  可以发现,此时当我们改变第一次和第三次的旋转角度时,是同样的效果,而不会改变第一行和第三列的任何数值,从而缺失了一个维度。

2、坐标转换矩阵

  用一个3阶正交矩阵来表示旋转变换,是一种最常用的表示方法。容易证明,3阶正交阵的自由度为3。注意,它的行列式必须等于1。
  坐标转换矩阵相对于欧拉角来说更适合运算,两次连续旋转可用坐标转换矩阵相乘来表达。
  坐标转换矩阵的缺点及优点:
  优点:相比于欧拉角的多样性,同一个姿态的旋转矩阵是唯一的、可以直接做旋转的相乘运算、相比于四元数,对坐标转化更加友好。
  缺点:用9个量表示三个自由度,冗余度太大了。

3、四元数

  欧拉角存在万向锁,旋转矩阵冗余度太大,所以引入四元数,即一次转动可以由四个元素组成的超复数组成: q = ( q 0 , q 1 , q 2 , q 3 ) q=(q_0,q_1,q_2,q_3) q=(q0,q1,q2,q3),其中 q 0 q_0 q0为转动幅度的函数, q 1 , q 2 , q 3 q_1,q_2,q_3 q1,q2,q3为转动轴、转动幅度的函数,因为旋转自由度为3,尽管四元数有四个量,但是其模值为1,因此四元数也只有三个量是“自由”相互独立的。


  其中 q ∗ q^* q q q q的共轭, q ∗ v ∗ q ∗ q*v*q^* qvq就是三个四元数连乘,可以理解为 v v v q q q q ∗ q^* q各旋转了一次。如果我们就想旋转θ角度,那旋转一次行不行呢?不行!,旋转后的v′的实部不为零,用下面的图来表示:

  上图的三维超平面代表三维世界(i,j,k),三维向量w在三维超平面上,所以第四维度的大小为0,w在四维空间上表示为[0,b,c,d],如果被四元数 q q q旋转一次,w就变成了箭头指向上方的点,这个点是三维超平面上,这时的第四维度的大小不为零了。w在四维空间上表示为[a,b,c,d],三维向量被转化为四维向量。这就很尴尬了!!!如果再继续被 q ∗ q^* q 旋转一次,恰好就又被转化到三维超平面之上了。
  由于四元数原理推导及理论有些复杂,篇幅限制,不在这里详细介绍,如果对四元数不是很熟的同学,可以看一下Krasjet大神写的四元数与三维旋转这个文章,介绍的非常非常详细,链接如下:最详细的四元数讲解,保姆级教学

4、轴角/旋转矢量

  在轴角的表示方法中,一个旋转的定义需要使用到四个变量:旋转轴 u 的 𝑥, 𝑦, 𝑧 坐标,以及一个旋转角 θ,也就是我们一共有四个自由度 (Degree of Freedom).这很明显是多于欧拉角的三个自由度的.实际上,任何三维中的旋 转只需要三个自由度就可以定义了,为什么这里我们会多出一个自由度呢?

  其实,在我们定义旋转轴 u 的 𝑥, 𝑦, 𝑧 坐标的同时,我们就定义了 u 的模 长(长度).然而,通常情况下,如果我们说绕着一个向量 u 旋转,我们其实 指的是绕着 u 所指的方向进行旋转.回忆一下向量的定义:向量是同时具有 大小和方向的量,但是在这里它的大小(长度)并不重要.我们可以说绕着 u1 = (0, 0, 1)𝑇 这个轴进行旋转,也可以说绕着 u2 = (0, 0, 3)𝑇 旋转.虽然这 两个向量完全不同,但是它们指向的都是同一个方向(即 𝑧 轴的方向)。在三维空间中定义一个方向只需要用到两个量就可以了(与任意两个坐标 轴之间的夹角).最简单的例子就是地球的经纬度,我们仅仅使用经度和纬 度两个自由度就可以定义地球上任意一个方位.而如果我们要表示某一个方 位上的特定一个点,则还需要添加海拔这个自由度。为了消除旋转轴 u 模长这个多余的自由度,我们可以规定旋转轴 u 的模长 为 ∣ ∣ u ∣ ∣ = s q r t ( x 2 + y 2 + z 2 ) = 1 ||u||=sqrt(x^2+y^2+z^2)=1 u=sqrt(x2+y2+z2)=1,也就是说 u 是一个单位向量.这样一来,空间中任意一个方向上的单位向量就唯一代表了这个方向。
  轴角和旋转向量本质上是一个东西,轴角用四个元素表达旋转,其中的三个元素用来描述旋转轴,另外一个元素描述旋转的角度: r = [ x , y , z , θ ] r=[x,y,z,\theta] r=[x,y,z,θ] ,其中单位向量 n = [ x , y , z ] n=[x,y,z] n=[x,y,z]对应的是旋转轴, θ \theta θ对应的是旋转角度。旋转向量与轴角相同,只是旋转向量用三个元素来描述旋转,它把 θ \theta θ角乘到了旋转轴上,如下: r v = [ x ∗ θ , y ∗ θ , z ∗ θ ] r_v=[x*\theta,y*\theta,z*\theta] rv=[xθ,yθ,zθ]
  有了这个约束,我们现在就可以开始思考怎么样进行这个旋转了.首先, 我们可以将 v 分解为平行于旋转轴 u 以及正交(垂直)于 u 的两个分量, v ∥ v_∥ v v ⊥ v_⊥ v,即

  我们可以分别旋转这两个分向量,再将它们旋转的结果相加获得旋转后的向量


  可以看到, v ∥ v_∥ v 其实就是 v 在 u 上的正交投影 ,根据正交投影的公式,我们可以得出:

  因为 v = v ∥ + v ⊥ v = v_∥ + v_⊥ v=v+v,我们可以得到 v ⊥ = v − v ∥ = v − ( u ⋅ v ) u . v_⊥ = v − v_∥ = v − (u · v)u. v=vv=v(uv)u. 因此,v的旋转被分解成了 v ∥ v_∥ v 以及 v ⊥ v_⊥ v的旋转。而 v ∥ v_∥ v 其实根本就没有被旋转,仍然与旋转轴 u 重合,因此 v ∥ ′ = v ∥ v ^′_∥ = v ∥ v=v
  接下来,我们需要处理正交于 u 的 v ⊥ v_⊥ v,因为这两个向量是正交的,这个旋转可以看做是平面内的一个旋转.因为旋转不改变 v ⊥ v_⊥ v 的长度,所以路径是 一个圆.下面是这个旋转的示意图,右侧的为俯视图:

  现在,3D 的旋转就被我们转化为了 2D 平面上的旋转.由于在这个平面上我们只有一个向量 v ⊥ v_⊥ v,用它来表示一个旋转是不够的,我们还需要构造一个同时正交于 u 和 v ⊥ v_⊥ v 的向量 w,这个可以通过叉乘来获得: w = u × v ⊥ w=u×v_⊥ w=u×

相关文章