相对于加速度计,Pixhawk中陀螺仪的校准比较简单。
陀螺仪的主要量测量为角速度,其安装在飞控中之后的量测模型如下:
Wm = K * Mi * Wb + delta + n
其中:
Wm[3] 为陀螺仪实际测到的角速度;
K[3][3] 为陀螺仪的刻度系数;
Mi[3][3] 为陀螺仪的安装矩阵,即陀螺仪与机体之间的旋转矩阵;
delta[3] 为陀螺仪零偏;
n[3] 为噪声。

由于Pixhawk中MEMS陀螺的精度都比较差,而实际使用时也只是提供瞬时的角速度值,且在姿态解算时算法会根据其他传感器的数据对陀螺数据进行修正。因此该模型可近似为:
Wm = K * Mi *Wb + delta
即略去了噪声项,剩下K,MI,delta三个参数需要标定。

首先,不同于加计有重力加速度g作为衡量标准来进行标定,陀螺仪的标定没有外界参考,总不能把飞机放在速率转台上进行标定测试。有人说不是有地球自转角速度吗?要知道,地球自转约24小时360度,折算下来大约0.004度/秒,这对于这种贴片式MEMS陀螺仪来说是根本测不到的。因此,陀螺仪的刻度系数K就没法精确测量了。(其实MEMS陀螺出厂有一个大致的标定,且刻度系数K的误差可在姿态解算时采用的比例系数进行纠正,因此该系数在程序中设定为1。)

其次,根据上述分析,Mi应该也无法测量。好在IMU要么是一体(即陀螺和加计的安装矢量一致),要么陀螺加计分开,但在制版贴片时一般也会将安装矢量对其。所以Mi可以采用标定加计时的旋转矩阵确定。

最后,就剩下delta了。前面也讲到,地球自转角速度为0.004度/秒,这相对于飞机的运动角速度简直就可以忽略,因此陀螺仪在静态下的输出Wm = 0 + delta,就是陀螺仪的零偏。

Pixhawk程序中就是将静态采集的陀螺仪数据累加求平均,作为零偏值进行补偿。

陀螺仪的校准程序位置:
src/modules/commander/gyro_calibration.cpp
主要用到函数
do_gyro_calibration(orb_advert_t mavlink_log_pub)

static calibrate_return gyro_calibration_worker(int cancel_sub, void
data)。
在此不再粘贴具体程序。