飞行控制 | 传感器原理、坐标转换、校准与数据融合

注:本文为 “飞行控制” 相关合辑。
图片清晰度受引文原图所限。
略作重排,未整理去重。
如有内容异常,请看原文。


基于四旋翼飞行器的陀螺仪、加速度计、磁力计传感器说明

williamgavin 原创于 2017-08-04 15:11:54 发布

本文详细介绍了陀螺仪、加速度计和磁力计的工作原理及其在飞行器中的应用,阐释了各传感器的特性,如陀螺仪测量旋转状态、加速度计检测受力情况、磁力计定位方位,并提供了传感器校准方法及飞行器 PID 调试步骤。

一、陀螺仪、加速度计和磁力计的定义及区别

1、陀螺仪、加速度计和磁力计的定义

(1)陀螺仪(Gyroscope、GYRO-Sensor) 又称角速率传感器,三轴陀螺仪的工作原理是通过测量三维坐标系内陀螺转子的垂直轴与设备之间的夹角,计算角速度,进而判别物体在三维空间的运动状态。三轴陀螺仪可同时测定上、下、左、右、前、后等 6 个方向(合成方向可分解为三轴坐标),最终能够判断设备的移动轨迹和加速度。简言之,陀螺仪通过测量自身旋转状态确定设备当前运动状态,包括运动方向(向前、向后、向上、向下、向左、向右)及角速度变化(加速或减速),但无法实现设备方位(东、南、西、北)的判断。

(2)加速度计(Accelerometer、G-Sensor) 又称重力感应器,能够感知任意方向上的加速度(重力加速度仅为地表垂直方向的加速度)。加速度计通过测量组件在某一轴向的受力情况输出结果,表现形式为轴向的加速度大小和方向( X X X Y Y Y Z Z Z)。其与陀螺仪存在一定相似性,但陀螺仪更侧重测量设备自身的旋转情况(原位运动),而加速度计主要用于测量设备的受力情况,即三轴运动情况。尽管加速度计可能在小范围内换算出角速度,但受设计原理限制,更适用于空间运动判断。

(3)磁力计(Magnetic、M-Sensor) 又称地磁传感器,可用于检测磁场强度和方向,实现设备方位的定位。磁力计的工作原理与指南针类似,能够测量当前设备与东、南、西、北四个方向的夹角。

2、陀螺仪、加速度计和磁力计的功能优势

(1)陀螺仪:擅长测量设备的自身旋转运动

(2)加速度计:擅长检测设备的受力情况

(3)磁力计:擅长检测设备的方位

3、具体应用场景

陀螺仪可感知“设备发生了旋转”,加速度计可感知“设备产生了直线位移(如向前移动若干距离)”,磁力计可感知“设备所处的方位(如朝向西方)”。

二、相关问答及技术说明

(1)飞行器传感器安装前校准的必要性

传感器的精度会随使用时间和温度变化而产生偏差,长期使用后会出现零点漂移现象,因此需要对传感器进行标定。传感器在使用过程中或存储后进行的性能复测称为校准,其本质与标定一致。若陀螺仪、加速度计和磁力计在安装前未进行校准,会直接影响飞行器的航向角(Yaw)、横滚角(Roll)和俯仰角(Pitch)的测量精度,进而影响飞行器的飞行稳定性和控制准确性。

(2)传感器校准的实现方法

  • 磁力计校准:需将设备进行全方位 72 0 ∘ 720^\circ 720 旋转(整体旋转轨迹类似球体运动)。通过上位机记录磁力计的 X X X Y Y Y Z Z Z 三轴原始数据,并将数据导入 Excel 表格进行处理。计算各轴数据的最大值与最小值的平均值,即 最大值 + 最小值 2 \frac{\text{最大值}+\text{最小值}}{2} 2最大值+最小值,再将磁力计原始数据减去该平均值,即可大致消除零点漂移的影响。建议多次测量并计算,理想状态下多组测量结果的偏差应极小。经校准后,后续试验中通常无需再次对磁力计进行校准。

  • 加速度计与陀螺仪校准:二者均有专用的校准语句,如下图所示:
    当上述语句赋值为 1 1 1 时,表示启动校准;赋值为 0 0 0 时,表示不进行校准。

    在这里插入图片描述

(3)飞行器 PID 调试方法及步骤

PID 调试的重点是明确调节目标,清晰分辨比例(P)、积分(I)、微分(D)参数取值过大或过小对系统的影响,且调试初期需确保四轴稳定时角速度为 0 0 0,若不为 0 0 0,需在原始数据中扣除偏差值。

  • P 调节(比例调节):只要被控对象存在误差,比例调节即会启动。参数取值过小会导致控制效果不佳;取值过大则会使系统不稳定,存在静差,施加外力后易出现震荡。实际调节中,应使系统处于“刚出现震荡但能最快稳定”的状态。(对应误差的当前状态)

  • I 调节(积分调节):只要被控对象存在静差,积分调节便会发挥作用,其主要功能是减小甚至消除静差。参数取值过小会导致系统不稳定;取值过大则会产生超调现象,引发震荡,同时会增加调节时间。实际调节中,建议先调节 P 参数、再调节 D 参数,最后调节 I 参数,前期通过 P、D 调节使系统效果达到较好水平,再通过 I 调节进一步提升系统稳定性。(对应误差的过去累积状态)

  • D 调节(微分调节):主要作用是加快调节响应速度,缩短调节时间,实现系统的快速响应。参数取值过小会导致调节时间过长,调节效果不佳;取值过大则会使系统不稳定,产生震荡。其本质是对未来误差的预测。(对应误差的未来变化趋势)

推荐调节思路:按 P → D → I P \to D \to I PDI 的顺序调节,可使系统达到稳定状态。具体操作如下:先将 D D D I I I 参数置为 0 0 0,逐步增大 P P P 参数,直至飞行器出现适当过冲并开始震荡;随后增加 D D D 参数,削弱 P P P 调节后期的作用,缓解过冲现象,直至无过冲;最后加入 I I I 调节,优化系统稳定性。

第一步:调节内环 Pitch 通道

(1)将期望角度直接输入内环;
(2)修改输出参数,仅输出 P i t c h Pitch Pitch 相关值,即 KaTeX parse error: Expected 'EOF', got '_' at position 14: \text{posture_̲value}[0] = 0 -…,共输出 4 组数据;
(3)飞行器静止时,通过上位机观测角速度是否为 0 0 0,若不为 0 0 0,需在原始数据中扣除偏差值(理论上静止状态下角速度应为 0 0 0,实际存在偏差时需进行修正);
(4)在匿名上位机中输入 PID 参数,反复调试直至角度稳定;
(5)将确定的 PID 参数写入程序文件( p a r a m e t e r . c parameter.c parameter.c);
(6)下载程序至飞行器。

第二步:调节外环 Pitch 通道

(1)启用外环控制,将外环输出作为内环输入,同时将期望值输入外环;
(2)修改外环 PID 参数,直至施加外力后,飞行器能快速恢复至角度为 0 0 0 的初始位置;
(3)将确认的 PID 参数写入程序文件;
(4)下载程序并进行验证。

第三步:调节 Roll 通道内环参数

调试方法与“调节内环 Pitch 通道”一致。

第四步:调节 Roll 通道外环参数

调试方法与“调节外环 Pitch 通道”一致。

第五步:系统微调

根据实际试飞情况,观察飞行姿态及误差,进行参数微调(若在调试架上已调试至最佳状态,实际飞行时通常不会出现明显问题)。

注意事项:当 Roll、Pitch 方向的 PID 参数调试完成后,需将 out_rollout_pitchout_yaw 三个参数赋值至 posture\_value}[] 数组中;若未完成该操作,飞行器飞行过程中易出现姿态失稳问题,进而引发翻机的安全风险。

三、参考资料

什么是陀螺仪、加速度计、磁力计

陀螺仪、加速度计、磁力仪等传感器汇总


无人机运动学控制中的坐标系及惯性坐标系与机体坐标系之间的矩阵转换、欧拉角

autotian 原创于 2019-10-24 17:33:23 发布

一、无人机控制中的坐标系

在无人机运动学研究中,涉及三种关键坐标系。

1.1 地球中心坐标系(ECEF)

地球中心坐标系的原点位于地心。X 轴通过格林尼治子午线与赤道的交点,正方向由原点指向该交点;Z 轴从原点指向北极;Y 轴与 X、Z 轴构成右手坐标系。

在该坐标系下,点的位置用 GPS 坐标表示时,对应 WGS-84 坐标系。WGS-84 坐标系中,X 轴指向 BIH(国际时间服务机构)1984.0 定义的零子午面(格林尼治子午线)与协议地球极(CTP)赤道的交点;Z 轴指向 CTP 方向;Y 轴与 X、Z 轴构成右手坐标系。

GPS 可获取 WGS-84 坐标系中的速度向量,为便于利用该速度向量进行无人机控制,需将其转换至无人机所在位置的“平面坐标系”。

1.2 NED 坐标系

