BetaFlight深入传感设计之九:传感坐标系/机体坐标系/导航坐标系/经纬度坐标系

2023-05-16

BetaFlight深入传感设计之九:传感坐标系/机体坐标系/导航坐标系/经纬度坐标系

  • 1. 问题症结
  • 2. 入手分析
    • 2.1 传感坐标系
    • 2.2 机体坐标系
    • 2.3 导航坐标系
    • 2.4 经纬坐标系
  • 3. CF/BF/iNav代码
    • 3.1 机体坐标系(xEast-yNorth-zUp + yaw反向)
      • 3.1.1 BF/CF代码
      • 3.1.2 iNav代码
    • 3.2 航向角误差
      • 3.2.1 BF/CF代码
      • 3.2.2 iNav代码
  • 4. 参考资料

最近几周,在这个CF/BF/iNav代码上对理解BetaFlight深入传感设计之五:MahonyAHRS & 方向余弦矩阵理论折腾了好久,包括各类信息咨询、收集,总体来看总是差那么几分+/-问题。

1. 问题症结

由于以下问题导致代码实现与理论的出入:

  1. 缺乏设计文档
  2. 关键位置缺乏解释
  3. 解释标注不够明朗

总体来说,开源代码还是专业的(相较于时下国内的一些公司有过之无不及),经过这几周的折腾,基本也理清了一些头绪。

【1】BetaFlight深入传感设计之六:四元数计算方法
【2】BetaFlight深入传感设计之八:坐标系

2. 入手分析

为了更好的理解CF/BF/iNav代码与实际理论之间的差异,没有一手体验+编程基础+理论逻辑,要一下子搞得明明白白还是有点头大的,估计这也是为什么很少有这种代码理论结合的分析。

这里我们澄清一下概念:

  1. 传感坐标系
  2. 机体坐标系
  3. 导航坐标系
  4. 经纬坐标系

2.1 传感坐标系

这里指出的是传感器的坐标系(XYZ),通常可以在芯片规格书中找到。比如:MPU6000,HMC5883L

注:详见芯片手册。

2.2 机体坐标系

这里指与欧拉角相关的坐标系(XYZ- α β γ \alpha \beta \gamma αβγ),这个很关键,因为这里就是折腾的主要原因。

注:下图旋转方向满足右手系,其中Z(垂直方向),已经进行了反向旋转。
机体坐标系for BF/iNav/CF

xEast-yNorth-zUp + yaw反向

  1. xEast-yNorth-zUp做矢量运算,符合右手法则
  2. α β γ \alpha \beta \gamma αβγ + yaw( β \beta β)反向 ==》CF/BF/iNav机体坐标系的欧拉角方向

定义XYZ (已经yaw反向)
X:指向机头,绕X旋转 γ \gamma γ
Y:指向左侧,绕Y旋转 α \alpha α
Z:指向上方,绕Z旋转 β \beta β

实测视频:BetaFlight Mark4 + 善贤地铁站口 + 城北公园
X:roll-right(+); roll-left(-)
Y:pitch-forward(+); pitch-backward(-)
Z:yaw-right(+); yaw-left(-)
注:采用右手坐标系法则,请看视频的时候注意方框中的数字。

示例Pitch-Roll-Yaw

BetaFlight Mark4 + 善贤地铁站口 + 城北公园

2.3 导航坐标系

这里理解为xNorth-yEast-zDown(右手系)或者xEast-yNorth-zUp(右手系)都可以,其实代码实现角度并没有太多这方面的概念。

2.4 经纬坐标系

关于经纬度不再过多解释,详见:BetaFlight深入传感设计之八:坐标系。

补充一个关键信息:COG,Course Over Groud 地面航向角(水平航向角)

航向角:是质心沿速度方向在水平面上的投影与预定轨迹的切线方向之间的夹角。
偏航角:是质心沿机头方向在水平面上的投影与预定轨迹的切线方向之间的夹角。

因此,偏航角是考虑航行方向并纠正航行阻力所采取的一种机体姿态。GPS模块提供的就是航向角,而飞机姿态提供的是偏航角。

3. CF/BF/iNav代码

3.1 机体坐标系(xEast-yNorth-zUp + yaw反向)

3.1.1 BF/CF代码

BF-yaw反向

3.1.2 iNav代码

iNav-yaw反向

3.2 航向角误差

鉴于以下两个现实问题:

  1. 加速度制造工艺导致,实际加速度方向与受力方向相反
  2. yaw方向与COG方向正好相反

COG推导

3.2.1 BF/CF代码

BF-导航方向角

3.2.2 iNav代码

iNav-导航方向角

4. 参考资料

