【RT-Thread作品秀】基于RT-Thread的姿態(tài)解算控制平臺設(shè)計
作者:黃國盛
概述
是一個姿態(tài)解算算法驗證平臺以及控制算法驗證平臺
實現(xiàn)步驟:
使用CubeMax HAL庫開發(fā);
使用Python project_generator生成工程;
精簡 RTT Master內(nèi)核并加入C++支持;
配置調(diào)試接口;
構(gòu)建C/C++混合編程框架;
MATLAB設(shè)計IIR Butterworth四階低通濾波器;
傳感器校準;
Mahony互補濾波算法 實現(xiàn)姿態(tài)解算;
加入mavlink/私有協(xié)議、UDP/USB上傳數(shù)據(jù)到PC;
通過MATLAB/STM32驗證和比較各種算法;
搭建單軸單槳一維角度控制平臺;
……
開發(fā)環(huán)境
硬件:
碳纖管碳纖槳電機座、電機電調(diào)電源、ART_Pi、GY86、按鍵模塊、硅膠線……
RT-Thread版本:
Master 4.0.3
開發(fā)工具及版本:
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、按鍵模塊、電調(diào)……
軟件框架說明
C/C++混合編程,進程和Loop Schedule結(jié)合
軟件模塊說明
核心部分:關(guān)于GY86的驅(qū)動以及姿態(tài)解算的Mahony
演示效果
演示視頻:
比賽感悟
4/11/2020 Will_Watson
關(guān)于AHRS,卡爾曼濾波或互補濾波理解起來 簡單但實施難度較大因為很多參數(shù)有待測定;
發(fā)現(xiàn)各開源項目用的最多的是Mahony算法,關(guān)于它的PI部分的本質(zhì)著實難以理解;
當發(fā)現(xiàn)BP神經(jīng)網(wǎng)絡(luò)逼近好像可以和卡爾曼濾波一樣,就當成濾波器,而且它還可以是一個逼近式的濾波器,免不了一番測試比較;
而后查看Madgwick原文中提到“梯度下降法”,瞬間明白了它的根源和本質(zhì);
當學(xué)習BP神經(jīng)網(wǎng)絡(luò)逼近的時候的思考流程如下:
逼近的需求來源是什么? 可能是為了預(yù)測系統(tǒng)下一個輸出,為了做前饋控制? 預(yù)測 ——> 觀測器 ——> 逼近式濾波器???
神經(jīng)逼近網(wǎng)絡(luò) 的特性有哪些? 不具有長時記憶,短時記憶即可以說只具有最近時刻 原系統(tǒng)的逼近特性;
嘗試檢測濾波特性,從這個角度理解 逼近網(wǎng)絡(luò) 也是一個不斷修正的預(yù)估觀測器 或者說 卡爾曼濾波器
從執(zhí)行流程/濾波效果上 分析一維卡爾曼濾波 和 NNI-BP逼近一維非線性系統(tǒng)的 區(qū)別:
卡爾曼濾波流程: 先驗估計值——>先驗估計方差——>依據(jù)各方差融合傳感器數(shù)據(jù)做后驗估計——>更新后驗估計方差;
NNI-BP逼近流程: 由網(wǎng)絡(luò)前狀態(tài)和新輸入直接計算輸出——>與原系統(tǒng)輸出比較修正網(wǎng)絡(luò)狀態(tài)(是為了下一次直接獲得預(yù)估輸出);
注:把原系統(tǒng)輸出當成需濾波數(shù)據(jù);把神經(jīng)網(wǎng)絡(luò)輸出當成濾波后數(shù)據(jù)
卡爾曼濾波沒有階數(shù)的概念,而NNI-BP逼近的濾波特性具有一定延遲
卡爾曼濾波器的主要 控制參數(shù)(基于現(xiàn)實過程噪聲和觀測噪聲)不可控,轉(zhuǎn)移矩陣協(xié)方差矩陣需測得;
NNI-BP逼近 的主要 控制參數(shù)(學(xué)習速率和動量因子)可控 即濾波效果可調(diào)節(jié),逼近系統(tǒng)特性;
也有一部分 “內(nèi)閉環(huán)軟擬硬輸入輸出”思想
當然算法的表現(xiàn)依然可以看起來就是加減乘除那么簡單,雙重卡爾曼看起來和做起來 可能沒那么友好;