在这里借CSDN这个平台记录一下姿态更新过程中遇到的所有问题,并对整个姿态更新流程做一个梳理和总结,学习课件均来自i2nav牛小骥老师团队整理,感谢陈起金老师和各位师兄提供的帮助。资料链接:
目录
一、姿态更新概述
姿态更新,顾名思义就是根据前一时刻的姿态和陀螺的输出的当前历元对应的测量值,来计算当前的姿态。姿态更新的推算可以通过方向余弦矩阵或者四元数来实现,但是笔者认为方向余弦矩阵更易于理解,所以在我的文章中均采用方向余弦矩阵的形式来实现姿态的更新。而姿态变化的表达均通过等效旋转矢量来表示。
首先在进行整个更新过程的讲解之前,我们首先要明确我们整个流程的最终任务和目标是啥,可以利用的条件有哪些:
已知量:
上一历元的姿态:;
当前历元和上一历元陀螺输出的角增量测量值:
求解目标:
当前历元的姿态:
二、预备知识
为了扫清大家的疑惑,在这里需要大家了解一些前景知识:
(1)首先就是在拥有上一历元的姿态的情况下,方向余弦矩阵怎么去求解?
在已知上一历元的姿态的情况之下,我们可以很轻易地获得那个历元的位置坐标由系转到系的方向余弦矩阵,的具体求解思路可以参照我的另一篇文章:
而 。
当然也可以直接通过公式获得:
(2)欧拉角和等效旋转矢量不是一个概念,他们两个所代表的意义完全不一样,不能简单地认为就是等效旋转矢量,也不能能认为等效旋转矢量的三个量的大小就是旋转角度,这个理解是非常严重错误的。
一个坐标系到另一个坐标系的变换可以通过多次转动来完成,也可以通过绕一个定义在参考坐标系中的矢量的单次转动来实现。该矢量称作等效旋转矢量(rotation vector)是一个三元素的向量,旋转矢量的方向给出了转动轴的方向,它的模长为转动角度的大小。又称为轴角(axis-angle)。
(3)欧拉角转方向余弦矩阵可以通过三次转动的旋转矩阵累乘来实现,而等效旋转矢量是如何转化为对应的方向余弦矩阵的呢?
等效旋转矢量转化为对应的方向余弦矩阵是通过Rodrigues 旋转公式来实现的:
上式中,表示由系转到系的等效旋转矢量,则为对应系转到系的反向余弦矩阵。
三、姿态更新方法
3.1 姿态更新公式
为了更清楚地表达转化关系,在这里将写作:,将写作:。
要想建立起和之间的关系,则可以通过如下连乘运算实现:
上式中是系由到的姿态变化矩阵,是系由到的姿态变化矩阵。二者均可以利用Rodrigues 旋转公式将对应的等效旋转矢量转化为对应的的姿态变化矩阵,方式如下:
在这里需要注意的是单位阵后面的那个符号变化,因为我们直接求解的等效旋转矢量和都是相对于系和系下由时间到的,但是是系由到的姿态变化矩阵,所以带入的时候需要反号。
3.2 等效旋转矢量求解
代表载体在系下由时间到的的等效旋转矢量,这个矢量是通过对陀螺在当前历元和上一历元陀螺输出的角增量测量值:进行处理获得,中间利用了Bortz 公式和对旋转角速度的双子样假设,具体求解流程可以看这篇文章有详细的讲解:
而表示系变化对应的等效旋转矢量,表示系从时刻的状态绕向量正转角度后达到时刻的状态,计算方式如下:
其中是由地球自转角速度在载体所在位置的系投影(分解到北-东-地方向):
而表示由物体自身运动所引起的角速度在系下的投影:
其中
式中为纬度(单位:rad),,分别为东向和北向速度。和分别为子午圈半径和卯酉圈半径。为地球椭球长半轴,为地球椭球模型第一偏心率,对于WGS84椭球,, ,。