【RT Thread作品秀】基于RT Thread的姿态解算控制平台设计 电路方案
【RT-Thread作品秀】基于RT-Thread的姿态解算控制平台设计作者:黄国盛 概述是一个姿态解算算法验证平台以及控制算法验证平台 实现步骤: 使用CubeMax HAL库开发; 使用Python project_generator生成工程; 精简RTT Master内核并加入C++支持; 配置调试接口; 构建C/C++混合编程框架; 硬件IIC驱动GY-86传感器驱动; 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/2020Will_Watson 关于AHRS,卡尔曼滤波或互补滤波理解起来 简单但实施难度较大因为很多参数有待测定; 发现各开源项目用的最多的是Mahony算法,关于它的PI部分的本质着实难以理解; 当发现BP神经网络逼近好像可以和卡尔曼滤波一样,就当成滤波器,而且它还可以是一个逼近式的滤波器,免不了一番测试比较; 而后查看Madgwick原文中提到“梯度下降法”,瞬间明白了它的根源和本质; 当学习BP神经网络逼近的时候的思考流程如下: 逼近的需求来源是什么?可能是为了预测系统下一个输出,为了做前馈控制? 预测 ——> 观测器 ——> 逼近式滤波器??? 神经逼近网络的特性有哪些?不具有长时记忆,短时记忆即可以说只具有最近时刻原系统的逼近特性; 尝试检测滤波特性,从这个角度理解逼近网络也是一个不断修正的预估观测器或者说卡尔曼滤波器 从执行流程/滤波效果上 分析一维卡尔曼滤波 和 NNI-BP逼近一维非线性系统的 区别: 卡尔曼滤波流程:先验估计值——>先验估计方差——>依据各方差融合传感器数据做后验估计——>更新后验估计方差; NNI-BP逼近流程: 由网络前状态和新输入直接计算输出——>与原系统输出比较修正网络状态(是为了下一次直接获得预估输出); 注:把原系统输出当成需滤波数据;把神经网络输出当成滤波后数据 卡尔曼滤波没有阶数的概念,而NNI-BP逼近的滤波特性具有一定延迟 卡尔曼滤波器的主要控制参数(基于现实过程噪声和观测噪声)不可控,转移矩阵协方差矩阵需测得; NNI-BP逼近 的主要 控制参数(学习速率和动量因子)可控 即滤波效果可调节,逼近系统特性; 也有一部分“内闭环软拟硬输入输出”思想 当然算法的表现依然可以看起来就是加减乘除那么简单,双重卡尔曼看起来和做起来可能没那么友好;
用户评论