【1】BetaFlight深入传感设计:传感模块设计框架
【2】BetaFlight深入传感设计之一:Baro传感模块
【3】BetaFlight深入传感设计之二:Mag传感模块
【4】BetaFlight深入传感设计之三:IMU传感模块
【5】BetaFlight深入传感设计之四:GPS传感模块

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BetaFlight深入传感设计之九:传感坐标系/机体坐标系/导航坐标系/经纬度坐标系 的相关文章

  • PX4模块设计之二十八:RCInput模块

    PX4模块设计之二十八 xff1a RCInput模块 1 RCInput模块简介2 模块入口函数2 1 主入口rc input main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 R
  • PX4模块设计之二十九:RCUpdate模块

    PX4模块设计之二十九 xff1a RCUpdate模块 1 RCUpdate模块简介2 模块入口函数2 1 主入口rc update main2 2 自定义子命令custom command2 3 模块状态print status 重载
  • PX4模块设计之三十:Hysteresis类

    PX4模块设计之三十 xff1a Hysteresis类 1 Hysteresis类简介2 Hysteresis类成员变量介绍3 Hysteresis类迟滞逻辑4 Hysteresis类重要方法4 1 Hysteresis bool ini
  • PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一 xff1a ManualControl模块 1 ManualControl模块简介2 模块入口函数2 1 主入口manual control main2 2 自定义子命令custom command 3 Manual
  • PX4模块设计之三十二:AttitudeEstimatorQ模块

    PX4模块设计之三十二 xff1a AttitudeEstimatorQ模块 1 AttitudeEstimatorQ模块简介2 模块入口函数2 1 主入口attitude estimator q main2 2 自定义子命令custom
  • PX4模块设计之三十三:Sensors模块

    PX4模块设计之三十三 xff1a Sensors模块 1 Sensors模块简介2 模块入口函数2 1 主入口sensors main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 Se
  • 树莓派(Raspberry Pi)miniDLNA服务搭建

    树莓派 Raspberry Pi miniDLNA服务搭建 1 MiniDLNA简介2 安装前提3 安装步骤4 服务配置5 进程配置6 参考资料7 补充资料7 1 配置外置硬盘 xff08 媒体库 xff09 7 2 配置samba符号链接
  • PX4模块设计之三十四:ControlAllocator模块

    PX4模块设计之三十四 xff1a ControlAllocator模块 1 ControlAllocator模块简介2 模块入口函数2 1 主入口control allocator main2 2 自定义子命令custom command
  • PX4模块设计之三十五:MulticopterAttitudeControl模块

    PX4模块设计之三十五 xff1a MulticopterAttitudeControl模块 1 MulticopterAttitudeControl模块简介2 模块入口函数2 1 主入口mc att control main2 2 自定义
  • 穿越机用途和机架尺寸

    穿越机用途和机架尺寸 1 穿越机的用途2 穿越机的机架3 机架的类型3 1 正X型机架3 2 宽X型机架3 3 长X型机架3 4 Hybrid机架3 5 涵道机架 4 总结 1 穿越机的用途 穿越机按功能分 xff0c 主要分为竞速Race
  • HC05和电脑蓝牙通讯

    通常情况下都是将HC05和HC04进行主从配对 xff0c 然后进行通讯 如果手边没有HC04其实可以使用笔记本自带的蓝牙和HC05进行通讯 配置方法如下 xff1a 将HC05配置为主机模式将电脑和HC05的保存连接删除 单击下方更多蓝牙
  • PX4模块设计之三十六:MulticopterPositionControl模块

    PX4模块设计之三十六 xff1a MulticopterPositionControl模块 1 MulticopterPositionControl模块简介2 模块入口函数2 1 主入口mc pos control main2 2 自定义
  • PX4模块设计之三十七:MulticopterRateControl模块

    PX4模块设计之三十七 xff1a MulticopterRateControl模块 1 MulticopterRateControl模块简介2 模块入口函数2 1 主入口mc rate control main2 2 自定义子命令cust
  • PX4模块设计之三十八:Navigator模块

    PX4模块设计之三十八 xff1a Navigator模块 1 Navigator模块简介2 模块入口函数2 1 主入口navigator main2 2 自定义子命令custom command 3 Navigator模块重要函数3 1
  • PX4模块设计之三十九:Commander模块

    PX4模块设计之三十九 xff1a Commander模块 1 Commander模块简介2 模块入口函数2 1 主入口commander main2 2 自定义子命令custom command 3 Commander模块重要函数3 1
  • PX4模块设计之四十:FrskyTelemetry模块

    PX4模块设计之四十 xff1a FrskyTelemetry模块 1 FrskyTelemetry模块简介2 模块入口函数2 1 主入口frsky telemetry main2 2 自定义子命令custom command2 3 模块状
  • PX4模块设计之四十一:I2C/SPI Bus Instance基础知识

    PX4模块设计之四十一 xff1a I2C SPI Bus Instance基础知识 1 基础知识2 基础类和定义2 1 ListNode类2 2 List类2 3 BusCLIArguments类2 4 BusInstanceIterat
  • 关于穿越机FPV视频果冻效应的讨论

    关于穿越机FPV视频果冻效应的讨论 1 名词定义2 摄像原理2 1 快门分类2 2 常见传感器2 3 卷帘拍摄 3 产生原因4 解决方法4 1 振动出处4 2 软件方法 辅助作用 4 3 硬件方法 直接办法 5 F450试验机FPV视频问题
  • PX4模块设计之四十二:ATXXXX模块

    PX4模块设计之四十二 xff1a ATXXXX模块 1 ATXXXX模块简介2 模块入口函数2 1 主入口atxxxx main2 2 自定义子命令custom command2 3 模块状态print status 重载 3 ATXXX
  • PX4模块设计之四十三:icm20689模块

    PX4模块设计之四十三 xff1a icm20689模块 1 icm20689模块简介2 模块入口函数2 1 主入口icm20689 main2 2 自定义子命令custom command2 3 模块状态print status 重载 3

随机推荐