【RT-Thread作品秀】基于RT-Thread的姿态解算控制平台设计
作者:黄国盛
概述
是一个姿态解算算法验证平台以及控制算法验证平台
实现步骤:
使用CubeMax HAL库开发;
使用Python project_generator生成工程;
精简 RTT Master内核并加入C++支持;
配置调试接口;
构建C/C++混合编程框架;
MATLAB设计IIR Butterworth四阶低通滤波器;
传感器校准;
Mahony互补滤波算法 实现姿态解算;
加入mavlink/私有协议、UDP/USB上传数据到PC;
通过MATLAB/STM32验证和比较各种算法;
搭建单轴单桨一维角度控制平台;
……
开发环境
硬件:
碳纤管碳纤桨电机座、电机电调电源、ART_Pi、GY86、按键模块、硅胶线……
RT-Thread版本:
Master 4.0.3
开发工具及版本:
STM32CubeMX 6.0.1、IARforARM8.32.1、BeyondCompare4、MATLAB R2019b、VSCode、SmartGit20.1.5、匿名飞控地面站-0512……
RT-Thread使用情况概述
Pin、serial、cplusplus、time、finsh
硬件框架
ART_Pi、GY86、按键模块、电调……
软件框架说明
C/C++混合编程,进程和Loop Schedule结合
软件模块说明
核心部分:关于GY86的驱动以及姿态解算的Mahony
演示效果
演示视频:
比赛感悟
4/11/2020 Will_Watson
关于AHRS,卡尔曼滤波或互补滤波理解起来 简单但实施难度较大因为很多参数有待测定;
发现各开源项目用的最多的是Mahony算法,关于它的PI部分的本质着实难以理解;
当发现BP神经网络逼近好像可以和卡尔曼滤波一样,就当成滤波器,而且它还可以是一个逼近式的滤波器,免不了一番测试比较;
而后查看Madgwick原文中提到“梯度下降法”,瞬间明白了它的根源和本质;
当学习BP神经网络逼近的时候的思考流程如下:
逼近的需求来源是什么? 可能是为了预测系统下一个输出,为了做前馈控制? 预测 ——> 观测器 ——> 逼近式滤波器???
神经逼近网络 的特性有哪些? 不具有长时记忆,短时记忆即可以说只具有最近时刻 原系统的逼近特性;
尝试检测滤波特性,从这个角度理解 逼近网络 也是一个不断修正的预估观测器 或者说 卡尔曼滤波器
从执行流程/滤波效果上 分析一维卡尔曼滤波 和 NNI-BP逼近一维非线性系统的 区别:
卡尔曼滤波流程: 先验估计值——>先验估计方差——>依据各方差融合传感器数据做后验估计——>更新后验估计方差;
NNI-BP逼近流程: 由网络前状态和新输入直接计算输出——>与原系统输出比较修正网络状态(是为了下一次直接获得预估输出);
注:把原系统输出当成需滤波数据;把神经网络输出当成滤波后数据
卡尔曼滤波没有阶数的概念,而NNI-BP逼近的滤波特性具有一定延迟
卡尔曼滤波器的主要 控制参数(基于现实过程噪声和观测噪声)不可控,转移矩阵协方差矩阵需测得;
NNI-BP逼近 的主要 控制参数(学习速率和动量因子)可控 即滤波效果可调节,逼近系统特性;
也有一部分 “内闭环软拟硬输入输出”思想
当然算法的表现依然可以看起来就是加减乘除那么简单,双重卡尔曼看起来和做起来 可能没那么友好;