由于地心坐标系下 GPS 信号的形式不便于直接应用于无人机控制,因此引入 NED 坐标系。NED 坐标系是导航计算中常用的坐标系,其三个坐标轴分别指向北、东、地,故又称北东地坐标系,三个方向保持固定。

当无人机搜星满足起飞条件后,该位置可确定为 NED 坐标系的原点。

1.3 机体坐标系

机体坐标系与飞行器固联,符合右手法则,原点位于飞行器重心处。X 轴指向飞行器机头前进方向,Y 轴由原点指向飞行器右侧,Z 轴方向通过 X、Y 轴按右手法则确定。机体坐标系是无人机惯性导航的基础坐标系,IMU(惯性测量单元)获取的加速度状态信息均为该坐标系下的数值。IMU 输出的 X 轴加速度信息,不能直接应用于 NED 坐标系。

无人机中的坐标转换,核心是 NED 坐标系(惯性系)与机体坐标系之间的转换。

二、无人机 IMU 单元

IMU 单元(惯性测量单元)是用于测量物体三轴姿态角(角速率)及加速度的装置。IMU 由陀螺仪和加速度计组成,具体功能如下:

  • 陀螺仪:检测载体相对于导航坐标系的角速度信号;
  • 加速度计:三个单轴加速度计分别检测物体在坐标系独立三轴的加速度信号。

IMU 的精度直接影响惯性系统的整体精度。

三、无人机中矩阵的确定与变换

3.1 无人机的姿态

空间中的无人机可通过其位置和方向进行完整描述。

O − x y z O-xyz Oxyz 为标准正交坐标系, x , y , z \mathbf{x}, \mathbf{y}, \mathbf{z} x,y,z 为其单位向量。图中无人机的参考点为 O ′ O' O,其在空间中的位置可表示为:

