1.Game Rotation Vector
提供俯仰(Pitch)和横滚(Roll)数据。它仅利用陀螺仪和加速度计融合,不受机舱内金属或电子设备磁干扰的影响。在 120Hz 下,它能提供极度平滑的 HUD 地平线运动,确保飞行员在剧烈机动时不会感到视觉延迟。
2.角速度
记录飞行器绕三轴转动的瞬时速率。这是 FDR 的核心数据,用于分析飞行员的操作强度。同时可以与GPS数据关联,用于在 GPS 丢星时进行短时间的航位推算。
3.线性加速度
纯物理加速度(剔除了重力分量)。用于计算飞行器承受的 G 值。在生成 KMZ 或 CSV 分析图表时,线性加速度能最直观地反映飞行过程中的过载情况。
4.磁力计
提供绝对地磁参考。这里的原始磁力计数据将配合 GPS 航迹共同决定 HUD 上的 Global Heading 。在静止时使用磁力计校准方向,在飞行时使用 GPS 航迹修正。
5.物理加速度
包含重力的原始加速度。作为硬件冗余的基础。如果 Game Rotation Vector 失效,系统可以根据原始加速度计的重力矢量方向(静止状态下)来强制恢复俯仰和横滚参考,触发故障警告。
GPS 分布在机翼、座椅和头盔
1.经纬度 (Latitude & Longitude)
计算到目的地的距离和队友间的 TCAS 距离
2.GPS 海拔高度
用于校准气压高度,或在切换到 AMSL(基于平均海平面的高度,Above Mean Sea Level)模式时提供参考。
3.地速
在 HUD 上作为水平运行参考
4.航向角
提供指南针的全局航向
5.卫星时间
为飞行记录仪(FDR)提供精准的时间戳,并用于与其它模块同步。
1.静压
作为高度的核心计算参数,用于计算海拔高度(AMSL)和地面相对高度(AGL)
2.总压
用于计算空速
3.环境温度
用于气压高度公式的温度补偿,确保高度精度。
1.驱动层
三个传感器各自一个节点,负责直接与硬件通信,将原始数据发布到 ROS 总线
2.核心算法
实现 GPS 与惯性数据的关联修正,并提供冗余的数据备份。计算空速 (km/h)、高度切换 (AGL/AMSL)、到目的地距离、TCAS 队友距离以及滑翔比 (Glide)。
3.逻辑判定
处理路点导航、方向箭头以及进入 50m-300m 直径“垂直圆柱体”路点的判定逻辑。基于 WGS84 地形图实时对比航路,判定是否处于目标地面 1000m 以下并生成地形形态。
4.输出层
HUD界面
5.管理与记录
记录飞行数据至 SD 卡,生成 CSV 和 KMZ (3D 路径) 文件。执行开机自检 (BIT)、看门狗监控及一键紧急关机逻辑。管理 VHF 通信、飞行员对讲以及 SkyFive 实时直播链路。
客户要求120hz,rotation的采集延迟较高达不到,所以舍弃了rotation的4元数,改用game rotation替代。但同时不启用rotation采集,IMU传感器会发送精简数据包,频率也只有90hz,经过尝试,设置rotation为10hz其它采集频率最高。有频率需求的game rotation、角速度和线性加速度为120hz,其余磁力计、物理加速度(含重力)为40hz
self.sensor.enable_feature(adafruit_bno08x.BNO_REPORT_GAME_ROTATION_VECTOR, freq_150hz_us)
self.sensor.enable_feature(adafruit_bno08x.BNO_REPORT_GYROSCOPE, freq_150hz_us)
self.sensor.enable_feature(adafruit_bno08x.BNO_REPORT_LINEAR_ACCELERATION, freq_150hz_us)
self.sensor.enable_feature(adafruit_bno08x.BNO_REPORT_ROTATION_VECTOR, freq_10hz_us)
self.sensor.enable_feature(adafruit_bno08x.BNO_REPORT_ACCELEROMETER, freq_50hz_us)
self.sensor.enable_feature(adafruit_bno08x.BNO_REPORT_MAGNETOMETER, freq_50hz_us)
设置了内存清理功能,500帧清理一次,防止堵塞
if self.tick == 0 and (now.nanosec % 5 == 0):
gc.collect()
本文章使用limfx的vscode插件快速发布