19年12月份写完传感器标定之后停了得有两个半月了,主要是因为年底试验事情比较多,个人也比较心烦,所以就停滞了。过完年疫情严重,在家里隔离办公,整好有心思整理和学习了一些pix的内容,今天一并发出来。

Pixhawk的姿态解算主要有几种方法。互补滤波、基于mahony算法的DCM和扩展卡尔曼滤波(EKF)。互补滤波的内容实在是太多了,而且玩具级的小飞控基本都采用这种简单的方式,主要思路就是将陀螺和加计分别计算得到的姿态值加权求和,算法和思路都比较简单,在此不再赘述。

本节主要讨论一下基于Mahony的DCM算法,主要分为DCM的核心说明、方向余弦矩阵的归一化、陀螺漂移的获取三部分。这部分内容在原先APM中是有的,但是在最新的pixhawk代码中我没有找到。但是并不影响它的重要性,我认为该算法的基础分析特别好,对于我这种惯导专业出身的人来讲思路比较新。

1.DCM核心

DCM,方向余弦矩阵。是由刚体的三维姿态组成的一个坐标转换矩阵。飞机上的惯性测量单元(IMU)一般包括三轴陀螺仪和三轴加速度计。陀螺仪用来测量机体角速度,而加速度计用来测量机体加速度。在这里首先要说明的是,惯性器件测量的物理量都是基于惯性系下的。
一般涉及到惯性坐标系(i)、地理坐标系(导航坐标系)(n)、机体坐标系(b)。
飞机的姿态解算,根本上是要知道机体坐标系相对于导航坐标系的角度,包括航向角( pesai),俯仰角( theta)和横滚角( phai)。而通过两个坐标系之间可以经过一定的旋转顺序(旋转这三个角度)达到重合。姿态解算的核心就是要根据姿态矩阵微分方程,不断更新Cbn 矩阵,从而得到飞机姿态角。姿态矩阵微分方程为:

1.1 该核心方程的来历

定义机体坐标系(前右下),导航坐标系(北东地)。
设S1为导航坐标系,其单位坐标矢量是i,j和k;
设S2为载体坐标系,其单位坐标矢量为i’,j’和k’;
则可表示为(后面这个反对称矩阵用 “欧米伽nbb” 表示,插不进来公式好痛苦啊!!!):

括号内为矢量点乘。那么当导航系固定,机体系运动时, Cbn的微分可表为(CSDN不能编辑公式实在是太抓狂了!!!!):

1.2 欧米伽nbb的计算

为机体相对于导航系的角速度在机体系上的分解,并非是机载陀螺直接测到的角速度(后续有惊喜!!!)
该式为以光衢《惯性导航原理》中的内容。
其中, wibb为机载陀螺测到的角速度, wien为地球自传角速度(约15度/小时),wenn 为牵连角速度,即随飞机运动坐标系原点的角速度。

1.3 Cbn或者Cnb的作用(两个矩阵是互为转置,互为逆)

定义,横滚角 phai为右翼向下,左翼向上为正;俯仰角theta 为机头向上为正;航向角 pesai为机头向右偏转为正(顺时针为正)。

同样,在四元数方面,导航坐标系(n)到机体坐标系(b)的三次旋转可表示为:

航向角顺时针为正。

1.4 计算机数值计算

微分方程的数值解法有很多种,欧拉法、龙格库塔法等。一般,在满足性能要求要求的情况下,尽量使用一阶数值积分方法(欧拉法)。

2.方向余弦矩阵的归一化

2.1 造成 不正交的原因

方向预先矩阵满足以下特性:
#Cbn的逆和转置相等, ;
#三个列或者行上的向量是互相垂直的,三个行列向的向量等于1.
在Cbn更新的过程中应该一直满足上述特性。但数值积分会引入数值误差。无法得到与符号积分相同的结果。主要会引入以下两种数值误差:
1、积分误差:数值积分采用有限时间步长和具有优先采样率的数据。如果在步长内旋转角速度有变化,则会引入积分误差;
2、量化误差:计算机模数转换或者计算截断都会存在量化误差。

姿态余弦矩阵的基本特性就是它的正交性,上述误差会破坏这一特性,而如果不做处理,不断积累下去,会导致行列向量不是单位向量,以及列向量不相互垂直。

2.2 归一化的方法