o ′ = o x ′ x + o y ′ y + o z ′ z \mathbf{o'} = o'_x \mathbf{x} + o'_y \mathbf{y} + o'_z \mathbf{z} o=oxx+oyy+ozz

其中, o x ′ , o y ′ , o z ′ o'_x, o'_y, o'_z ox,oy,oz 分别为无人机参考点 O ′ O' O x , y , z x, y, z x,y,z 轴上的坐标分量。

O ′ O' O 的坐标可简洁表示为列向量:

o ′ = [ o x ′ o y ′ o z ′ ] \mathbf{o'} = \begin{bmatrix} o'_x \\ o'_y \\ o'_z \end{bmatrix} o= oxoyoz

3.1.1 坐标系与无人机方向约束

通过坐标系 O − x y z O-xyz Oxyz 可约束无人机位置,但无法约束其方向,后续将详细描述该坐标系的方向表征方法。

3.1.2 机身上坐标系的引入

为确定无人机方向,引入固连于无人机机身的坐标系 O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz x ′ , y ′ , z ′ x', y', z' x,y,z 为该坐标系的单位向量,其与 O − x y z O-xyz Oxyz 的转换关系为:

{ x ′ = x x ′ x + x y ′ y + x z ′ z y ′ = y x ′ x + y y ′ y + y z ′ z z ′ = z x ′ x + z y ′ y + z z ′ z \begin{cases} x' = x_x' x + x_y' y + x_z' z \\ y' = y_x' x + y_y' y + y_z' z \\ z' = z_x' x + z_y' y + z_z' z \end{cases} x=xxx+xyy+xzzy=yxx+yyy+yzzz=zxx+zyy+zzz

3.2 旋转矩阵

(注:3.2 中旋转矩阵与 3.1 中式子各分量定义不一致,需结合式子定义理解)

描述无人机方向的 x ′ , y ′ , z ′ x', y', z' x,y,z 可用矩阵表示为:

R = [ x ′ y ′ z ′ ] = [ x x ′ y x ′ z x ′ x y ′ y y ′ z y ′ x z ′ y z ′ z z ′ ] = [ x ′ T x y ′ T x z ′ T x x ′ T y y ′ T y z ′ T y x ′ T z y ′ T z z ′ T z ] R = \begin{bmatrix} x' & y' & z' \end{bmatrix} = \begin{bmatrix} x_x' & y_x' & z_x' \\ x_y' & y_y' & z_y' \\ x_z' & y_z' & z_z' \end{bmatrix} = \begin{bmatrix} x'^T x & y'^T x & z'^T x \\ x'^T y & y'^T y & z'^T y \\ x'^T z & y'^T z & z'^T z \end{bmatrix} R=[xyz]= xxxyxzyxyyyzzxzyzz = xTxxTyxTzyTxyTyyTzzTxzTyzTz

第三个矩阵中,因 x x x 为单位向量 ( 1 , 0 , 0 ) (1,0,0) (1,0,0),其与向量 x ′ x' x 的点积结果即为 x x ′ x_x' xx 的值。上述矩阵 R R R 被称为旋转矩阵。

3.2.1 旋转矩阵的正交性

由于 x ′ , y ′ , z ′ x', y', z' x,y,z 是正交坐标系下的单位向量,因此它们彼此正交且模长为 1,满足:

{ x ′ T y ′ = 0 ,   y ′ T z ′ = 0 ,   z ′ T x ′ = 0 x ′ T x ′ = 1 ,   y ′ T y ′ = 1 ,   z ′ T z ′ = 1 \begin{cases} x'^T y' = 0, \ y'^T z' = 0, \ z'^T x' = 0 \\ x'^T x' = 1, \ y'^T y' = 1, \ z'^T z' = 1 \end{cases} {xTy=0, yTz=0, zTx=0xTx=1, yTy=1, zTz=1

因此, R R R 是正交矩阵,满足:

R T R = I 3 R T = R − 1 R^T R = I_3 \\ R^T = R^{-1} RTR=I3RT=R1

且有:

det ⁡ ( R ) = ± 1 \det(R) = \pm 1 det(R)=±1

若坐标系遵循右手法则,则 det ⁡ ( R ) = 1 \det(R) = 1 det(R)=1;若为左手法则,则 det ⁡ ( R ) = − 1 \det(R) = -1 det(R)=1

3.2.2 基本旋转

坐标系 O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 可视为由坐标系 O − x y z O-xyz Oxyz 通过基本旋转得到。旋转方向为逆时针时,旋转角度取值为正。

假定坐标系 O − x y z O-xyz Oxyz z z z 轴旋转角度 α \alpha α,其单位向量可表示为:

x ′ = [ cos ⁡ α sin ⁡ α 0 ] y ′ = [ − sin ⁡ α cos ⁡ α 0 ] z ′ = [ 0 0 1 ] \begin{aligned} \mathbf{x'} &= \begin{bmatrix} \cos\alpha \\ \sin\alpha \\ 0 \end{bmatrix} & \quad \mathbf{y'} &= \begin{bmatrix} -\sin\alpha \\ \cos\alpha \\ 0 \end{bmatrix} & \quad \mathbf{z'} &= \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix} \end{aligned} x= cosαsinα0 y= sinαcosα0 z= 001

因此,绕 z z z 轴旋转的矩阵可表示为:

R z ( α ) = [ cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ] R_{z}(\alpha) = \begin{bmatrix} \cos\alpha & -\sin\alpha & 0 \\ \sin\alpha & \cos\alpha & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} Rz(α)= cosαsinα0sinαcosα0001

同理,绕 y y y 轴和绕 x x x 轴旋转的旋转矩阵分别为:

R y ( β ) = [ cos ⁡ β 0 sin ⁡ β 0 1 0 − sin ⁡ β 0 cos ⁡ β ] R_{y}(\beta) = \begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\ -\sin\beta & 0 & \cos\beta \\ \end{bmatrix} Ry(β)= cosβ0sinβ010sinβ0cosβ

R x ( γ ) = [ 1 0 0 0 cos ⁡ γ − sin ⁡ γ 0 sin ⁡ γ cos ⁡ γ ] R_{x}(\gamma) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\gamma & -\sin\gamma \\ 0 & \sin\gamma & \cos\gamma \\ \end{bmatrix} Rx(γ)= 1000cosγsinγ0sinγcosγ

这些矩阵可用于描述空间中的任意旋转。

通过上述矩阵可证明,旋转矩阵满足:

R k ( − ϑ ) = R k T ( ϑ ) ( k = x , y , z ) R_{k}(-\vartheta) = R_{k}^{T}(\vartheta) \quad (k = x, y, z) Rk(ϑ)=RkT(ϑ)(k=x,y,z)

3.2.3 一个向量的旋转表述

为进一步理解旋转矩阵的几何意义,设两坐标系原点重合,即 o ′ = 0 o' = 0 o=0 0 0 0 表示零向量)。

向量 p \boldsymbol{p} p 可表示为:

p = [ p x p y p z ] \boldsymbol{p} = \begin{bmatrix} p_x \\ p_y \\ p_z \\ \end{bmatrix} p= pxpypz

变换后的向量 p ′ \boldsymbol{p}' p 可表示为:

p ′ = [ p x ′ p y ′ p z ′ ] \boldsymbol{p}' = \begin{bmatrix} p'_x \\ p'_y \\ p'_z \\ \end{bmatrix} p= pxpypz

3.2.3.1 坐标系间的点坐标变换

其中, p \boldsymbol{p} p p ′ \boldsymbol{p}' p 分别对应同一空间点 P P P 在坐标系 O − x y z O-xyz Oxyz O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 中的坐标。

根据 O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 系到 O − x y z O-xyz Oxyz 系的坐标转换关系,有:

p = p x ′ x ′ + p y ′ y ′ + p z ′ z ′ = [ x ′ y ′ z ′ ] p ′ \boldsymbol{p} = p'_x \boldsymbol{x}' + p'_y \boldsymbol{y}' + p'_z \boldsymbol{z}' = \begin{bmatrix} \boldsymbol{x}' & \boldsymbol{y}' & \boldsymbol{z}' \end{bmatrix} \boldsymbol{p}' p=pxx+pyy+pzz=[xyz]p

令旋转矩阵 R = [ x ′ y ′ z ′ ] \boldsymbol{R} = \begin{bmatrix} \boldsymbol{x}' & \boldsymbol{y}' & \boldsymbol{z}' \end{bmatrix} R=[xyz],则坐标转换关系可表示为:

p = R p ′ \boldsymbol{p} = \boldsymbol{R} \boldsymbol{p}' p=Rp

旋转矩阵 R \boldsymbol{R} R 描述了向量从 O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 系到 O − x y z O-xyz Oxyz 系的转换。由于旋转矩阵满足正交性 R T R = I \boldsymbol{R}^T \boldsymbol{R} = \boldsymbol{I} RTR=I I \boldsymbol{I} I 为单位矩阵),对上式两边左乘 R T \boldsymbol{R}^T RT,可得逆转换关系:

p ′ = R T p \boldsymbol{p}' = \boldsymbol{R}^T \boldsymbol{p} p=RTp

例 3.1

设两坐标系原点重合,且 O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 系由 O − x y z O-xyz Oxyz 系绕 z z z 轴旋转 α \alpha α 得到。由几何关系可得:

z z z 轴的坐标转换关系

P P P O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 系中的坐标为 p ′ = [ p x ′ p y ′ p z ′ ] T \boldsymbol{p}' = \begin{bmatrix} p'_x & p'_y & p'_z \end{bmatrix}^T p=[pxpypz]T,绕 z z z 轴旋转角度 α \alpha α 后,在 O − x y z O-xyz Oxyz 系中的坐标 p = [ p x p y p z ] T \boldsymbol{p} = \begin{bmatrix} p_x & p_y & p_z \end{bmatrix}^T p=[pxpypz]T 满足分量关系:

{ p x = p x ′ cos ⁡ α − p y ′ sin ⁡ α p y = p x ′ sin ⁡ α + p y ′ cos ⁡ α p z = p z ′ \begin{cases} p_x = p'_x \cos\alpha - p'_y \sin\alpha \\ p_y = p'_x \sin\alpha + p'_y \cos\alpha \\ p_z = p'_z \end{cases} px=pxcosαpysinαpy=pxsinα+pycosαpz=pz

该转换关系可通过绕 z z z 轴的旋转矩阵 R z ( α ) \boldsymbol{R}_z (\alpha) Rz(α) 表示为矩阵形式:

R z ( α ) = [ cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ] \boldsymbol{R}_z (\alpha) = \begin{bmatrix} \cos\alpha & -\sin\alpha & 0 \\ \sin\alpha & \cos\alpha & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(α)= cosαsinα0sinαcosα0001

即:

p = R z ( α ) p ′ \boldsymbol{p} = \boldsymbol{R}_z (\alpha) \boldsymbol{p}' p=Rz(α)p

旋转矩阵的几何意义

基于同一原点的两个坐标系间的坐标转换可通过旋转矩阵描述。旋转矩阵不仅定义了坐标系的方位关系,还刻画了向量在两个坐标系间的线性变换规则。

3.2.4 一个向量的旋转

3.2.3 节利用旋转矩阵实现了向量在不同坐标系间的转换,旋转矩阵还可表示同一坐标系下向量的旋转操作。

p ′ \boldsymbol{p}' p O − x y z O-xyz Oxyz 系下的向量, R ⋅ p ′ R \cdot \boldsymbol{p}' Rp 可生成一个与 p ′ \boldsymbol{p}' p 模长相同的向量 p \boldsymbol{p} p。该性质可通过 p T ⋅ p = p ′ T ⋅ R T ⋅ R ⋅ p ′ p^T \cdot p = p'^T \cdot R^T \cdot R \cdot p' pTp=pTRTRp R T ⋅ R = I 3 R^T \cdot R = I_3 RTR=I3 证明。

例 3.2

O − x y z O-xyz Oxyz 系中,设位于 x y xy xy 平面的向量 p ′ \boldsymbol{p}' p z z z 轴旋转 α \alpha α 角。若 p ′ \boldsymbol{p}' p 的坐标为 p x ′ , p y ′ , p z ′ p'_x, p'_y, p'_z px,py,pz,则旋转后的向量 p \boldsymbol{p} p 可表示为:

{ p x = p x ′ cos ⁡ α − p y ′ sin ⁡ α p y = p x ′ sin ⁡ α + p y ′ cos ⁡ α p z = p z ′ \begin{cases} p_x = p'_x \cos\alpha - p'_y \sin\alpha \\ p_y = p'_x \sin\alpha + p'_y \cos\alpha \\ p_z = p'_z \end{cases} px=pxcosαpysinαpy=pxsinα+pycosαpz=pz

该关系可用旋转矩阵简洁表示为:

p = R z ( α ) ⋅ p ′ \boldsymbol{p} = R_{z}(\alpha) \cdot \boldsymbol{p}' p=Rz(α)p

综上,旋转矩阵具有两项核心功能:一是描述两个坐标系之间的转换关系及向量在不同坐标系间的转换规则;二是实现同一坐标系下向量的旋转操作。

例 3.1 与例 3.2 的差异

两例分别对应旋转矩阵的两类应用场景。

例 3.1(3.2.3 节)跨坐标系的向量转换例 3.2(3.2.4 节)同坐标系的向量旋转
前提含两个原点重合的坐标系( O − x y z O-xyz Oxyz O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz), O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 系由 O − x y z O-xyz Oxyz 系绕 z z z 轴旋转 α \alpha α 得到。仅含一个坐标系( O − x y z O-xyz Oxyz),无额外坐标系。
描述对象同一空间点 P P P 在不同坐标系下的坐标转换( p ′ \boldsymbol{p}' p P P P O ′ − x ′ y ′ z ′ O'-x'y'z' Oxyz 系坐标, p \boldsymbol{p} p P P P O − x y z O-xyz Oxyz 系坐标)。同一坐标系下单个向量的旋转( p ′ \boldsymbol{p}' p 为旋转前向量, p \boldsymbol{p} p 为旋转后向量,二者处于同一 O − x y z O-xyz Oxyz 系)。
物理本质坐标系方位变化导致点的坐标表示改变,点在空间中位置不变。向量在空间中方向旋转,坐标变化源于自身方向改变,坐标系固定。
公式意义体现不同坐标系间的向量转换规则,旋转矩阵 R z ( α ) R_z(\alpha) Rz(α) 作为坐标系间的转换桥梁。体现同一坐标系下的向量旋转操作,旋转矩阵 R z ( α ) R_z(\alpha) Rz(α) 作为向量旋转的操作算子。
  • 例 3.1 跨坐标系的坐标转换,不同坐标系下点坐标的换算;例 3.2 同坐标系的向量旋转,固定坐标系内向量的旋转实现;二者通过场景一致的数学形式,展现旋转矩阵的通用性。

  • 旋转矩阵 R z ( α ) R_z(\alpha) Rz(α) 本质是线性变换算子,作用是对向量进行旋转式线性变换;

  • 例 3.1 中,坐标系绕 z z z 轴转 α \alpha α 等价于向量绕 z z z 轴转 − α -\alpha α,因旋转矩阵正交性 R z ( − α ) = R z T ( α ) R_z(-\alpha)=R_z^T(\alpha) Rz(α)=RzT(α),转换关系与向量直接旋转 α \alpha α 形式一致;

  • 例 3.2 中,直接对向量应用旋转算子 R z ( α ) R_z(\alpha) Rz(α),是线性变换的直接体现。

3.3 旋转矩阵的组合

为推导旋转矩阵的组合规则,考虑以共同原点 O O O 为基础的三个坐标系 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 O − x 1 y 1 z 1 O-x_1y_1z_1 Ox1y1z1 O − x 2 y 2 z 2 O-x_2y_2z_2 Ox2y2z2。向量 p \boldsymbol{p} p 在这三个坐标系中的表示分别为 p 0 \boldsymbol{p}^0 p0 p 1 \boldsymbol{p}^1 p1 p 2 \boldsymbol{p}^2 p2

R i j R_{i}^{j} Rij 表示坐标系 i i i 转换至坐标系 j j j 的旋转矩阵,则有:

  1. p 1 = R 0 1 p 0 \boldsymbol{p}^1 = R_{0}^{1} \boldsymbol{p}^0 p1=R01p0(从 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 系到 O − x 1 y 1 z 1 O-x_1y_1z_1 Ox1y1z1 系的转换);
  2. p 0 = R 1 0 p 1 \boldsymbol{p}^0 = R_{1}^{0} \boldsymbol{p}^1 p0=R10p1(从 O − x 1 y 1 z 1 O-x_1y_1z_1 Ox1y1z1 系到 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 系的转换);
  3. p 0 = R 2 0 p 2 \boldsymbol{p}^0 = R_{2}^{0} \boldsymbol{p}^2 p0=R20p2(从 O − x 2 y 2 z 2 O-x_2y_2z_2 Ox2y2z2 系到 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 系的转换)。

将第一式和第三式代入第二式,可得:

R 2 0 = R 0 1 R 2 1 R_{2}^{0} = R_{0}^{1} R_{2}^{1} R20=R01R21

该式描述了连续旋转的组合规则。初始坐标系 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 通过 R 2 0 R_{2}^{0} R20 旋转至 O − x 2 y 2 z 2 O-x_2y_2z_2 Ox2y2z2 系的过程可分解为两步:

  1. 基于 R 1 0 R_{1}^{0} R10 旋转,建立与 O − x 1 y 1 z 1 O-x_1y_1z_1 Ox1y1z1 系的联系;
  2. 基于 R 2 1 R_{2}^{1} R21 旋转,建立与 O − x 2 y 2 z 2 O-x_2y_2z_2 Ox2y2z2 系的联系。

所有旋转均可表示为一系列微小旋转的组合,每个旋转基于前一个坐标系进行,连续旋转的组合通过旋转矩阵的右乘实现。根据 R i j R_{i}^{j} Rij 的性质 R T = R − 1 R^T = R^{-1} RT=R1,可得:

R i j = ( R j i ) − 1 = ( R j i ) T R_{i}^{j} = (R_{j}^{i})^{-1} = (R_{j}^{i})^T Rij=(Rji)1=(Rji)T

连续旋转也可基于固定坐标系描述,即所有旋转均参考初始坐标系 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 进行。设 R 1 0 R_{1}^{0} R10 O − x 1 y 1 z 1 O-x_1y_1z_1 Ox1y1z1 系基于 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 系的旋转矩阵, R 2 0 R_{2}^{0} R20 O − x 2 y 2 z 2 O-x_2y_2z_2 Ox2y2z2 系基于 O − x 0 y 0 z 0 O-x_0y_0z_0 Ox0y0z0 系的旋转矩阵(包含 O − x 1 y 1 z 1 O-x_1y_1z_1 Ox1y1z1 系基于 R 2 1 R_{2}^{1} R21 的旋转),则有:

R 2 0 = R 2 1 R 1 0 R_2^0 = R_2^1 R_1^0 R20=R21R10

其中, R 2 0 R_2^0 R20 为基于固定坐标系的连续旋转组合,通过单个旋转矩阵的左乘获得。

旋转组合的关键特性是矩阵乘法不满足交换律,因此两个旋转矩阵的组合结果依赖于单个旋转的执行顺序。

例 3.3

下图展示了物体坐标系在不同旋转次序下的最终方向差异,直观体现了旋转顺序对结果的影响。

四、欧拉角

旋转矩阵包含九个元素,但由于正交矩阵的约束条件,这些元素并非完全独立(存在六个约束关系)。描述刚性物体的方向仅需三个独立参数,这种基于三个参数的方向描述称为最小表示。最小表示可通过角度集合 ϕ = [ φ , υ , ψ ] T \phi = [\varphi, \upsilon, \psi]^T ϕ=[φ,υ,ψ]T 实现。

坐标系的基本旋转矩阵(3.2.2 节所述)是单个角度的函数,连续两次旋转的组合共有 27 种可能,其中 12 种符合物理意义(第一次旋转有 3 个轴可选,第二次旋转排除已选轴有 2 种选择,第三次旋转排除第二次所选轴有 2 种选择,总计 3 × 2 × 2 = 12 3 \times 2 \times 2 = 12 3×2×2=12 种)。这 12 种组合均属于欧拉角的不同形式,本节重点介绍 ZYX(Roll-Pitch-Yaw)型欧拉角(滚转 - 俯仰 - 偏航)。

4.1 RPY 角

RPY 角起源于航海领域,属于 ZYX 型欧拉角,又称 Roll-Pitch-Yaw(滚转 - 俯仰 - 偏航),用于描述飞行器在空中的姿态变化。角度集合 ϕ = [ φ , υ , ψ ] T \phi = [\varphi, \upsilon, \psi]^T ϕ=[φ,υ,ψ]T 可表示固定于飞行器质点的坐标系。

4.1.1 滚转 - 俯仰 - 偏航角的定义

滚转(Roll)、俯仰(Pitch)和偏航(Yaw)的定义与坐标系轴线设置相关,具体如下:绕 x x x 轴的旋转为偏航角,绕 y y y 轴的旋转为俯仰角,绕 z z z 轴的旋转为滚转角。

对于飞机而言,机头方向指向 z z z 轴正方向, x x x 轴正方向定义为机身上方,坐标系设置如下图所示:

4.1.2 旋转矩阵与飞机坐标系
  1. z z z 轴旋转角度 ψ \psi ψ(偏航角),对应的旋转矩阵为 R z ( ψ ) R_z(\psi) Rz(ψ)

  1. y y y 轴旋转角度 θ \theta θ(俯仰角),对应的旋转矩阵为 R y ( θ ) R_y(\theta) Ry(θ)

  1. x x x 轴旋转角度 ϕ \phi ϕ(滚转角),对应的旋转矩阵为 R x ( ϕ ) R_x(\phi) Rx(ϕ)

坐标系旋转的组合结果可通过基于固定坐标系的基本旋转矩阵自左乘获得,即:

R ( ϕ ) = R z ( φ ) R y ( ψ ) R x ( θ ) R(\phi) = R_z(\varphi) R_y(\psi) R_x(\theta) R(ϕ)=Rz(φ)Ry(ψ)Rx(θ)

展开后为:

R ( ϕ ) = [ cos ⁡ φ cos ⁡ θ − sin ⁡ φ cos ⁡ φ sin ⁡ θ sin ⁡ φ cos ⁡ θ cos ⁡ φ sin ⁡ φ sin ⁡ θ − sin ⁡ θ 0 cos ⁡ θ ] [ cos ⁡ ψ 0 sin ⁡ ψ 0 1 0 − sin ⁡ ψ 0 cos ⁡ ψ ] [ 1 0 0 0 cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ ] = [ c φ c θ c φ s θ s ψ − s φ c ψ c φ s θ c ψ + s φ s ψ s φ c θ s φ s θ s ψ + c φ c ψ s φ s θ c ψ − c φ s ψ − s θ c θ s ψ c θ c ψ ] \begin{aligned} R(\phi) &= \begin{bmatrix} \cos\varphi\cos\theta & -\sin\varphi & \cos\varphi\sin\theta \\ \sin\varphi\cos\theta & \cos\varphi & \sin\varphi\sin\theta \\ -\sin\theta & 0 & \cos\theta \end{bmatrix} \begin{bmatrix} \cos\psi & 0 & \sin\psi \\ 0 & 1 & 0 \\ -\sin\psi & 0 & \cos\psi \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix} \\ &= \begin{bmatrix} c_{\varphi}c_{\theta} & c_{\varphi}s_{\theta}s_{\psi} - s_{\varphi}c_{\psi} & c_{\varphi}s_{\theta}c_{\psi} + s_{\varphi}s_{\psi} \\ s_{\varphi}c_{\theta} & s_{\varphi}s_{\theta}s_{\psi} + c_{\varphi}c_{\psi} & s_{\varphi}s_{\theta}c_{\psi} - c_{\varphi}s_{\psi} \\ -s_{\theta} & c_{\theta}s_{\psi} & c_{\theta}c_{\psi} \end{bmatrix} \end{aligned} R(ϕ)= cosφcosθsinφcosθsinθsinφcosφ0cosφsinθsinφsinθcosθ cosψ0sinψ010sinψ0cosψ 1000cosθsinθ0sinθcosθ = cφcθsφcθsθcφsθsψsφcψsφsθsψ+cφcψcθsψcφsθcψ+sφsψsφsθcψcφsψcθcψ

其中, c ⋅ = cos ⁡ ( ⋅ ) c_{\cdot} = \cos(\cdot) c=cos() s ⋅ = sin ⁡ ( ⋅ ) s_{\cdot} = \sin(\cdot) s=sin()

设旋转矩阵 R R R 为:

R = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] R = \begin{bmatrix} r_{11} & r_{12} & r_{13} \\ r_{21} & r_{22} & r_{23} \\ r_{31} & r_{32} & r_{33} \end{bmatrix} R= r11r21r31r12r22r32r13r23r33

根据 ZYX 型欧拉角(滚转 ϕ \phi ϕ、俯仰 θ \theta θ、偏航 ψ \psi ψ)与旋转矩阵的对应关系,可通过以下公式求解欧拉角:

  • 当俯仰角 θ ∈ ( − π / 2 , π / 2 ) \theta \in (-\pi/2, \pi/2) θ(π/2,π/2)(无人机常规姿态,无大角度翻转)时:
    ϕ = Atan2 ( r 21 , r 11 ) θ = Atan2 ( − r 31 , r 32 2 + r 33 2 ) ψ = Atan2 ( r 32 , r 33 ) \begin{aligned} \phi &= \text{Atan2}(r_{21}, r_{11}) \\ \theta &= \text{Atan2}\left(-r_{31}, \sqrt{r_{32}^2 + r_{33}^2}\right) \\ \psi &= \text{Atan2}(r_{32}, r_{33}) \end{aligned} ϕθψ=Atan2(r21,r11)=Atan2(r31,r322+r332 )=Atan2(r32,r33)

  • 当俯仰角 θ ∈ ( π / 2 , 3 π / 2 ) \theta \in (\pi/2, 3\pi/2) θ(π/2,3π/2)(无人机大角度翻转,如倒飞、俯仰角超90°)时:
    ϕ = Atan2 ( − r 21 , − r 11 ) θ = Atan2 ( − r 31 , − r 32 2 + r 33 2 ) ψ = Atan2 ( − r 32 , − r 33 ) \begin{aligned} \phi &= \text{Atan2}(-r_{21}, -r_{11}) \\ \theta &= \text{Atan2}\left(-r_{31}, -\sqrt{r_{32}^2 + r_{33}^2}\right) \\ \psi &= \text{Atan2}(-r_{32}, -r_{33}) \end{aligned} ϕθψ=Atan2(r21,r11)=Atan2(r31,r322+r332 )=Atan2(r32,r33)

其中, Atan2 ( y , x ) \text{Atan2}(y, x) Atan2(y,x) 为双参数反正切函数,用于计算 y / x y/x y/x 的反正切值(区别于单参数 arctan ⁡ ( y / x ) \arctan(y/x) arctan(y/x)),可通过 y y y x x x 的正负直接判断角度所在象限,从而确定 [ 0 , 2 π ) [0, 2\pi) [0,2π) 范围内的唯一角度值。

4.2 无人机中的欧拉角

结合前文旋转矩阵的相关知识,以下具体探讨其在无人机中的应用。

在无人机系统中,定义:

  • z z z 轴的旋转为偏航角(Yaw);
  • y y y 轴的旋转为俯仰角(Pitch);
  • x x x 轴的旋转为滚转角(Roll)。

如 3.2.2 节所述,基本旋转矩阵可用于将变换后的位移、速度、力转换为原坐标系下的对应物理量。若已知无人机相对于惯性系(NED 坐标系)的角度,即可确定其在惯性系下的运动状态。若以无人机机体坐标系为原始坐标系,需将机体坐标系下的变量转换至惯性系时,需乘以旋转矩阵的逆。由于旋转矩阵的逆等于其转置,转换矩阵表达式如下:

R b / m = R ϕ R θ R ψ = [ cos ⁡ θ cos ⁡ ψ cos ⁡ θ sin ⁡ ψ − sin ⁡ θ sin ⁡ ϕ sin ⁡ θ cos ⁡ ψ − cos ⁡ ϕ sin ⁡ ψ sin ⁡ ϕ sin ⁡ θ sin ⁡ ψ + cos ⁡ ϕ cos ⁡ ψ sin ⁡ ϕ cos ⁡ θ cos ⁡ ϕ sin ⁡ θ cos ⁡ ψ + sin ⁡ ϕ sin ⁡ ψ cos ⁡ ϕ sin ⁡ θ sin ⁡ ψ − sin ⁡ ϕ cos ⁡ ψ cos ⁡ ϕ cos ⁡ θ ] \begin{aligned} R_{b/m} &= R_{\phi} R_{\theta} R_{\psi} \\ &= \begin{bmatrix} \cos\theta \cos\psi & \cos\theta \sin\psi & -\sin\theta \\ \sin\phi \sin\theta \cos\psi - \cos\phi \sin\psi & \sin\phi \sin\theta \sin\psi + \cos\phi \cos\psi & \sin\phi \cos\theta \\ \cos\phi \sin\theta \cos\psi + \sin\phi \sin\psi & \cos\phi \sin\theta \sin\psi - \sin\phi \cos\psi & \cos\phi \cos\theta \end{bmatrix} \end{aligned} Rb/m=RϕRθRψ= cosθcosψsinϕsinθcosψcosϕsinψcosϕsinθcosψ+sinϕsinψcosθsinψsinϕsinθsinψ+cosϕcosψcosϕsinθsinψsinϕcosψsinθsinϕcosθcosϕcosθ

其中, R b / m R_{b/m} Rb/m 表示以机体坐标系为原始坐标系,将机体坐标系下的变量转换至惯性系所需的旋转矩阵。

4.3 无人机中的万向锁

陀螺仪由一根穿过圆盘的轴线及高速旋转的圆盘(转子)组成。根据陀螺定轴性原理,陀螺的自转轴(竖直轴)在惯性空间内的方向保持不变。


无人机中的 IMU 单元(MEMS 三轴加速计、三轴陀螺仪、三轴磁力计)

autotian 原创于 2020-03-01 22:41:03 发布

1、三轴加速度计

(1)测量比力

三轴加速度计是一种惯性传感器,用于测量物体的比力。比力定义为去除重力后的整体加速度,或单位质量上所受的非引力作用力。当加速度计处于静止状态时,其可感知重力加速度,此时整体加速度为 0 0 0;当加速度计做自由落体运动时,整体加速度等于重力加速度,但传感器内部处于失重状态,此时三轴加速度计的输出为 0 0 0

(2)测量角度

基于上述工作原理,三轴加速度计可用于测量角度。如图所示,加速度计内部弹簧的压缩量由传感器与地面的夹角决定,而比力可通过弹簧压缩长度间接测量。因此,在无外力作用的情况下,加速度计能够精确测量俯仰角和滚转角,且测量结果无累积误差。

MEMS 三轴加速度计的工作原理主要包括压阻式、压电式和电容式三种:

  • 压阻式:比力(压力或位移)与传感器电阻变化成正比;
  • 压电式:比力与传感器输出电压变化成正比;
  • 电容式:比力与传感器电容变化成正比。

上述物理量的变化可通过对应的放大电路和滤波电路进行采集。该类传感器的显著缺点是受振动干扰影响较大。

受测量原理限制,三轴加速度计无法测量偏航角。

可测量俯仰角和横滚角:

2、三轴陀螺仪

功能

用于测量无人机的角速度,并通过对角速度积分计算得到角度信息。

工作原理

理解三轴陀螺仪的工作原理需以科里奥利力为基础。

科里奥利力定义

当质点相对惯性系做直线运动时,因自身惯性,其相对旋转体系的运动轨迹会呈现曲线形态。为描述该轨迹偏移现象,在旋转体系中引入虚拟力——科里奥利力,其矢量表达式为:
F ⃗ c = − 2 m ω ⃗ × v ⃗ \vec{F}_c = -2m\vec{\omega} \times \vec{v} F c=2mω ×v
也可写为: F coriolis = − 2 m   b ω × v \mathbf{F}_{\text{coriolis}} = -2m\ ^b\omega \times v Fcoriolis=2m bω×v

物理量及符号含义:
  • m m m:质点质量
  • ω ⃗ \vec{\omega} ω (或 b ω ^b\omega bω):旋转体系的角速度矢量;其中上标“ b b b”是坐标系标识,代表物体固连坐标系(体坐标系),用于明确该矢量是在物体固连坐标系下描述的
  • v ⃗ \vec{v} v (或 v v v):质点相对惯性系的速度矢量
  • × \times ×”:矢量叉乘运算

说明
科里奥利力是虚拟力,并非真实作用力,仅用于在旋转参考系中描述“直线运动在旋转体系中呈现轨迹偏移”的现象。

陀螺仪结构与信号转换

陀螺仪内部设置两个运动状态的质量块,二者运动相位相差 18 0 ∘ 180^\circ 180,即速度方向相反、大小相等。当陀螺仪发生旋转时,两个质量块会产生方向相反的科里奥利力,该力会压迫对应的电容极板产生位移,进而导致电容出现差分变化。电容变化量与旋转角速度成正比,通过检测电容变化即可间接获取旋转角度信息。

3、三轴磁力计

功能与原理

三轴磁力计可采集设备在 X X X Y Y Y Z Z Z 三个轴向所受的磁场强度数据,该数据传入微控制器后,通过特定算法计算得到与磁北极相关的航向角,进而实现地理方位的检测。

磁力计通常由三个相互垂直的磁阻传感器组成,每个轴向的传感器负责检测该方向上的地磁场强度。

上图所示为采用晶体结构合金材料的磁阻传感器,其电阻值会随外界磁场强度的变化而改变,通过检测电阻变化可实现磁场强度的测量。

除磁阻式原理外,三轴磁力计还可基于洛伦兹力原理设计:电流在磁场中会受到洛伦兹力作用,该力驱动电容等元件产生物理变化,通过检测这种变化即可实现磁场强度与方向的测量。


IMU(陀螺仪、加速度计)& Magnetometer(磁力计)校准方法和流程

枯荣有常 原创于 2020-04-15 19:02:46 发布

本文详细介绍了惯性测量单元(IMU)与磁力计的校准原理及方法,探讨了地磁场特性及其在导航定位中的应用,通过十二位置标定法实现对加速度计、陀螺仪及磁力计的全面校准。

一、校准的定义与目的

1、校准目的

传感器在生产过程中,受工艺精度、技术水平等因素影响,存在固有缺陷,导致实际应用中测量数据存在误差。校准的关键是通过特定方法修正这些误差,提升测量精度。

2、出厂校准与用户校准

一般情况下,传感器厂商会在产品出厂前进行初步校准。以 Sensonor 公司的 Stim300 传感器为例:
img

用户采购 IMU 器件后,通常需进一步校准,校准参数主要包括零偏稳定性、比例因子(含温度特性)、非正交性等。批量应用与单个试验样机的校准方式及参数选择存在差异,下文重点阐述单个 IMU(含加速度计、陀螺仪)的校准方法。

3、坐标系定义与基础方程

(1)坐标系设定
  • 导航坐标系:东-北-天(East-North-Up, ENU);
  • 载体坐标系:右-前-上(Right-Front-Up, RFU)。
(2)重力矢量与地球自转角速度

重力矢量和地球自转角速度在地理坐标系下的表达式如下:

img

(3)速度微分方程

速度微分方程为:
img

当传感器处于静止状态时,方程左侧速度微分为 0 0 0,右侧第二项(地球自转角速度相关项)可忽略,仅保留第一项(比力相关项)和第三项(重力相关项),此时需确保载体坐标系与导航坐标系的转换矩阵 C n b C_{nb} Cnb 为已知量。

4、校准条件

  • 基础校准(零偏与比例因子):传感器需保持静止且处于水平状态;

  • 非正交性参数校准:需将载体坐标系的 X X X Y Y Y Z Z Z 三轴分别与导航坐标系的对应轴平行,确保转换矩阵 C n b C_{nb} Cnb 为单位矩阵,此时比力满足 f b = f n f_b = f_n fb=fn f b f_b fb 为载体坐标系比力, f n f_n fn 为导航坐标系比力)。

    img

二、IMU 校准

1、加速度计校准

(1)校准方法:六位置校准法

该方法可校准 X X X Y Y Y Z Z Z 三轴的零偏(Bias)和比例因子(Scale Factor Error),共 6 个参数。

(2)校准原理与公式

分别将加速度计的 Z Z Z X X X Y Y Y 轴朝向重力方向与反重力方向,通过测量各位置的输出值,计算零偏和比例因子:

imgimg
imgimg
imgimg
(3)注意事项

若载体坐标系定义为“前-右-上”(Front-Right-Up, FRU),则比例因子与重力加速度的乘积项 ( 1 + s ) ⋅ g (1+s) \cdot g (1+s)g 的符号需反向,具体如下:

img

img

2、陀螺仪校准

(原文未提供具体校准方法,此处保留原结构,待补充相关技术细节)

三、磁力计校准

1、地磁场特性

地球磁场的分布类似于条形磁体,磁场方向由磁南极指向磁北极:

  • 磁极点处:磁场与当地水平面垂直;
  • 赤道处:磁场与当地水平面平行;
  • 北半球:磁场方向倾斜指向地面。

磁感应强度的单位为特斯拉(Tesla, T)或高斯(Gauss, G),二者换算关系为 1  T = 1 0 4  G 1\ \text{T} = 10^4\ \text{G} 1 T=104 G。地磁场强度随地理位置变化,通常范围为 0.4  G ∼ 0.6  G 0.4\ \text{G} \sim 0.6\ \text{G} 0.4 G0.6 G。需注意,磁北极与地理北极并不重合,二者夹角约为 11. 5 ∘ 11.5^\circ 11.5

2、地球磁场分布图

img

3、地磁要素

(1)坐标系与要素定义

以观测点 O O O 为原点建立地理坐标系 O X Y Z OXYZ OXYZ X X X 轴指向北, Y Y Y 轴指向东, Z Z Z 轴垂直指向地面。

地磁场强度矢量 T ⃗ \vec{T} T 的各分量定义如下:

  • 北向分量 B n B_n Bn T ⃗ \vec{T} T X X X 轴的投影;
  • 东向分量 B e B_e Be T ⃗ \vec{T} T Y Y Y 轴的投影;
  • 垂向分量 B z B_z Bz T ⃗ \vec{T} T Z Z Z 轴的投影;
  • 水平分量 B h B_h Bh T ⃗ \vec{T} T 在水平面 O − X Y O-XY OXY 的投影;
  • 磁偏角 D D D:磁子午面( B h B_h Bh B z B_z Bz 所在平面)与地理子午面( O − X Z O-XZ OXZ 平面)的夹角,东偏为正,西偏为负;
  • 磁倾角 I I I T ⃗ \vec{T} T 与水平面 O − X Y O-XY OXY 的夹角。

上述 T T T B h B_h Bh B n B_n Bn B e B_e Be B z B_z Bz D D D I I I 统称为地磁场七要素,已知其中 3 个独立要素即可推导其余要素。

(2)要素间数学关系

{ B h = B n 2 + B e 2 T = B h 2 + B z 2 = B n 2 + B e 2 + B z 2 tan ⁡ D = B e B n sin ⁡ I = B z T cos ⁡ I = B h T tan ⁡ I = B z B h \begin{cases} B_h = \sqrt{B_n^2 + B_e^2} \\ T = \sqrt{B_h^2 + B_z^2} = \sqrt{B_n^2 + B_e^2 + B_z^2} \\ \tan D = \frac{B_e}{B_n} \\ \sin I = \frac{B_z}{T} \\ \cos I = \frac{B_h}{T} \\ \tan I = \frac{B_z}{B_h} \end{cases} Bh=Bn2+Be2 T=Bh2+Bz2 =Bn2+Be2+Bz2 tanD=BnBesinI=TBzcosI=TBhtanI=BhBz

img

4、中国地磁要素分布

中国境内地磁场要素的大致分布情况如下:

  • 总磁场强度 T T T 0.41  G ∼ 0.60  G 0.41\ \text{G} \sim 0.60\ \text{G} 0.41 G0.60 G
  • 水平分量 B h B_h Bh:由南至北从 0.4  G 0.4\ \text{G} 0.4 G 降至 0.21  G 0.21\ \text{G} 0.21 G
  • 垂向分量 B z B_z Bz:由南至北从 − 0.1  G -0.1\ \text{G} 0.1 G 增至 0.56  G 0.56\ \text{G} 0.56 G
  • 磁倾角 I I I:由南至北从 − 1 0 ∘ -10^\circ 10 增至 7 0 ∘ 70^\circ 70
  • 磁偏角 D D D:由东向西从 − 1 1 ∘ -11^\circ 11 增至 5 ∘ 5^\circ 5,零偏线由北向南经甘肃安西及西藏得宋地区。

5、地磁场的一级近似

不考虑地磁轴与地球自转轴的偏离问题,地磁强度分量可用以下解析式来描述:


实际运算中,需将磁力计在水平面 X X X Y Y Y 轴的测量值投影至北向,东向分量置零。

6、十二位置标定法

加速度计与磁力计的校准常采用十二位置标定法,该方法覆盖 36 个轴向。标定过程中,载体坐标系定义为“前-上-右”(Front-Up-Right, FUR),导航坐标系定义为“北-天-东”(North-Up-East, NUE),具体位置如下表所示:

十二位置标定法位置分布表

位置序号123456789101112
第一轴(X 轴)
第二轴(Y 轴)西西
第三轴(Z 轴)西西西西

各方向轴向分布统计表

由上表可知, X X X Y Y Y Z Z Z 三轴在每个方向(北、南、天、地、东、西)均出现 6 次,具体分布统计如下表:

方向出现次数方向出现次数方向出现次数方向出现次数方向出现次数方向出现次数
6666西66

通过在上述 12 个位置分别采集传感器输出数据,结合地磁场与重力场的已知特性,可建立校准模型,求解零偏、比例因子、非正交性等误差参数,实现加速度计与磁力计的全面校准。

参考资料

  1. 《自主定位定向技术》
  2. 《Applications of Magnetoresistive Sensors in Navigation Systems》
  3. 《三轴磁阻式传感器标定方法研究》
  4. 《一种十二位置不对北的磁罗盘标定方法》
  5. 《基于 WMM 2005 的地磁计算》
  6. ST 集成传感器方案实现电子罗盘功能
  7. 地磁导航的应用风口来了?
  8. 以 IndoorAtlas 为基础,百度地图将深度整合地磁定位技术
  9. 高三物理复习微专题 1—《地磁场》
  10. 椭球面

【传感器】IMU(加速度计 + 陀螺仪)PI 数据融合及解算四元数、求解欧拉角

-Y--Y-_ 原创于 2021-12-15 16:31:26 发布

本文从入门视角解析 IMU 数据,介绍加速度计与陀螺仪的作用、原始数据到有效姿态信息的转换逻辑,详细讲解姿态估计、四元数转换、欧拉角计算,以及加速度计(Accelerometer)与陀螺仪(Gyroscope)的数据融合过程,并结合实例代码展示基于 MPU9250 的姿态估计与滤波实现。

关键问题解析(入门视角)

1. IMU 输出数据及物理意义

以 BMI088 为例,其由加速度计和陀螺仪组成,输出数据的物理意义如下:

  • 加速度计:单位为 mG(1 mG = 0.0098 m/s²),测量机体坐标系下三轴加速度。静止时仅受重力(1G = 1000 mG),满足 a x 2 + a y 2 + a z 2 ≈ 1000  mG \sqrt{a_x^2 + a_y^2 + a_z^2} \approx 1000\ \text{mG} ax2+ay2+az2 1000 mG
  • 陀螺仪:单位为 °/s,测量绕机体坐标系 X、Y、Z 轴的旋转角速度。

(注:测量范围、精度等参数暂不展开。)

2. 目标数据与坐标转换逻辑

以云台应用为例,需获取世界坐标系(n 系) 下的偏航角(yaw,绕 Z 轴)和俯仰角(pitch,绕 X 轴),坐标系定义如下:

  • 世界坐标系(n 系):X 轴向东,Y 轴向北,Z 轴向天;
  • 机体坐标系(b 系):X 轴指向云台正前,Y 轴指向云台正左,Z 轴向天。
基础原理

重力向量在 n 系中固定为 [ 0 , 0 , − g ] [0, 0, -g] [0,0,g],加速度计可测得该向量在 b 系中的表示 [ a x , a y , a z ] [a_x, a_y, a_z] [ax,ay,az]。通过两个坐标系对同一向量的不同描述,可求解坐标系变换关系,进而得到姿态角(pitch/roll),但无法直接推导 yaw(仅依赖重力无法感知绕 Z 轴旋转)。

四元数引入原因

直接对坐标变换矩阵(T 矩阵)微分求解姿态变化复杂度高,引入四元数可简化旋转微分计算,主要转换关系如下:

  1. 四元数 Q Q Q 转姿态矩阵 T T T
    四元数转姿态矩阵

  2. 四元数与欧拉角转换:g角
    [ φ θ ψ ] = [ atan2 ( 2 ( w x + y z ) , 1 − 2 ( x 2 + y 2 ) ) arcsin ( 2 ( w y − z x ) ) atan2 ( 2 ( w z + x y ) , 1 − 2 ( y 2 + z 2 ) ) ] \begin{bmatrix} \varphi \\ \theta \\ \psi \end{bmatrix} = \begin{bmatrix} \text{atan2}(2(wx + yz), 1 - 2(x^2 + y^2)) \\ \text{arcsin}(2(wy - zx)) \\ \text{atan2}(2(wz + xy), 1 - 2(y^2 + z^2)) \end{bmatrix} φθψ = atan2(2(wx+yz),12(x2+y2))arcsin(2(wyzx))atan2(2(wz+xy),12(y2+z2))

  3. 一阶龙格库塔法推导四元数微分迭代形式:
    四元数微分迭代

  4. 加速度计与陀螺仪融合(消除积分误差):
    数据融合公式

3. 数据融合主要流程

  1. 初始化:初始角度 [ 0 , 0 , 0 ] [0, 0, 0] [0,0,0],对应四元数 [ 1 , 0 , 0 , 0 ] [1, 0, 0, 0] [1,0,0,0]
  2. 估算重力向量:通过当前四元数将 n 系重力向量 [ 0 , 0 , G ] [0, 0, G] [0,0,G] 转换为 b 系估算值 V V V
    重力向量估算
  3. 计算误差:测量重力向量与估算值的叉积误差;
  4. 误差补偿:将误差经 PI 调节后补偿到陀螺仪数据;
  5. 迭代更新:求解新的四元数并单位化;
  6. 转换输出:将四元数转为欧拉角(pitch/roll/yaw)。

实例代码实现

/***************************************************************************************
                                      声 明
    本项目代码仅供个人学习使用,可以自由移植修改,但必须保留此声明信息。移植过程中出现
其他不可估量的 BUG,天际智联不负任何责任。请勿商用!

程序版本:V1.01
程序日期:2018-1-26
程序作者:愤怒的小孩 E-mail:1138550496@qq.com
版权所有:西安天际智联信息技术有限公司
****************************************************************************************/
#include "imu.h"
#include "math.h"
#include "filter.h"
#include "mpu9250.h"
#include "control.h"
#include "ICM20948.h"

// 互补滤波权重
#define Kp_New      0.9f              
#define Kp_Old      0.1f              
// 物理量转换系数
#define Acc_Gain    0.0001220f        // 加速度AD值转G(满量程±4g,LSBa=2*4/65535.0)
#define Gyro_Gain   0.0609756f        // 陀螺仪AD值转°/s(满量程±2000°/s,LSBg=2*2000/65535.0)
#define Gyro_Gr     0.0010641f        // 陀螺仪AD值转rad/s(π/180 * LSBg)
// 姿态解算参数
#define Kp          1.50f             // 比例增益(加速度计/磁力计收敛速率)
#define Ki          0.005f            // 积分增益(陀螺仪零偏收敛速率)
#define halfT       0.005f            // 采样周期的一半(单位:s)

// 全局变量定义
FLOAT_ANGLE Att_Angle;                // 姿态解算后的欧拉角(yaw/pitch/roll)
FLOAT_XYZ   Gyr_rad, Gyr_radold;      // 陀螺仪数据(弧度制)
FLOAT_XYZ   Acc_filt, Gry_filt, Acc_filtold; // 滤波后加速度/陀螺仪数据
float       accb[3], DCMgb[3][3];     // 机体坐标系加速度、方向余弦阵(n→b)
uint8_t     AccbUpdate = 0;           // 加速度数据更新标志
float       q0 = 1, q1 = 0, q2 = 0, q3 = 0; // 四元数初始值
float       exInt = 0, eyInt = 0, ezInt = 0; // 积分误差

/************************** 快速计算 1/Sqrt(x) **************************/
static float invSqrt(float x)
{
    float halfx = 0.5f * x;
    float y = x;
    long i = *(long*)&y;
    i = 0x5f3759df - (i>>1);
    y = *(float*)&i;
    y = y * (1.5f - (halfx * y * y));
    return y;
}

/************************** 原始数据预处理 **************************/
void Prepare_Data(void)
{
    static uint8_t IIR_mode = 1;

    // 读取IMU原始数据并去零偏
    MPU9250_Read();    
    MPU9250_Offset();  

    // 加速度数据滤波(去极值滑动窗口滤波)
    SortAver_FilterXYZ(&MPU9250_ACC_RAW, &Acc_filt, 12);

    // 加速度AD值转物理量(m/s²)
    Acc_filt.X = (float)Acc_filt.X * Acc_Gain * G;
    Acc_filt.Y = (float)Acc_filt.Y * Acc_Gain * G;
    Acc_filt.Z = (float)Acc_filt.Z * Acc_Gain * G;

    // 陀螺仪AD值转物理量(rad/s)
    Gyr_rad.X = (float) MPU9250_GYRO_RAW.X * Gyro_Gr;
    Gyr_rad.Y = (float) MPU9250_GYRO_RAW.Y * Gyro_Gr;
    Gyr_rad.Z = (float) MPU9250_GYRO_RAW.Z * Gyro_Gr;

    // IIR低通滤波(加速度)
    if(IIR_mode)
    {
        Acc_filt.X = Acc_filt.X * Kp_New + Acc_filtold.X * Kp_Old;
        Acc_filt.Y = Acc_filt.Y * Kp_New + Acc_filtold.Y * Kp_Old;
        Acc_filt.Z = Acc_filt.Z * Kp_New + Acc_filtold.Z * Kp_Old;

        Acc_filtold.X = Acc_filt.X;
        Acc_filtold.Y = Acc_filt.Y;
        Acc_filtold.Z = Acc_filt.Z;
    }

    // 赋值加速度数组并标记更新
    accb[0] = Acc_filt.X;
    accb[1] = Acc_filt.Y;
    accb[2] = Acc_filt.Z;
    if(accb[0] && accb[1] && accb[2])
    {
        AccbUpdate = 1;
    }
}

/************************** IMU姿态解算(四元数+PI融合) **************************/
void IMUupdate(FLOAT_XYZ *Gyr_rad, FLOAT_XYZ *Acc_filt, FLOAT_ANGLE *Att_Angle)
{
    uint8_t i;
    float matrix[9] = {1.f, 0.0f, 0.0f, 0.0f, 1.f, 0.0f, 0.0f, 0.0f, 1.f};
    float ax = Acc_filt->X, ay = Acc_filt->Y, az = Acc_filt->Z;
    float gx = Gyr_rad->X, gy = Gyr_rad->Y, gz = Gyr_rad->Z;
    float vx, vy, vz;  // 估算重力向量(机体坐标系)
    float ex, ey, ez;  // 重力向量误差
    float norm;        // 归一化系数

    // 四元数平方项(减少重复计算)
    float q0q0 = q0*q0, q0q1 = q0*q1, q0q2 = q0*q2, q0q3 = q0*q3;
    float q1q1 = q1*q1, q1q2 = q1*q2, q1q3 = q1*q3;
    float q2q2 = q2*q2, q2q3 = q2*q3, q3q3 = q3*q3;

    // 加速度数据有效性判断
    if(ax*ay*az == 0) return;

    // 加速度计数据归一化(单位化重力向量)
    norm = invSqrt(ax*ax + ay*ay + az*az);
    ax *= norm;
    ay *= norm;
    az *= norm;

    // 四元数估算重力向量(机体坐标系)
    vx = 2*(q1q3 - q0q2);
    vy = 2*(q0q1 + q2q3);
    vz = q0q0 - q1q1 - q2q2 + q3q3;

    // 计算重力向量误差(叉积)
    ex = ay*vz - az*vy;
    ey = az*vx - ax*vz;
    ez = ax*vy - ay*vx;

    // 误差积分
    exInt += ex * Ki;
    eyInt += ey * Ki;
    ezInt += ez * Ki;

    // 陀螺仪数据补偿(PI调节)
    gx += Kp*ex + exInt;
    gy += Kp*ey + eyInt;
    gz += Kp*ez + ezInt;

    // 四元数微分更新(一阶龙格库塔)
    q0 += (-q1*gx - q2*gy - q3*gz) * halfT;
    q1 += (q0*gx + q2*gz - q3*gy) * halfT;
    q2 += (q0*gy - q1*gz + q3*gx) * halfT;
    q3 += (q0*gz + q1*gy - q2*gx) * halfT;

    // 四元数单位化
    norm = invSqrt(q0q0 + q1q1 + q2q2 + q3q3);
    q0 *= norm;
    q1 *= norm;
    q2 *= norm;
    q3 *= norm;

    // 构建方向余弦阵(n→b)
    matrix[0] = q0q0 + q1q1 - q2q2 - q3q3;
    matrix[1] = 2.f * (q1q2 + q0q3);
    matrix[2] = 2.f * (q1q3 - q0q2);
    matrix[3] = 2.f * (q1q2 - q0q3);
    matrix[4] = q0q0 - q1q1 + q2q2 - q3q3;
    matrix[5] = 2.f * (q2q3 + q0q1);
    matrix[6] = 2.f * (q1q3 + q0q2);
    matrix[7] = 2.f * (q2q3 - q0q1);
    matrix[8] = q0q0 - q1q1 - q2q2 + q3q3;

    // 四元数转欧拉角(Z→Y→X,单位:°)
    Att_Angle->yaw += Gyr_rad->Z * RadtoDeg * 0.01f;  // yaw(陀螺仪积分)
    Att_Angle->pit = -asin(2.f * (q1q3 - q0q2)) * 57.3f;  // pitch
    Att_Angle->rol = atan2(2.f * q2q3 + 2.f * q0q1, q0q0 - q1q1 - q2q2 + q3q3) * 57.3f;  // roll

    // 方向余弦阵赋值
    for(i = 0; i < 9; i++)
    {
        *(&(DCMgb[0][0]) + i) = matrix[i];
    }

    // 失控保护(调试时可注释)
    // Safety_Check();
}

参考资料

  1. 四元数完全解析及资料汇总

  2. mpu6050 姿态解算与卡尔曼滤波(1)数学


感知定位篇之 IMU:陀螺仪和加速度计及互补滤波

子墨_bupt 原创于 2024-04-17 09:00:00 发布

1. IMU 介绍

IMU(Inertial Measurement Unit,惯性测量单元)是检测/测量加速度与旋转运动的传感器,基于惯性定律实现,涵盖从毫米级 MEMS 器件到高精度激光陀螺/光纤陀螺等类型。

组成部分

基础 6 轴 IMU 包含:

  • 3 轴陀螺仪:测量绕 X/Y/Z 轴的旋转角速度(单位:°/s);
  • 3 轴加速度计:测量 X/Y/Z 轴的线加速度(单位:m/s²),静止时可感知重力加速度(9.8 m/s²)。

应用意义

陀螺仪的漂移误差对惯导系统位置误差的影响为时间三次方函数,高精度陀螺仪制造难度大、成本高,是影响惯性系统性能的重要因素。

板载 IMU 示意图

IMU 模块

2. 陀螺仪

2.1 陀螺仪测量原理

陀螺仪仅测量瞬时角速度(不直接输出姿态),姿态角需通过角速度积分得到:
θ t = θ t − 1 + ω ⋅ Δ t \theta_{t} = \theta_{t-1} + \omega \cdot \Delta t θt=θt1+ωΔt
其中:

  • θ t \theta_t θt:当前角度;
  • θ t − 1 \theta_{t-1} θt1:上一时刻角度;
  • ω \omega ω:采样时刻角速度;
  • Δ t \Delta t Δt:采样时间间隔。

实际应用中仅能获取离散采样信号,假设 Δ t \Delta t Δt 内角速度恒定,通过累加实现积分。

陀螺仪测量原理1

陀螺仪测量原理2

2.2 陀螺仪零飘

误差来源

零飘(零偏):静止时陀螺仪输出角速度非 0,而是在某一值附近波动;温漂:零偏随温度变化。二者会导致积分误差随时间累积,最终姿态失效。

校准方法

上电后采集 1000 帧静止状态下的陀螺仪原始数据,计算方差(判断是否静止,方差 < 阈值则有效),以标准差作为零偏值;积分前将原始数据减去零偏,可显著降低漂移。

3. 加速度计

测量特性

加速度计测量三轴线加速度,消费级器件高频噪声大,单独使用效果差,主要误差来源:

  • 轴间误差:三轴实际安装角度偏离 90°(如 88°),非严格正交;
  • 尺度误差:测量值与真实加速度比例偏移(如 1 m/s² 实际测为 0.8 m/s²)。
校准方式

可通过椭球拟合、6 面法标定补偿上述误差(部分场景如扫地机可省略)。

姿态解算价值

静止/匀速运动时,重力加速度方向固定(竖直向下),通过其在三轴的投影可推导俯仰角、滚转角,但无法感知偏航角(绕竖直轴旋转不改变重力投影)。

4. 滤波融合

传感器特性对比

传感器短期特性长期特性主要误差
陀螺仪精度高、响应快积分漂移严重零飘、温漂
加速度计噪声大、响应慢重力方向稳定高频噪声、轴间/尺度误差

4.1 互补滤波

设计思路

通过高通滤波器保留陀螺仪高频有效信号(滤除低频漂移),低通滤波器保留加速度计低频有效信号(滤除高频噪声),融合后获得全频段稳定的姿态角。

简化版互补滤波

θ = k ⋅ θ gyro + ( 1 − k ) ⋅ θ acc \theta = k \cdot \theta_{\text{gyro}} + (1-k) \cdot \theta_{\text{acc}} θ=kθgyro+(1k)θacc
其中:

  • 0 < k < 1 0 < k < 1 0<k<1:权重系数(k 越大越信任陀螺仪,反之信任加速度计);
  • θ gyro \theta_{\text{gyro}} θgyro:陀螺仪积分角度;
  • θ acc \theta_{\text{acc}} θacc:加速度计解算角度。
进阶版互补滤波

低通滤波器 L P F = C C + s LPF = \frac{C}{C + s} LPF=C+sC,高通滤波器 H P F = s C + s HPF = \frac{s}{C + s} HPF=C+ss,其中 C C C 为滤波系数(常数), s s s 为微分算子(Laplace变换中的 s s s)。

融合公式:
θ = s C + s θ gyro + C C + s θ acc \theta = \frac{s}{C + s} \theta_{\text{gyro}} + \frac{C}{C + s} \theta_{\text{acc}} θ=C+ssθgyro+C+sCθacc

化简后的微分方程:
θ ˙ = ω gyro − C ( θ − θ acc ) \dot{\theta} = \omega_{\text{gyro}} - C(\theta - \theta_{\text{acc}}) θ˙=ωgyroC(θθacc)

其中:

  • θ \theta θ:融合后的角度估计值。
  • θ gyro \theta_{\text{gyro}} θgyro:陀螺仪测量的角度(通过积分角速度得到)。
  • θ acc \theta_{\text{acc}} θacc:加速度计测量的角度(通过重力向量计算)。
  • ω gyro \omega_{\text{gyro}} ωgyro:陀螺仪测量的角速度。
  • C C C:滤波系数,可根据场景调整(如 C = τ C = \tau C=τ,其中 τ \tau τ 为时间常数)。

互补滤波原理

简化互补滤波公式

加权融合公式

进阶互补滤波公式1

进阶互补滤波公式2

其他融合方法

除互补滤波外,卡尔曼滤波是常用选择:基于状态估计模型,结合传感器噪声特性自适应调整权重,姿态估计精度更高。

参考资料

  1. [什么是 IMU?-优快云 博客]
  2. 说透互补滤波 (1) - 线性互补滤波器从原理到实现 - 知乎 (zhihu.com)

via:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值