概述
MotionFX庫(kù)包含用于校準(zhǔn)陀螺儀、加速度計(jì)和磁力計(jì)傳感器的例程。 將磁力計(jì)的數(shù)據(jù)與加速度計(jì)和陀螺儀的數(shù)據(jù)融合,可以大幅提高姿態(tài)估計(jì)的精度。三軸加速度計(jì)提供設(shè)備的傾斜信息,陀螺儀提供角速度信息,而磁力計(jì)提供方位信息,三者結(jié)合可以提供更加準(zhǔn)確和穩(wěn)定的三維方向和姿態(tài)信息。
需要樣片的可以加群申請(qǐng):615061293 。
視頻教學(xué)
[https://www.bilibili.com/video/BV1V4421S7Xs/]
樣品申請(qǐng)
[https://www.wjx.top/vm/OhcKxJk.aspx#]
源碼下載
[https://download.csdn.net/download/qq_24312945/89563161]
硬件準(zhǔn)備
首先需要準(zhǔn)備一個(gè)開(kāi)發(fā)板,這里我準(zhǔn)備的是自己繪制的開(kāi)發(fā)板,需要的可以進(jìn)行申請(qǐng)。
主控為STM32H503CB,陀螺儀為L(zhǎng)SM6DS3TR-C,磁力計(jì)為L(zhǎng)IS2MDL。
DataLogFusion
這里參考ST提供的DataLogFusion程序,DataLogFusion示例應(yīng)用展示了如何使用STMicroelectronics開(kāi)發(fā)的MotionFX中間件庫(kù)進(jìn)行實(shí)時(shí)運(yùn)動(dòng)傳感器數(shù)據(jù)融合。
DataLogFusion的主要執(zhí)行流程包括初始化硬件和傳感器、中間件庫(kù)(MotionFX)的配置與初始化、傳感器數(shù)據(jù)的采集、實(shí)時(shí)數(shù)據(jù)融合以及結(jié)果的輸出。
磁力計(jì)校準(zhǔn)過(guò)程
MotionFX庫(kù)的磁力計(jì)校準(zhǔn)庫(kù)用于補(bǔ)償硬鐵失真。磁力計(jì)校準(zhǔn)可以以比傳感器融合輸出數(shù)據(jù)速率更慢的頻率進(jìn)行(例如25 Hz)。
● 初始化磁力計(jì)校準(zhǔn)庫(kù):
● 調(diào)用 MotionFX_MagCal_init 或 MotionFX_CM0P_MagCal_init 函數(shù)。
● 定期調(diào)用校準(zhǔn)函數(shù):
● 調(diào)用 MotionFX_MagCal_run 或 MotionFX_CM0P_MagCal_run 函數(shù),直到校準(zhǔn)成功完成。
● 檢查校準(zhǔn)是否成功:
● 調(diào)用 MotionFX_MagCal_getParams 或 MotionFX_CM0P_MagCal_getParams 函數(shù)。如果函數(shù)返回 mag_data_out.cal_quality = MFX_MAGCALGOOD 或 MFX_CM0P_CALQSTATUSBEST,則校準(zhǔn)成功。
初始化磁力計(jì)
調(diào)用 MotionFX_MagCal_init 或 MotionFX_CM0P_MagCal_init 函數(shù)。這里通過(guò)調(diào)用 MotionFX_MagCal_init,確保磁力計(jì)校準(zhǔn)模塊處于準(zhǔn)備就緒狀態(tài),能夠正確處理和校準(zhǔn)磁力計(jì)數(shù)據(jù)。
通過(guò)初始化磁力計(jì)校準(zhǔn)庫(kù),并定期調(diào)用校準(zhǔn)函數(shù),可以確保磁力計(jì)數(shù)據(jù)的準(zhǔn)確性,從而提高姿態(tài)估計(jì)的精度。
頻率定義。
#define ALGO_FREQ 100U /* Algorithm frequency 100Hz */
#define ALGO_PERIOD (1000U / ALGO_FREQ) /* Algorithm period [ms] */
添加到初始化中進(jìn)行調(diào)用。
文檔中提到的磁力計(jì)數(shù)據(jù)要除以50,這是因?yàn)镸otionFX庫(kù)使用的單位是微特斯拉(μT)/50。
在lsm6ds3tr-c_app.h中添加定義。
#define FROM_MGAUSS_TO_UT50 (0.1f/50.0f)
MFX_Arithmetic_Init
MFX_Arithmetic_Init 的作用是初始化 MotionFX 算法庫(kù),并進(jìn)行相關(guān)參數(shù)設(shè)置和配置。 由于現(xiàn)在是9軸解析,需要新定義用于保存 MotionFX 算法狀態(tài)的數(shù)組。
static uint8_t mfxstate_9x[FX_STATE_SIZE];
函數(shù)功能:
● 初始化 MotionFX 算法庫(kù)。
● 配置傳感器的偏置值和方向。
● 設(shè)置輸出參考模式。
● 啟用或禁用 6 軸和 9 軸 MotionFX 引擎。
void MFX_Arithmetic_Init(void)
{
MFX_knobs_t iKnobs;
MFX_knobs_t *ipKnobs = &iKnobs;
/* 初始化 MotionFX 算法庫(kù),參考自 AlgoBuilded 生成代碼 */
/* 初始化 MotionFX 引擎 */
MotionFX_initialize((MFXState_t *)mfxstate_9x);
/* 獲取當(dāng)前的內(nèi)部結(jié)構(gòu)參數(shù) */
MotionFX_getKnobs(mfxstate_9x, ipKnobs);
/* 設(shè)置傳感器 */
ipKnobs- >gbias_acc_th_sc = GBIAS_ACC_TH_SC_9X;
ipKnobs- >gbias_gyro_th_sc = GBIAS_GYRO_TH_SC_9X;
ipKnobs- >gbias_mag_th_sc = GBIAS_MAG_TH_SC_9X;
/* 未知作用操作,數(shù)據(jù)定向? */
ipKnobs- >acc_orientation[0] = ACC_ORIENTATION_X;
ipKnobs- >acc_orientation[1] = ACC_ORIENTATION_Y;
ipKnobs- >acc_orientation[2] = ACC_ORIENTATION_Z;
ipKnobs- >gyro_orientation[0] = GYR_ORIENTATION_X;
ipKnobs- >gyro_orientation[1] = GYR_ORIENTATION_Y;
ipKnobs- >gyro_orientation[2] = GYR_ORIENTATION_Z;
ipKnobs- >mag_orientation[0] = MAG_ORIENTATION_X;
ipKnobs- >mag_orientation[1] = MAG_ORIENTATION_Y;
ipKnobs- >mag_orientation[2] = MAG_ORIENTATION_Z;
/* 設(shè)置輸出參考模式,數(shù)據(jù)參考系 */
ipKnobs- >output_type = MFX_ENGINE_OUTPUT_ENU;
ipKnobs- >LMode = 1;
/* modx 代表 MotionFX_update 函數(shù)調(diào)用頻率,
* modx = 1,每調(diào)用 MotionFX_propagate 函數(shù)一次,可調(diào)用 MotionFX_update 函數(shù)一次,適用于STM32F4系列處理器,
* modx = 2,每調(diào)用 MotionFX_propagate 函數(shù)兩次,可調(diào)用 MotionFX_update 函數(shù)一次,適用于STM32F1系列處理器。
*/
ipKnobs- >modx = 1;
/* 設(shè)置內(nèi)部結(jié)構(gòu)參數(shù) */
MotionFX_setKnobs(mfxstate_9x, ipKnobs);
/* 使能6軸 MotionFX 引擎*/
MotionFX_enable_6X(mfxstate_9x, MFX_ENGINE_DISABLE);
/* 關(guān)閉9軸 MotionFX 引擎*/
MotionFX_enable_9X(mfxstate_9x, MFX_ENGINE_ENABLE);
}
卡爾曼濾波算法
運(yùn)行卡爾曼濾波傳播算法MotionFX_propagate。
根據(jù)需要更新卡爾曼濾波器MotionFX_update。
需要注意的是這2各算法非常吃資源,需要注意MCU算力分配。
函數(shù)結(jié)構(gòu)如下所示。
演示
和指南針一個(gè)方向。
偏移90度。
偏移180度。
偏移270度。
審核編輯 黃宇
-
數(shù)據(jù)采集
+關(guān)注
關(guān)注
39文章
6255瀏覽量
114046 -
運(yùn)動(dòng)檢測(cè)
+關(guān)注
關(guān)注
0文章
34瀏覽量
12636 -
磁力計(jì)
+關(guān)注
關(guān)注
1文章
71瀏覽量
20947
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(1)----獲取ID
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(1)----獲取ID](https://file1.elecfans.com/web2/M00/AD/F5/wKgaomVR04eANOf3AAKgDqGnRkw633.png)
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(6)----FIFO數(shù)據(jù)讀取與配置
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(<b class='flag-5'>6</b>)----FIFO<b class='flag-5'>數(shù)據(jù)</b>讀取與配置](https://file1.elecfans.com/web2/M00/FE/0D/wKgaomaYgkSAUZwMAAlOsGN2SpE275.png)
驅(qū)動(dòng)LSM6驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(7)----MotionFX庫(kù)解析空間坐標(biāo)DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(7)----MotionFX庫(kù)解析空間坐標(biāo)<b class='flag-5'>DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)</b>采](https://file1.elecfans.com/web2/M00/FE/0F/wKgaomaYhQSACmgeAAkXM1pKhlA076.png)
陀螺儀LSM6DSV16X與AI集成(11)----融合磁力計(jì)進(jìn)行姿態(tài)解算
![陀螺儀<b class='flag-5'>LSM6</b>DSV16X與AI集成(11)----<b class='flag-5'>融合</b><b class='flag-5'>磁力計(jì)</b><b class='flag-5'>進(jìn)行</b><b class='flag-5'>姿態(tài)</b><b class='flag-5'>解</b><b class='flag-5'>算</b>](https://file1.elecfans.com/web2/M00/00/21/wKgZomasjbqAcVQGAAkXM0hc4yg779.png)
lsm6ds3tr-c傳感器集合模式無(wú)法使用的原因?
請(qǐng)問(wèn)LSM6DS3TR和LSM6DS3TR-C兩個(gè)型號(hào)能否完全兼容?
LSM6DS3TR-C數(shù)據(jù)讀取異常是安利的問(wèn)題?怎么處理?
LSM6DS3TR-C的低功耗模式和高性能模式有什么區(qū)別
LSM6DS3的應(yīng)用筆記
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(2)----配置濾波器
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(2)----配置濾波器](https://file1.elecfans.com/web2/M00/AD/F5/wKgaomVR04eANOf3AAKgDqGnRkw633.png)
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(3)----獲取傳感器數(shù)據(jù)
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(<b class='flag-5'>3</b>)----獲取傳感器<b class='flag-5'>數(shù)據(jù)</b>](https://file1.elecfans.com/web2/M00/AF/DF/wKgZomVS03uARJHvAAIrLLQ3-rg432.png)
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(4)----上報(bào)匿名上位機(jī)實(shí)現(xiàn)可視化
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(4)----上報(bào)匿名上位機(jī)<b class='flag-5'>實(shí)現(xiàn)</b>可視化](https://file1.elecfans.com/web2/M00/AE/0F/wKgaomVS1S-ADhQQAAIDPgMFgpg842.png)
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(5)----姿態(tài)解算
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(5)----<b class='flag-5'>姿態(tài)</b><b class='flag-5'>解</b><b class='flag-5'>算</b>](https://file1.elecfans.com/web2/M00/AE/0F/wKgaomVS1gSAac_GAAFTh-vQS_Y622.png)
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(8)----中斷獲取FIFO數(shù)據(jù)并應(yīng)用MotionFX庫(kù)解析空間坐標(biāo)
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(8)----中斷獲取FIFO<b class='flag-5'>數(shù)據(jù)</b>并應(yīng)用MotionFX庫(kù)解析空間坐標(biāo)](https://file1.elecfans.com/web2/M00/FE/7B/wKgaomabpfyAey7iAAkXM5ka7wg848.png)
驅(qū)動(dòng)LSM6DS3TR-C實(shí)現(xiàn)高效運(yùn)動(dòng)檢測(cè)與數(shù)據(jù)采集(11)----磁力計(jì)校準(zhǔn)
![<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>LSM6DS3TR-C</b><b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>高效</b><b class='flag-5'>運(yùn)動(dòng)檢測(cè)</b>與<b class='flag-5'>數(shù)據(jù)采集</b>(11)----<b class='flag-5'>磁力計(jì)</b>校準(zhǔn)](https://file1.elecfans.com/web2/M00/00/21/wKgZomasjbqAcVQGAAkXM0hc4yg779.png)
評(píng)論