1. 加速度计上电校准零偏是否可行?
答案是否,以PX4飞控为例,在NED系下,水平放置时,机体测量加速度的数据应该是[0 0 -g],所以,除非你确定你的飞控校准加速度零偏的时候是绝对的水平,否则只会加大误差,更别谈每次上电自动校准,减零偏了,试想一下,如果我就是要飞机在斜坡上起飞,那飞机飞起来回平就完全不对了,飞机认为的水平已经不是你所见的水平。
2.加速度计校准有哪些方法?
主要有两种,一种是依赖于高精度的外部设备,比如转台等,进行的精确标定;主要校准安装误差,比例系数和零位偏移。方法为静态六位置法标定法。六位置法一般需要借助高精度转台进行试验测试,将姿态解算测试系统水平固定在转台测试台面上,安装过程中保证系统坐标系与转台测试面坐标系重合,对加速度传感器的各敏感轴进行竖直向上和向下测试,通过转动转台的内框-中框-外框对加速度计三个轴共测试六次。利用最小二乘法计算对六位置数据行进最小误差估计得到 12 个误差系数。具体方法可以参考一些导航方面的书籍论文。
另外一种则是重力参考标定,飞控会自动运行代码或离线数据采集进行参数计算。我们主要讲工程上最实用的,明显第二种比较简单实用,一般来讲,是不会用到转台这类设备进行精确标定的,原因就是设备太贵,买不起。所以一般采用重力参考标定方式。
3.加速度校准的原理?
静态放置情况下,无论加速度计计的位置在哪,所测的的加速度模值始终应该是当地重力加速度。
4.校准的目的?
换个说法,就是如果不校准会怎样?简单来讲,会影响你姿态解算的精度,比如互补滤波,解算的静态精度与测量的重力加速度有直接关系,所以能提高姿态解算的精度。
5.可不可以不校准?
实际应用也可以不校准加速度计,毕竟,精度再差,也不差那么一些,当然,如果对飞控的精度要求比较高,还是校准最好。
加速度计一般校准一次即可,不需要每次都上电校准,所以,也可以采集离线数据,校准之后,将参数写入你的飞控代码。
6.如何做?
主要介绍两种方法,包括pixhawk飞控的算法解析。
6.1离线数据matlab计算
飞控静止下,随便转几个面,保持一段时间,记录飞控的加速度数据。
带入上式,进行最小二乘拟合,matlab中用lsqcurvefit函数,求出a1-a6参数。
实验结果如图所示:
图中看出,校准后,加速度计数据的输出更接近重力加速度g,与重力加速度的误差更小。
得到参数如下:
1.0010 0.1178 1.0059 -0.2940 0.9926 0.1514
6.2 PX4固件加速度计校准算法
因为不是外部设备(转台)进行标定,所以校准的原理与前面介绍的一样,都采用重力加速度作为参考。
建立模型:
accel_corr[3]是参考向量,也就是重力加速度向量
accel_T[3][3]是转换矩阵,包含旋转和尺度缩放
accel_raw[3]是实际测量的加速度向量
accel_offs[3]是加速度数据的零点偏移
飞控采用六面校准,即取6个面的数据,则可以得到参考向量。
分别对应头朝上,朝下,朝左,朝右,反向,水平放置,则实测的数据accel_raw_ref[6][3]。
步骤:
一、先求出每个轴的偏移,方法是利用重力加速度在每个轴上的最大最小数据,求和后除以2得到。
二、下面求accel_T[3][3]矩阵的参数,包含9个未知参数,一个轴有3个数据,每个方向有3个轴数据,所以这时只需采样3面数据即可。
展开:
即转换成A * x = b形式。
x = A^-1 * b
接着就是求解线性方程组,求出x矩阵,即accel_T[3][3]。
具体代码见src\modules\commander\accelerometer_calibration.cpp文件。
7.几个需要注意的点
Ø 前面有提到,在采集数据的时候,主要是要获得静态状态下数据,所以最好不要加速晃动飞控采集,同样的原理,比如开源pixhawk飞控校准的时候,在摆6个面的时候,尽量缓慢,且保持一段时间;
Ø 虽然求出了12个参数,但是pixhawk飞控输出加速度数据的时候,也只用了6个数据,3个零偏,3个尺度变换因子,即accel_T矩阵的对角元素;
Ø 前面所述的算法,只是核心的思想,PX4飞控实际的模型还包含了旋转信息。
这里的rot矩阵,主要是根据你的飞控安装方向,外置罗盘的安装方向进行的数据坐标系校正;
Ø 加速度数据的标定并不能保证你的飞行是水平的,如果有几度的安装误差,飞起来会怎样?很显然,飞机会以固定的角度,一直往一个地方飘。
如果有读者对飞控研发的某些知识点,有不清楚的地方可以在评论下写明,笔者会挑一些普遍的问题进行讲解。后续文章主要方向还是算法方面,且偏向工程应用,具体的理论推导就不阐述了。