BetaFlight深入传感设计之五:MahonyAHRS & 方向余弦矩阵理论

Posted lida2003

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BetaFlight深入传感设计之五:MahonyAHRS & 方向余弦矩阵理论相关的知识,希望对你有一定的参考价值。

BetaFlight深入传感设计之五:MahonyAHRS & 方向余弦矩阵理论

该理论主要来自William Premerlani和Paul Bizard的Direction Cosine Matrix IMU: Theory,这是出处。大家除了去看英文原文资料,关于中文方面的翻译github上有链接这里提供,有兴趣的朋友可以去仔细研究。

鉴于前面对Baro/Mag/IMU/GPS传感模块的驱动以及业务方面的研读,我们遇到一个比较蹩脚的问题,就是如何基于这些传感对飞行方向进行校准。

虽然基础知识都有,但是真的在实际应用上相较于GPS距离,飞行速度,飞行方向等几何学知识来讲,方向余弦矩阵稍微还是需要拐个弯经过大脑逻辑思考才有机会理解的。

鉴于这部分内容在业务上严重阻碍了我们深入理解,包括一些物理现象导致的问题。在此将会根据自己的体会和理解进行讨论分析。

1. 基础预备知识

1.1 机体坐标系

相对于机体建立的坐标系,我们称之为机体坐标系:

  1. Xb轴沿着机身指向机头方向(纵轴方向)
  2. Yb轴指向机头方向的右侧,垂直于纵剖面
  3. Zb轴在飞行器纵剖面,上垂直于轴指向下方


1.2 欧拉角

欧拉角是用来唯一地确定定点转动刚体位置的三个一组独立角参量,由章动角 θ \\theta θ、进动角 ϕ \\phi ϕ和自转角 ψ \\psi ψ组成。因为欧拉首先提出,故得名。

转换到飞行器上,角度对应关系如下:

  • 绕自己的z轴旋转 α \\alpha α ==》自转角 ψ \\psi ψ ==》偏航角(yaw),机体轴在水平面上的投影与地轴之间的夹角,以机头右偏为正,又称方位角
  • 续绕自己的x轴旋转 β \\beta β ==》章动角 θ \\theta θ ==》俯仰角(pitch),机体轴与地平面(水平面)之间的夹角,飞机抬头为正
  • 最后绕自己的z轴旋转 γ \\gamma γ ==》进动角 ϕ \\phi ϕ ==》滚转角(roll),飞机对称面绕机体轴转过的角度,右滚为正,又称倾斜角

1.2.1 概念解释

1.2.2 动态概念

1.2.3 应用概念

1.3飞控操作

1.3.1 Yaw

1.3.2 Pitch

1.3.3 Roll

1.3 旋转矩阵

这个是数学里面的东西,懒得翻高中和大学的书了。大体的概念就是矢量通过旋转矩阵可以改变方向。

注:通常我们这里改变方向,不改变矢量长度的,都是单位矩阵,不会影响模长,仅改变方向。

这里从二维空间开始介绍,然后在给出三维空间的公式。二维空间是比较容易理解的。

1.3.1 二维空间

在二维空间中,旋转可以用一个单一的角 θ \\theta θ 定义。作为约定,正角表示逆时针旋转。

M ( θ ) = [ c o s θ − s i n θ s i n θ c o s θ ] = c o s θ [ 1 0 0 1 ] + s i n θ [ 0 − 1 1 0 ] = e x p ( θ [ 0 − 1 1 0 ] ) M(\\theta)=\\beginbmatrix cos \\theta & -sin \\theta \\\\ sin \\theta & cos \\theta \\endbmatrix = cos \\theta \\beginbmatrix 1 & 0 \\\\ 0 & 1 \\endbmatrix + sin \\theta \\beginbmatrix 0 & -1 \\\\ 1 & 0 \\endbmatrix = exp\\lparen \\theta \\beginbmatrix 0 & -1 \\\\ 1 & 0 \\endbmatrix \\rparen M(θ)=[cosθsinθsinθcosθ]=cosθ[1001]+sinθ[0110]=exp(θ[0110])

1.3.2 三维空间

在三维空间中,生成旋转矩阵的一种简单方式是把它作为三个基本旋转的序列复合。关于右手笛卡尔坐标系的 x, y和 z轴的旋转分别叫做 roll, pitch 和 yaw 旋转。

  • 绕 x-轴的主动旋转 θ x \\theta_x θx, 对应roll( γ \\gamma γ) 角,和右手螺旋的方向相反(在yz平面顺时针)。

R x ( θ x ) = [ 1 0 0 0 c o s θ x − s i n θ x 0 s i n θ x c o s θ x ] = [ 1 0 0 0 c o s γ − s i n γ 0 s i n γ c o s γ ] R_x(\\theta_x) = \\beginbmatrix 1 & 0 & 0 \\\\ 0 & cos \\theta_x & -sin \\theta_x \\\\ 0 & sin \\theta_x & cos \\theta_x \\endbmatrix = \\beginbmatrix 1 & 0 & 0 \\\\ 0 & cos \\gamma & -sin \\gamma \\\\ 0 & sin \\gamma & cos \\gamma \\endbmatrix Rx(θx)= 1000cosθxsinθx0sinθxcosθx = 1000cosγsinγ0sinγcosγ

  • 绕 y-轴的主动旋转 θ y \\theta_y θy, 对应pitch( α \\alpha α) 角,和右手螺旋的方向相反(在zx平面顺时针)。

R y ( θ y ) = [ c o s θ y 0 s i n θ y 0 1 0 − s i n θ y 0 c o s θ y ] = [ c o s α 0 s i n α 0 1 0 − s i n α 0 c o s α ] R_y(\\theta_y) = \\beginbmatrix cos \\theta_y & 0 & sin \\theta_y \\\\ 0 & 1 & 0 \\\\ -sin \\theta_y & 0 & cos \\theta_y \\endbmatrix = \\beginbmatrix cos \\alpha & 0 & sin \\alpha \\\\ 0 & 1 & 0 \\\\ -sin \\alpha & 0 & cos \\alpha \\endbmatrix Ry(θy)= cosθy0sinθy010sinθy0cosθy = cosα0sinα010sinα0cosα