根据姿态余弦矩阵的特性,任意两列或者两行之间的是相互垂直的,那么计算X轴和Y轴的内积(点乘),结果应该是0。如果不垂直,那么该值整好放映出不垂直的程度。

将该误差分配给X和Y,并让其产生朝相互垂直的方向转动,具体为:

可以验证,上式的正交性要好于原来的X和Y。
对于Z轴,强制采用Xmod和Ymod的外积(叉乘)进行正交化。

至此,解决了三个向量正交化的问题。再来解决向量模值为1的问题:
鉴于每行的模值都不会跟1相差太远,可以采用泰勒展开,计算方法如下:

3. 欧米伽nbb的获取

3.1 欧米伽nbb存在的问题

上述已经说明了欧米伽nbb的获取过程。但是在以下文章中:


没有考虑地球自转、牵连角速度等,而是将这些项全部归结到陀螺漂移中。
(上述说的惊喜的地方!!!)
考虑主要有以下原因:
#小无人机的IMU精度有限,这些项相对飞机真实运动角速度来说比较小,被淹没在陀螺的噪声和误差中;
#小无人机的运动速度较小,飞行范围不大,飞行时间较小,因此地球自转、牵连角速度可以忽略。
不同于传统惯导姿态更新,类Pixhawk飞控中的姿态解算除了上述过程外,还要根据外界GPS、磁力计、加计等信息对陀螺漂移进行补偿。而这些传感器的共同有点是,误差不漂移。
补偿原理是:采用参考矢量,与姿态矩阵中的对应参考矢量做外积(叉乘),它代表一个旋转轴和旋转量。需要旋转这个测量的矢量使它变得与这个估计的矢量平行。通过比例积分控制器把它反馈到陀螺仪,定位估计逐渐被迫跟踪参考向量,这样陀螺的漂移就被消除了。

3.2 采用GPS信息获得X轴的参考,校航向(前提是飞机必须要移动,目前看适用于固定翼)

对地GPS的航向矢量和IMU滚转轴(X)在水平面上的投影意味着漂移量。旋转修正是R矩阵X列对地航向矢量叉乘的Z分量。
首先用GPS的对地航向构建参考矢量:

与X列进行叉乘:

取Z分量作为偏航修正量:

该修正量为地理系下的修正量,需要转换到机体系下:

3.3 采用GPS信息获得X轴的参考存在的问题

#GPS必须在动态情况下才有效;
#在有风的情况下飞机有侧滑,而侧滑角会被归结于是陀螺漂移引起的机体航向与GPS航向不重合,最终补偿在了陀螺漂移中,而当飞机调180°头后,该误差会被2倍放大。

3.4 采用加计信息获得Z轴的参考,校水平(前提是飞机的加减速较小)

采用加速度计对重力加速度的测量矢量和IMU偏航轴(Z)的叉乘,来校准水平。
加速度计测量的是机体受到的合力产生的加速度。除了重力以外,主要的还有向心加速度和运动加速度。由于飞机不能一直加速或者一直减速,且一般正加速度和负加速度是成对出现的,因此先不考虑这一部分(想考虑也没办法考虑),而向心加速度可以转动角速度和线速度的叉乘得到,因此,机体系下的重力矢量参考测量值为:

通过计算方向余弦矩阵的第三行和重力参考矢量归一化后值的外积(叉乘),得到水平修正量:

3.5 采用加计信息获得Z轴的参考存在的问题

没有考虑运动加速度的干扰。(靶机弹射阶段的姿态计算)

4.反馈控制器

设置一个反馈控制器,将上述采用外界参考得到的陀螺仪修正量通过控制器叠加在陀螺数据上,达到补偿陀螺漂移的目的(犯懒直接截图)。

Pixhawk学习6.1——姿态解算相关推荐

  1. Pixhawk学习6.2——姿态解算

    在PX4中,采用三轴陀螺,三轴加计,三轴磁力计采用EKF进行姿态解算. (现在在examples/attitude_estimator_ekf里面,在cmake里面并没有打开,nuttx_px4fmu ...

  2. matlab求逆矩阵_MPU6050姿态解算2-欧拉角amp;旋转矩阵

    1 IMU姿态解算 IMU,即惯性测量单元,一般包含三轴陀螺仪与三轴加速度计.之前的文章 码农爱学习:MPU6050姿态解算方式1-DMP​zhuanlan.zhihu.com 已将对MPU6050这 ...

  3. Pixhawk之姿态解算篇(5)_ECF/EKF/GD介绍

    一.开篇 很久没更新blog了, 最近研究的东西比较杂乱,也整理了很多东西,没有来的及更新,最近发现很多小伙伴都开始写blog了,在不更新就要"被落后了".兄弟们,等等我啊~~~ ...

  4. Pixhawk之姿态解算篇(3)_源码姿态解算算法分析

    一.开篇 终于到ardupilot源代码的姿态解算了,有了前期关于mahony姿态解算算法的基础以后,理解源代码的姿态解算算法就快多了,所有的东西都在脑海中初步有了一个框架:首先要做什么,然后再做什么 ...

  5. Pixhawk代码分析-姿态解算篇C

    姿态解算篇C 前言 终于到ardupilot源代码的姿态解算了,有了前期关于mahony姿态解算算法的基础以后,理解源代码的姿态解算算法就快多了,所有的东西都在脑海中初步有了一个框架:首先要做什么,然 ...

  6. Pixhawk代码分析-姿态解算篇A

    姿态解算篇A 基本知识 1.如何实现控制 一个无人机系统的算法主要有两类:姿态检测算法.姿态控制算法.姿态控制.被控对象.姿态检测三个部分构成一个闭环控制系统.被控对象的模型是由其物理系统决定,设计无 ...

  7. Pixhawk之姿态解算篇(4)_补充篇

    一.开篇 大家期待已久的第四篇来了,但是本篇可能比较水啊~~~见谅~~~ 首先,上一周没有什么收获,虽然看了不少的论文,但是却没有什么质的飞越~~~~ 看的论文都是关于姿态解算的,用的算法大部分也都是 ...

  8. Pixhawk之姿态解算篇(2)_mahony算法分析

    一.开篇 还是没能进入到源码部分研究,对姿态解算过程太过于模糊,所以主要开始研究一下关于姿态解算的过程和实现,本篇博文主要是以mahony的算法为基础理解姿态解算的过程,主要参考的论文就是Willia ...

  9. Pixhawk代码分析-姿态解算篇D

    姿态解算篇D 基础知识 研究多旋翼无人机前期主要需要了解其气动布局和复杂的动力学模型,然后就是姿态解算和控制器的设计.为了实现精确四旋翼飞行器的姿态估计,首先就是需要了解各传感器采集的数据和误差存在的 ...

最新文章

  1. 4位数学家获得2018年菲尔兹奖
  2. phpjson多层乱码解决
  3. python使用字典格式化字符串-Python中将(字典,列表等)变量格式化输出
  4. Operating System-进程/线程内部通信-信号量和PV操作
  5. 路由赚钱宝一年能赚1000大洋 厂商降低了成本却拥堵了网络
  6. Where与Having的区别
  7. php url gb2312 utf8,php实现utf-8与gb2312的url编码转换
  8. Essential Phone PH1原生系统常见问题以及解答
  9. struts2之值栈
  10. 唯有志存高远,方能风行天下
  11. (完美)华为畅玩6X BLN-AL10的USB调试模式在哪里打开的经验
  12. 计算机硬盘怎么整理,w7怎么整理磁盘碎片_如何清理win7电脑磁盘碎片
  13. 一句关于爱情的话...
  14. 终极dos批处理循环命令详解
  15. python实现之导数
  16. 【EasyRL学习笔记】第八章 针对连续动作的深度Q网络
  17. 音频格式简介和PCM转换成WAV
  18. mysql 获取一个库下的所有表名
  19. Boll布林带波动率策略
  20. 东北大学和西南大学计算机,东北大学、东南大学、中南大学、西南大学、西北大学,哪个最好?...

热门文章

  1. GOTS验厂辅导,全球有机纺织品标准(GOTS)审核文件及标准四大特征
  2. Yolo-V5目标检测 项目实战
  3. 次时代3D游戏角色模型制作:高模制作(二)
  4. 用CDNs和Expires改善网站性能(译文)
  5. setookit用法
  6. 全面启动“Say hi市南”中山路餐厅变身网红打卡店
  7. unity3D中使用mesh画圆柱面
  8. java读文件块会读出null,为什么?
  9. width,height为多少px时,A4纸打印时刚好一页?
  10. 6713亿!华为正式官宣