chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

意法半導(dǎo)體LSM6DSV320X IMU傳感器在Linux平臺(tái)的驅(qū)動(dòng)移植與姿態(tài)感知應(yīng)用實(shí)現(xiàn)

意法半導(dǎo)體中國 ? 來源:意法半導(dǎo)體中國 ? 2025-12-11 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

????????感謝各位電子愛好者與行業(yè)伙伴們對(duì)ST板卡評(píng)測(cè)系列活動(dòng)的持續(xù)關(guān)注!該系列活動(dòng)通過ST中文論壇板卡申請(qǐng)用戶對(duì)各類板卡的真實(shí)體驗(yàn)和評(píng)測(cè)文章分享,從多個(gè)維度、全方位深入剖析ST相關(guān)產(chǎn)品的性能表現(xiàn)與實(shí)際應(yīng)用場景,為用戶了解和選用板卡提供極具實(shí)用價(jià)值的參考。

LSM6DSV320X+MEMS主板開發(fā)平臺(tái)STEVAL-MKI109D的板卡評(píng)測(cè)活動(dòng)推出后,廣大網(wǎng)友踴躍參與,涌現(xiàn)出很多優(yōu)秀的評(píng)測(cè)投稿。本期為大家分享論壇網(wǎng)友短笛君的精彩評(píng)測(cè)內(nèi)容。

7a24fee0-d0a5-11f0-8c8f-92fbcf53809c.jpg

LSM6DSV320X+MEMS主板開發(fā)平臺(tái)STEVAL-MKI109D及其核心功能、應(yīng)用場景、技術(shù)亮點(diǎn)及評(píng)測(cè)方向已在前期活動(dòng)招募文中詳細(xì)說明,想快速了解細(xì)節(jié)的朋友,可回顧板卡評(píng)測(cè)|免費(fèi)申請(qǐng)微型AI傳感器LSM6DSV320X,解鎖高精度運(yùn)動(dòng)跟蹤新體驗(yàn)一文,這里不再贅述。本期我們聚焦論壇網(wǎng)友短笛君的實(shí)測(cè)體驗(yàn)。他首先分享了MEMS上位機(jī)體驗(yàn)并進(jìn)行MLC數(shù)據(jù)預(yù)采集,隨后實(shí)現(xiàn)了LSM6DSV320X IMU傳感器在Linux平臺(tái)的驅(qū)動(dòng)移植,并開發(fā)具備四元數(shù)和歐拉角解算的完整姿態(tài)感知應(yīng)用,最后講解了如何在MEMS Studio上進(jìn)行MLC的過程。

短笛君的評(píng)測(cè)內(nèi)容

MEMS上位機(jī)體驗(yàn)以及MLC數(shù)據(jù)采集

LSM6DSV320X是意法半導(dǎo)體推出的一款高性能、低功耗的6軸慣性測(cè)量單元,集成了3軸數(shù)字加速度計(jì)和3軸數(shù)字陀螺儀。它是ST傳感器產(chǎn)品線中的旗艦型號(hào)之一,專為需要高精度運(yùn)動(dòng)感知和復(fù)雜數(shù)據(jù)處理的先進(jìn)應(yīng)用而設(shè)計(jì)。實(shí)際效果,請(qǐng)?jiān)赟T中文論壇了解。

7aecbd7c-d0a5-11f0-8c8f-92fbcf53809c.png

根據(jù)官網(wǎng)描述這顆陀螺儀傳感器內(nèi)置雙量程加速度計(jì),高g加速度計(jì)量程高達(dá)320g量程。

內(nèi)置智能與機(jī)器學(xué)習(xí)核心:

●集成了可編程的有限狀態(tài)機(jī)和機(jī)器學(xué)習(xí)核心。

●FSM:允許用戶定義簡單的“如果-那么”邏輯規(guī)則,用于識(shí)別特定的運(yùn)動(dòng)模式(如單擊、雙擊、計(jì)步),無需喚醒主處理器,極大節(jié)省功耗。

●MLC:能夠直接在傳感器內(nèi)部運(yùn)行機(jī)器學(xué)習(xí)算法(如決策樹),用于識(shí)別更復(fù)雜的活動(dòng)和情境(如跑步、駕駛、設(shè)備跌落),將分類結(jié)果直接輸出,極大減輕主處理器的計(jì)算負(fù)擔(dān)。

后續(xù)測(cè)試中實(shí)際體驗(yàn)了MLC功能經(jīng)過學(xué)習(xí)數(shù)據(jù)后,內(nèi)置硬件邏輯可以在極低的功耗下運(yùn)行基礎(chǔ)的傳感器融合算法,很方便的可以處理外部數(shù)據(jù)最大限度的節(jié)省功耗。

LSM6DSV320X支持自適應(yīng)自配置(ASC)功能,能夠基于檢測(cè)到的特定運(yùn)動(dòng)模式,或基于MLC中配置的特定決策樹輸出,自動(dòng)實(shí)時(shí)重新配置設(shè)備,無需主處理器的干預(yù)。

內(nèi)置濾波器

該器件嵌入了一個(gè)專用加速度計(jì)傳感器,具有獨(dú)立通道和濾波功能,可進(jìn)行高g加速度檢測(cè),外部總線還支持拓展傳感器可以外界磁羅盤等數(shù)據(jù)進(jìn)行融合算法的處理。

LSM6DSV320X還支持了I3C接口,通訊速率大幅提高。

MEMS-Studio

MEMS Studio是ST為MEMS傳感器平臺(tái)推出的一款一體化上位機(jī)傳感器通過載板和軟件配置可以實(shí)現(xiàn)傳感器配置實(shí)時(shí)數(shù)據(jù)可視化管理與調(diào)試。

本次測(cè)評(píng)也基于這個(gè)上位機(jī)平臺(tái)開展。

7b64ad3c-d0a5-11f0-8c8f-92fbcf53809c.png

將評(píng)估平臺(tái)插入電腦后軟件會(huì)自動(dòng)讀取串口連接板卡。

7bcd9de2-d0a5-11f0-8c8f-92fbcf53809c.png

連接對(duì)應(yīng)板卡。

7c2990fc-d0a5-11f0-8c8f-92fbcf53809c.png

成功連接后,進(jìn)入傳感器配置界面,右側(cè)展示了三個(gè)傳感器的配置參數(shù),分別是低g值加速度計(jì)的量程,操作模式以及數(shù)據(jù)輸出速度(ODR),高g加速度計(jì)的量程以及ODR和陀螺儀量程以及ODR,通過配置這三個(gè)參數(shù)來達(dá)到不同的性能組合,數(shù)據(jù)輸出速率越高消耗電流越大,三個(gè)傳感器的最高輸出速率均可達(dá)到7.68KHz。

7c935ac8-d0a5-11f0-8c8f-92fbcf53809c.png

接下來就是配置寄存器,由于之前寫過默認(rèn)配置文件,所以寄存器這里已經(jīng)是配置好的狀態(tài),用戶依然可以在上位機(jī)中自由讀寫這幾個(gè)寄存器,數(shù)量太多可以自行查看。

這個(gè)功能對(duì)于軟件開發(fā)人員來說很方便!沒有載板平臺(tái)時(shí),開發(fā)者只能通過編寫代碼來讀寫寄存器,十分的麻煩,現(xiàn)在上位機(jī)可以一鍵配置、讀取,十分方便。

7ceb125e-d0a5-11f0-8c8f-92fbcf53809c.png

數(shù)據(jù)保存界面可以將傳感器的原始數(shù)據(jù)一鍵打log保存到csv文件內(nèi)對(duì)后面MLC也是十分方便。

7d4ea6de-d0a5-11f0-8c8f-92fbcf53809c.png

7da6e6c8-d0a5-11f0-8c8f-92fbcf53809c.png

7e1578a4-d0a5-11f0-8c8f-92fbcf53809c.png

7e762140-d0a5-11f0-8c8f-92fbcf53809c.png

7e762140-d0a5-11f0-8c8f-92fbcf53809c.png

幾個(gè)數(shù)據(jù)查看面板做的效果是非常直觀的用戶可以從圖表中直接觀察到傳感器的數(shù)據(jù)輸出。

7f3762e2-d0a5-11f0-8c8f-92fbcf53809c.png

高級(jí)功能中主要是針對(duì)FSM(有限狀態(tài)機(jī))以及MLC這兩個(gè)流程評(píng)估的后續(xù)將會(huì)更新MLC的評(píng)估。

7f9a3c8c-d0a5-11f0-8c8f-92fbcf53809c.png

在數(shù)據(jù)分析界面中主要是針對(duì)先前提到的數(shù)據(jù)保存功能保存下來的log數(shù)據(jù)進(jìn)行分析。

7ff4094c-d0a5-11f0-8c8f-92fbcf53809c.png

如上圖將原始數(shù)據(jù)載入后可以一鍵標(biāo)注數(shù)據(jù)。

8059cd5e-d0a5-11f0-8c8f-92fbcf53809c.png

上位機(jī)根據(jù)不同的數(shù)據(jù)行為會(huì)區(qū)分不同標(biāo)簽,用戶將打過標(biāo)簽的數(shù)據(jù)輸出到MLC這一步即可完成機(jī)器學(xué)習(xí)的模型訓(xùn)練,無需MCU介入傳感器自己就可以識(shí)別不同的行為模式。

80b90a08-d0a5-11f0-8c8f-92fbcf53809c.png

最后一項(xiàng)是類似NoDe-RED的基于流的開發(fā)工具,用戶可以根據(jù)不同的節(jié)點(diǎn)來創(chuàng)建自動(dòng)化任務(wù)以及應(yīng)用程序,無需編輯代碼即可快速評(píng)估傳感器。極大地縮短了產(chǎn)品開發(fā)流程;此外,產(chǎn)品功耗表明,九軸配置時(shí)實(shí)際測(cè)量電流約為800ua。

811fb96a-d0a5-11f0-8c8f-92fbcf53809c.jpg

關(guān)閉所有傳感器待機(jī)。

817dc186-d0a5-11f0-8c8f-92fbcf53809c.jpg

符合手冊(cè)中的描述,另外IO可編程電壓也實(shí)際測(cè)試了一下,這個(gè)功能是為了適配不同MCU間通信,例如部分SOC通信信號(hào)引腳電平耐受1.1V就可以改變電平信號(hào)電壓。

81e1c32a-d0a5-11f0-8c8f-92fbcf53809c.jpg

8238cbc0-d0a5-11f0-8c8f-92fbcf53809c.jpg

LSM6DSV320X不僅僅是一個(gè)運(yùn)動(dòng)傳感器,更是一個(gè)高度集成的“智能傳感中心”。它將高性能的加速度計(jì)和陀螺儀與獨(dú)特的嵌入式智能(FSM、MLC)技術(shù)相結(jié)合,為設(shè)備制造商提供了:

●系統(tǒng)級(jí)節(jié)能:通過邊緣計(jì)算將決策任務(wù)下放到傳感器,大幅降低主處理器負(fù)載和整體系統(tǒng)功耗。

●增強(qiáng)的功能性:能夠?qū)崿F(xiàn)更復(fù)雜、更直觀的用戶交互和情境感知。

●設(shè)計(jì)的簡化:高集成度減少了對(duì)外部元件的需求,簡化了硬件和軟件設(shè)計(jì)。

Linux平臺(tái)驅(qū)動(dòng)移植與姿態(tài)感知應(yīng)用實(shí)現(xiàn)

本文將帶你從零實(shí)現(xiàn)LSM6DSV320X IMU傳感器在Linux平臺(tái)的驅(qū)動(dòng)移植,并開發(fā)具備四元數(shù)和歐拉角解算的完整姿態(tài)感知應(yīng)用。

項(xiàng)目背景

LSM6DSV320X是一款高端、低噪聲、低功耗小型IMU,集成16g三軸數(shù)字低g加速度計(jì)、320g三軸數(shù)字高g加速度計(jì)及三軸數(shù)字陀螺儀,提供最佳IMU傳感器性能,采用四個(gè)單獨(dú)通道(用戶界面、OIS、EIS和高g加速度計(jì)數(shù)據(jù)通道)獨(dú)立處理加速度與角速率數(shù)據(jù),具有專用配置、處理和濾波功能,并配備專用高g傳感器實(shí)現(xiàn)高g沖擊與汽車碰撞檢測(cè)。

雖然在STM32生態(tài)中有完善的HAL驅(qū)動(dòng)支持,但在Linux平臺(tái)的資料相對(duì)較少。本項(xiàng)目成功將官方驅(qū)動(dòng)移植到Linux環(huán)境,并實(shí)現(xiàn)了實(shí)時(shí)姿態(tài)感知功能。

第一次寫Linux驅(qū)動(dòng)的項(xiàng)目,可能有許多筆誤,還希望各位大佬多多包涵。有錯(cuò)誤幫忙指出。

之所以選擇樹莓派是因?yàn)槠涞讓覫IC驅(qū)動(dòng)已經(jīng)相對(duì)完善,一致起來節(jié)省時(shí)間。

硬件準(zhǔn)備

82a027a2-d0a5-11f0-8c8f-92fbcf53809c.png

樹莓派的硬件pinout如上,我們使用的是IIC接口,所以需要使用GPIO2 GPIO3兩個(gè)引腳。

EVM板硬件連接

82f7cd0e-d0a5-11f0-8c8f-92fbcf53809c.jpg

主板側(cè)面引出排針直接連接IIC接口就可以。

8366bf0c-d0a5-11f0-8c8f-92fbcf53809c.jpg

需要注意的一點(diǎn)是板卡的供電,由于樹莓派接口使用的是3V3通信的電平,因此我們需將傳感器板的供電冒取下,改為右側(cè)兩個(gè)針并聯(lián),再將樹莓派的3V3連接到VDD上,這樣就完成了在無需軟件修改主板供電的情況下給傳感器供電,(主板給傳感器的電壓默認(rèn)為1.1V,如果用Typec給主板供電,可能會(huì)出現(xiàn)通信問題和電流倒灌)。

連接完成后,我們使用I2C工具探測(cè)連接。

83c1224e-d0a5-11f0-8c8f-92fbcf53809c.png

如圖所示,出現(xiàn)0X6A,即為傳感器已經(jīng)被Linux板卡識(shí)別到,接下來可使用i2cget工具讀取who am i寄存器。

8420e382-d0a5-11f0-8c8f-92fbcf53809c.png

出現(xiàn)0x73即linux與傳感器通信正常。

軟件準(zhǔn)備

訪問ST官網(wǎng)查找其傳感器驅(qū)動(dòng)庫(鏈接:https://github.com/STMicroelectronics/lsm6dsv320x-pid.git),clone下來驅(qū)動(dòng)庫,我們只需要重新實(shí)現(xiàn)在Linux平臺(tái)下的IIC讀寫操作即可。

項(xiàng)目結(jié)構(gòu)說明

84785888-d0a5-11f0-8c8f-92fbcf53809c.png

reg結(jié)尾是ST官方驅(qū)動(dòng)庫函數(shù),其中包括了傳感器的初始化、寄存器地址及配置枚舉變量,我們直接引用即可。rpi是我們的應(yīng)用文件,這三個(gè)文件要放在同一個(gè)目錄之下,否側(cè)GCC編譯會(huì)報(bào)錯(cuò)。

項(xiàng)目流程

項(xiàng)目初始化流程如下所示:主要是初始化變量以及打開IIC總線,并設(shè)置IIC從設(shè)備地址(0X6A)和異常處理,正常打開計(jì)入后,將句柄傳入ST驅(qū)動(dòng)庫提供的句柄中,進(jìn)行初始化驅(qū)動(dòng)上下文。

84da8a44-d0a5-11f0-8c8f-92fbcf53809c.png

IIC總線打開正常后,會(huì)讀取傳感器的WHO_AM_I寄存器并驗(yàn)證,讀取并驗(yàn)證無誤后復(fù)位一次傳感器,開始配置傳感器參數(shù)(ACC:120Hz ±4g,陀螺儀:120Hz ±2000dps,BDU啟用),并獲取一次時(shí)間戳。參數(shù)設(shè)置原理可以參考使用MEMS_Studio的Easy Config配置傳感器。

8530249a-d0a5-11f0-8c8f-92fbcf53809c.png

傳感器參數(shù)配置完成后,就開始整個(gè)應(yīng)用邏輯:

1. 計(jì)算時(shí)間間隔(dt) ↓

2. 檢查數(shù)據(jù)就緒狀態(tài) ↓

3. 如果數(shù)據(jù)就緒:

●讀取加速度計(jì)數(shù)據(jù) → 轉(zhuǎn)換為mg和g

●讀取陀螺儀數(shù)據(jù) → 轉(zhuǎn)換為mdps和dps

●計(jì)算四元數(shù)姿態(tài)

●計(jì)算歐拉角 ↓

4. 顯示所有數(shù)據(jù) ↓

5. 延遲50ms ↓

6. 返回步驟1

85957778-d0a5-11f0-8c8f-92fbcf53809c.png

數(shù)據(jù)輸出格式為四種:

原始加速度:[x,y,z] // 16位原始數(shù)據(jù)

物理加速度:[ax,ay,az] // 毫克單位

姿態(tài)四元數(shù):[w,x,y,z] // 歸一化四元數(shù)

歐拉角度:[橫滾,俯仰,偏航] // 度單位

由于是先行評(píng)估驗(yàn)證,關(guān)于歐拉角的偏航角積分偏移問題還沒有處理,所以在代碼中并未進(jìn)行轉(zhuǎn)換,輸出數(shù)據(jù)一直為0,后續(xù)可以移植AHRS的參考算法進(jìn)行磁力計(jì)糾偏。

應(yīng)用層代碼解析

作者之前也不是linux開發(fā)者,目前只是新手,下文中如有錯(cuò)誤還請(qǐng)多多海涵。

這個(gè)操作框架設(shè)計(jì)如下:

85ec4382-d0a5-11f0-8c8f-92fbcf53809c.png

I2C驅(qū)動(dòng)層實(shí)現(xiàn)

首先需要實(shí)現(xiàn)Linux平臺(tái)的I2C讀寫接口:

staticint32_trpi_i2c_write(void*handle,uint8_treg,
             constuint8_t*buf,uint16_tlen)
{
 intfd = *(int*)handle;
 structi2c_msgmsg;
 structi2c_rdwr_ioctl_dataioctl_data;
 // 構(gòu)建發(fā)送緩沖區(qū)(寄存器地址+數(shù)據(jù))
 uint8_t*tx_buf =malloc(len +1);
  tx_buf[0] = reg;
 memcpy(&tx_buf[1], buf, len);
 // 配置I2C消息
  msg.addr = LSM6DSV320X_I2C_ADD;
  msg.flags =0; // 寫操作
  msg.len = len +1;
  msg.buf = tx_buf;
 // 執(zhí)行IOCTL調(diào)用
 if(ioctl(fd, I2C_RDWR, &ioctl_data) 

關(guān)于ioctl子系統(tǒng)的相關(guān)內(nèi)容,可以在bilibili搜索MP157 Ioctl子系統(tǒng)相關(guān)視頻。

傳感器初始化配置

// 設(shè)備檢測(cè)和初始化
intfd =open("/dev/i2c-1", O_RDWR);
ioctl(fd, I2C_SLAVE,0x6A); // 設(shè)置傳感器地址
// 初始化驅(qū)動(dòng)上下文
stmdev_ctx_tdev_ctx;
dev_ctx.write_reg = rpi_i2c_write;
dev_ctx.read_reg = rpi_i2c_read;
dev_ctx.handle = &fd;
// 驗(yàn)證設(shè)備ID
uint8_twho_am_i;
lsm6dsv320x_device_id_get(&dev_ctx, &who_am_i);
printf("設(shè)備ID: 0x%02X
", who_am_i);
// 傳感器配置
lsm6dsv320x_xl_data_rate_set(&dev_ctx, LSM6DSV320X_ODR_AT_120Hz); // 加速度計(jì)120Hz
lsm6dsv320x_gy_data_rate_set(&dev_ctx, LSM6DSV320X_ODR_AT_120Hz); // 陀螺儀120Hz
lsm6dsv320x_xl_full_scale_set(&dev_ctx, LSM6DSV320X_4g);     // ±4g量程
lsm6dsv320x_gy_full_scale_set(&dev_ctx, LSM6DSV320X_2000dps);   // ±2000dps量程

這里實(shí)現(xiàn)的關(guān)鍵一步是

// 設(shè)備檢測(cè)和初始化
intfd =open("/dev/i2c-1", O_RDWR);
ioctl(fd, I2C_SLAVE,0x6A); // 設(shè)置傳感器地址
// 初始化驅(qū)動(dòng)上下文
stmdev_ctx_tdev_ctx;
dev_ctx.write_reg = rpi_i2c_write;
dev_ctx.read_reg = rpi_i2c_read;
dev_ctx.handle = &fd;

Linux中可以將文件視作操作的最小單位,這里IIC1總線視作文件打開,并將上文中實(shí)現(xiàn)的操作接口函數(shù)以指針的形式賦值給ST驅(qū)動(dòng)接口平臺(tái)。

打開文件對(duì)應(yīng)Linux內(nèi)核中通過VFS訪問IIC驅(qū)動(dòng)。

ioctl工作原理

// ioctl調(diào)用流程:
用戶空間 → 系統(tǒng)調(diào)用 → 內(nèi)核VFS → I2C核心層 → I2C適配器驅(qū)動(dòng)
// 在內(nèi)核中的實(shí)現(xiàn)大致如下:
staticlongi2c_dev_ioctl(structfile*file, unsignedintcmd, unsignedlongarg)
{
 switch(cmd) {
 caseI2C_SLAVE:
   // 設(shè)置從設(shè)備地址到i2c_client結(jié)構(gòu)體
    client->addr = arg;
   break;
  }
}

其次是初始化一個(gè)接口體對(duì)象,這部分在ST驅(qū)動(dòng)代碼中,我們直接引用

stmdev_ctx_t dev_ctx;

結(jié)構(gòu)體的定義:

typedefstruct{
 int32_t(*write_reg)(void*handle,uint8_treg,constuint8_t*buf,uint16_tlen);
 int32_t(*read_reg)(void*handle,uint8_treg,uint8_t*buf,uint16_tlen);
 void*handle;
 void(*mdelay)(uint32_tmillisec);
}stmdev_ctx_t;
//write_reg:函數(shù)指針,指向寄存器寫函數(shù)
//read_reg:函數(shù)指針,指向寄存器讀函數(shù)
//handle:泛型指針,用于傳遞平臺(tái)特定數(shù)據(jù)
//mdelay:函數(shù)指針,指向延遲函數(shù)(可選)

我們的設(shè)計(jì)模式是將IIC操作統(tǒng)一成抽象的接口,即上文中實(shí)現(xiàn)的rpi的IIC驅(qū)動(dòng)層實(shí)現(xiàn)。這樣就可以在不同平臺(tái)中復(fù)用相同業(yè)務(wù)邏輯的代碼,只需要移植驅(qū)動(dòng)層函數(shù)即可,所以在rpi驅(qū)動(dòng)實(shí)現(xiàn)中,保持了和ST一樣的參數(shù)。

// ST驅(qū)動(dòng)期望的函數(shù)簽名
int32_t(*write_reg)(void*handle,uint8_treg,constuint8_t*buf,uint16_tlen);
int32_t(*read_reg)(void*handle,uint8_treg,uint8_t*buf,uint16_tlen);
// 我們的平臺(tái)實(shí)現(xiàn)必須匹配這個(gè)簽名
staticint32_trpi_i2c_write(void*handle,uint8_treg,constuint8_t*buf,uint16_tlen);
staticint32_trpi_i2c_read(void*handle,uint8_treg,uint8_t*buf,uint16_tlen);

通過以上實(shí)現(xiàn)思路,我們即可在Linux系統(tǒng)下完成通過IIC讀寫傳感器寄存器的操作。

傳感器的初始化操作

實(shí)現(xiàn)了寄存器的訪問后,應(yīng)用層上編寫邏輯就和STM32這類MCU相差不大,就是封裝函數(shù)在寫入即可,具體封裝實(shí)現(xiàn)邏輯可以在ST中文論壇獲取。

// 設(shè)備檢測(cè)和初始化
intfd =open("/dev/i2c-1", O_RDWR);
ioctl(fd, I2C_SLAVE,0x6A); // 設(shè)置傳感器地址
// 初始化驅(qū)動(dòng)上下文
stmdev_ctx_tdev_ctx;
dev_ctx.write_reg = rpi_i2c_write;
dev_ctx.read_reg = rpi_i2c_read;
dev_ctx.handle = &fd;
// 驗(yàn)證設(shè)備ID
uint8_twho_am_i;
lsm6dsv320x_device_id_get(&dev_ctx, &who_am_i);
printf("設(shè)備ID: 0x%02X
", who_am_i);
// 傳感器配置
lsm6dsv320x_xl_data_rate_set(&dev_ctx, LSM6DSV320X_ODR_AT_120Hz); // 加速度計(jì)120Hz
lsm6dsv320x_gy_data_rate_set(&dev_ctx, LSM6DSV320X_ODR_AT_120Hz); // 陀螺儀120Hz
lsm6dsv320x_xl_full_scale_set(&dev_ctx, LSM6DSV320X_4g);     // ±4g量程
lsm6dsv320x_gy_full_scale_set(&dev_ctx, LSM6DSV320X_2000dps);   // ±2000dps量程

姿態(tài)解算

本項(xiàng)目實(shí)現(xiàn)了基于互補(bǔ)濾波的實(shí)時(shí)姿態(tài)解算:

// 四元數(shù)計(jì)算函數(shù)
static void calculate_quaternion(float accel[3], float gyro[3],
               float dt, floatq[4])
{
 //加速度計(jì)數(shù)據(jù)歸一化
  float norm =sqrt(accel[0]*accel[0] + accel[1]*accel[1] + accel[2]*accel[2]);
 if(norm >0.0f) {
    accel[0] /= norm; accel[1] /= norm; accel[2] /= norm;
  }
  // 陀螺儀數(shù)據(jù)轉(zhuǎn)換(度/秒 → 弧度/秒)
  float gx = gyro[0] * M_PI /180.0f;
  float gy = gyro[1] * M_PI /180.0f;
  float gz = gyro[2] * M_PI /180.0f;
 //互補(bǔ)濾波誤差校正
  float vx =2.0f * (q_prev[1]*q_prev[3] - q_prev[0]*q_prev[2]);
  float vy =2.0f * (q_prev[0]*q_prev[1] + q_prev[2]*q_prev[3]);
  float vz = q_prev[0]*q_prev[0] - q_prev[1]*q_prev[1]
       - q_prev[2]*q_prev[2] + q_prev[3]*q_prev[3];
 //誤差積分和反饋校正
  float ex = (accel[1]*vz - accel[2]*vy);
  float ey = (accel[2]*vx - accel[0]*vz);
  float ez = (accel[0]*vy - accel[1]*vx);
 //四元數(shù)微分方程數(shù)值積分
  float qdot[4];
  qdot[0] =0.5f * (-q_prev[1]*gx - q_prev[2]*gy - q_prev[3]*gz);
  qdot[1] =0.5f * (q_prev[0]*gx + q_prev[2]*gz - q_prev[3]*gy);
 //... 其他分量計(jì)算
  // 積分和歸一化
 for(inti =0; i 

四元數(shù)轉(zhuǎn)歐拉角:

static void quaternion_to_euler(floatq[4], float euler[3])
{
  float w =q[0],x=q[1],y=q[2], z =q[3];
 //橫滾角 (Roll)
  float sinr_cosp =2.0f * (w *x+y* z);
  float cosr_cosp =1.0f -2.0f * (x*x+y*y);
  euler[0] =atan2(sinr_cosp, cosr_cosp) *180.0f / M_PI;
 //俯仰角 (Pitch)
  float sinp =2.0f * (w *y- z *x);
 if(fabs(sinp) >=1.0f)
    euler[1] = copysign(90.0f, sinp);
 else
    euler[1] = asin(sinp) *180.0f / M_PI;
 //偏航角 (Yaw)
  float siny_cosp =2.0f * (w * z +x*y);
  float cosy_cosp =1.0f -2.0f * (y*y+ z * z);
  euler[2] =atan2(siny_cosp, cosy_cosp) *180.0f / M_PI;
}

該部分參考可以參照哈爾濱工程大學(xué)創(chuàng)夢(mèng)之翼戰(zhàn)隊(duì),韭菜的菜開源。

●四元數(shù)EKF姿態(tài)更新算法 - 知乎

RoboMaster機(jī)器人姿態(tài)解算方案開源 - 知乎

代碼編譯

先前已經(jīng)說了,驅(qū)動(dòng)庫和APP要放在一個(gè)目錄下。

gcc -o lsm6dsv320x_test lsm6dsv320x_rpi.c lsm6dsv320x_reg.c -lm
./lsm6dsv320x_test

864a1728-d0a5-11f0-8c8f-92fbcf53809c.png

執(zhí)行效果如上。

使用MEMS Studio訓(xùn)練數(shù)據(jù)并使用MLC功能進(jìn)行識(shí)別

MLC(Machine Learning Core)功能可以將一些跑在MCU上的算法(如TinyML)在傳感器端實(shí)現(xiàn),從而實(shí)現(xiàn)MCU休眠時(shí)傳感器可以持續(xù)檢測(cè)某一特定動(dòng)作組,這個(gè)學(xué)習(xí)處理的過程依靠決策邏輯樹構(gòu)成,具體的信息可以參考ST官網(wǎng)資料。

鏈接:https://www.st.com/content/st_com/en/MEMS-Sensors-Ecosystem-for-Machine-Learning.html

本文主要講解如何在MEMS Studio上進(jìn)行MLC過程。首先選擇我們使用的板卡,具體配置過程可以參考前邊的內(nèi)容。

869fe1bc-d0a5-11f0-8c8f-92fbcf53809c.png

配置完傳感器之后,使用MEMS Studio的數(shù)據(jù)采集功能,分別采集兩種不同動(dòng)作的數(shù)據(jù),每個(gè)動(dòng)作保存3組。記得打上時(shí)間戳,后面有用。

保存好的數(shù)據(jù)如下圖:

8703bf0c-d0a5-11f0-8c8f-92fbcf53809c.png

shake和standby分別對(duì)應(yīng)抖動(dòng)時(shí)候和靜止板卡時(shí)候的數(shù)據(jù),用戶可以根據(jù)自己不同的情況多定制幾種不同的功能。

875f78d8-d0a5-11f0-8c8f-92fbcf53809c.png

電機(jī)advance feature里面的MLC選項(xiàng)卡,分別導(dǎo)入我們的數(shù)據(jù),注意是分別導(dǎo)入。

我們先點(diǎn)擊browse,將我們的數(shù)據(jù)加載進(jìn)選項(xiàng)框中,然后再右面輸入欄中輸入我們的數(shù)據(jù)標(biāo)簽,然后再點(diǎn)擊load。這樣我們對(duì)于某一個(gè)動(dòng)作的數(shù)據(jù)集就會(huì)被加載進(jìn)去了,不要一股腦的選中所有數(shù)據(jù)全部加載進(jìn)去。

87c712c2-d0a5-11f0-8c8f-92fbcf53809c.png

881ce580-d0a5-11f0-8c8f-92fbcf53809c.png

加載完數(shù)據(jù)之后,我們開始配置窗口長度以及量程,配置的選項(xiàng)可以參考我們?cè)诔跏蓟瘯r(shí)侯的選項(xiàng),每一項(xiàng)對(duì)應(yīng)著選擇就好。

88812662-d0a5-11f0-8c8f-92fbcf53809c.png

接著,我們點(diǎn)擊下面的AREF generation,配置我們的濾波器(filters),這個(gè)濾波器是重要的,可以對(duì)我們的原始信號(hào)就行處理。

88df390a-d0a5-11f0-8c8f-92fbcf53809c.png

濾波器一般會(huì)配置每個(gè)軸,可以選擇平均值濾波,高通低通濾波器等,一般選擇平均值濾波可以平滑擾動(dòng)信號(hào)。

濾波器配置完成之后,我們就可以選擇我們的特征數(shù)據(jù)(features)了,MLC的特征數(shù)據(jù)選擇可以選擇某幾個(gè)統(tǒng)計(jì)學(xué)特征,如:

MEAN:均值,表示在給定的時(shí)間窗口內(nèi)計(jì)算的傳感器數(shù)據(jù)的平均值。

VARIANCE:方差,表示數(shù)據(jù)的分散程度,反映數(shù)據(jù)在給定時(shí)間窗口內(nèi)的變化。

ENERGY(能量):計(jì)算信號(hào)在給定時(shí)間窗口內(nèi)的總能量。它反映了信號(hào)強(qiáng)度,通常用于識(shí)別較強(qiáng)或較弱的活動(dòng)。

PEAK_TO_PEAK(峰峰值):峰峰值特征計(jì)算的是信號(hào)在給定時(shí)間窗口內(nèi)的最大值和最小值之間的差異。這個(gè)特征可以幫助檢測(cè)信號(hào)的最大振幅。

88df390a-d0a5-11f0-8c8f-92fbcf53809c.png

上述選項(xiàng)配置完成后,我們確定生成設(shè)備樹arrf文件。

899c472a-d0a5-11f0-8c8f-92fbcf53809c.png

然后點(diǎn)擊“Generate Decision Tree”按鈕以生成決策樹。這個(gè)按鈕基于之前通過ARFF文件加載的數(shù)據(jù)和特征生成了一個(gè)分類模型(決策樹),用于識(shí)別不同的動(dòng)作或狀態(tài)。

89fe8d5e-d0a5-11f0-8c8f-92fbcf53809c.png

這個(gè)界面有一個(gè)關(guān)鍵的參數(shù)即Kappa統(tǒng)計(jì)量,它是一種用于衡量分類器在考慮偶然因素時(shí)的準(zhǔn)確性度量。這里顯示為0.307479,雖然分類準(zhǔn)確度高,但Kappa值可能表明結(jié)果受到數(shù)據(jù)分布或樣本量的影響。

● 0.81 - 1.00:幾乎完美的分類一致性。

● 0.61 - 0.80:很好的分類一致性。

● 0.41 - 0.60:中等分類一致性。

● 0.21 - 0.40:較低的分類一致性。

● 0.00 - 0.20:幾乎沒有一致性(接近隨機(jī)猜測(cè))。

我們可以查看決策樹模型:

8a6bc02c-d0a5-11f0-8c8f-92fbcf53809c.png

這個(gè)模型清晰的展示了不同行為執(zhí)行的動(dòng)作,還可以查看模型輸出信息。

8ac9251e-d0a5-11f0-8c8f-92fbcf53809c.png

還記得之前我們說的錄log時(shí)候要打上時(shí)間戳嗎?我們?cè)赿ebug界面中導(dǎo)入我們錄制的log數(shù)據(jù),導(dǎo)入傳感器配置文件。

8b1dfc10-d0a5-11f0-8c8f-92fbcf53809c.png

耐心等待一會(huì)加載完成,就可以在我們剛剛訓(xùn)練好的模型上面運(yùn)行記錄的log數(shù)據(jù),并查看分類效果,類似我們?cè)跓挼r(shí)候的訓(xùn)練集和驗(yàn)證集,來驗(yàn)證我們模型的識(shí)別效果。

8b8049e2-d0a5-11f0-8c8f-92fbcf53809c.png

由于剛才我們的MLC模型只訓(xùn)練了兩種狀態(tài),所以MLC_OUT的輸出只有0X00和0XFF兩種狀態(tài)。

總的來說,MEMS Studio給我們提供了一套非常完成且簡單易用的傳感器解決方案,方便用戶來評(píng)估功能以及分析數(shù)據(jù),無代碼開箱即用的設(shè)計(jì)大大縮減了開發(fā)進(jìn)程,并且支持非常多的傳感器。

另外,ST提供的跨平臺(tái)開發(fā)驅(qū)動(dòng)包也很好用,類似Linux驅(qū)動(dòng)的設(shè)計(jì)框架可以很方便的讓我們把驅(qū)動(dòng)移植到各個(gè)平臺(tái)中使用,而不僅僅是限制于MCU平臺(tái)。

ST工程師總結(jié):

短笛君這篇對(duì)LSM6DSV320X的測(cè)評(píng)精準(zhǔn)聚焦于ST工具鏈的完整性與易用性,評(píng)測(cè)視角非常地全面,過程也很細(xì)致!從LSM6DSV32X延伸到開發(fā)工具,再落到實(shí)際開發(fā)體驗(yàn),形成了從硬件到產(chǎn)品的完整分析鏈條。確實(shí),ST廣受贊譽(yù)的生態(tài)系統(tǒng)提供完善易用的開發(fā)工具套件和驅(qū)動(dòng)代碼,可以很方便的實(shí)現(xiàn)跨平臺(tái)的移植和開發(fā)調(diào)試。對(duì)于MLC,ST的MEMS STUDIO可以大幅度減少開發(fā)人員的工作量,進(jìn)一步優(yōu)化產(chǎn)品開發(fā)周期

歡迎關(guān)注ST中文論壇了解更多不同產(chǎn)品系列板塊的測(cè)評(píng)活動(dòng)。

文章所有圖片來源于:ST中文論壇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2574

    文章

    54472

    瀏覽量

    786623
  • mems
    +關(guān)注

    關(guān)注

    129

    文章

    4391

    瀏覽量

    197835
  • 意法半導(dǎo)體
    +關(guān)注

    關(guān)注

    31

    文章

    3338

    瀏覽量

    111159
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    408

    瀏覽量

    29235

原文標(biāo)題:評(píng)測(cè)分享|LSM6DSV320X:驅(qū)動(dòng)移植+姿態(tài)解算+MLC實(shí)操全記錄

文章出處:【微信號(hào):STMChina,微信公眾號(hào):意法半導(dǎo)體中國】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    半導(dǎo)體發(fā)布四款新型500萬像素圖像傳感器

    半導(dǎo)體(ST)發(fā)布了一個(gè)新系列500萬像素CMOS圖像傳感器,包括VD1943、VB1943、VD5943和VB5943等。
    的頭像 發(fā)表于 11-08 14:07 ?1147次閱讀
    <b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導(dǎo)體</b>發(fā)布四款新型500萬像素圖像<b class='flag-5'>傳感器</b>

    LSM6DSV16BX:集成機(jī)器學(xué)習(xí)核心與Qvar感應(yīng)的先進(jìn)慣性測(cè)量單元

    加速度、角速度和Qvar檢測(cè)數(shù)據(jù)。它具有專用配置、處理和濾波功能。LSM6DSV16BX緊湊型封裝 (2.5mm x 3.0mm x 0.71mm) 中集成了UI
    的頭像 發(fā)表于 10-28 13:45 ?306次閱讀
    <b class='flag-5'>LSM6DSV</b>16BX:集成機(jī)器學(xué)習(xí)核心與Qvar感應(yīng)的先進(jìn)慣性測(cè)量單元

    LSM6DSV16X:集成機(jī)器學(xué)習(xí)與靜電感應(yīng)的高性能慣性測(cè)量單元

    。它具有專用配置、處理和濾波功能。LSM6DSV16X高性能模式下提升性能(0.65mA時(shí)),具有不間斷低功耗特性,實(shí)現(xiàn)最佳的消費(fèi)者運(yùn)動(dòng)體驗(yàn)。
    的頭像 發(fā)表于 10-28 11:52 ?385次閱讀
    <b class='flag-5'>LSM6DSV16X</b>:集成機(jī)器學(xué)習(xí)與靜電感應(yīng)的高性能慣性測(cè)量單元

    LSM6DSV16B:面向TWS與可穿戴設(shè)備的6IMU,融合傳感與低功耗智能

    于提供精確的加速度和角速度感測(cè)數(shù)據(jù)處理。 LSM6DSV16B具有專用于運(yùn)動(dòng)跟蹤、設(shè)備電源管理、游戲3D頭部跟蹤和增強(qiáng)音頻體驗(yàn)的雙通道,提供無與倫比的多用性和功能。該器件還具有單獨(dú)通道,用于通過專用配置、處理和濾波實(shí)現(xiàn)振動(dòng)檢測(cè)進(jìn)行骨傳導(dǎo)。
    的頭像 發(fā)表于 10-25 14:28 ?854次閱讀
    <b class='flag-5'>LSM6DSV</b>16B:面向TWS與可穿戴設(shè)備的<b class='flag-5'>6</b>軸<b class='flag-5'>IMU</b>,融合<b class='flag-5'>傳感</b>與低功耗智能

    LSM6DSV32X:高性能6IMU,賦能下一代智能運(yùn)動(dòng)感知應(yīng)用

    三通道架構(gòu)的IMU傳感器,通過專用的配置、處理和濾波功能處理三個(gè)獨(dú)立通道(用戶界面、OIS和EIS)上的加速度和角速度數(shù)據(jù)。LSM6DSV32X利用嵌入式高級(jí)專用特性支持邊緣計(jì)算過程,例如用于可配置運(yùn)動(dòng)追蹤的有限狀態(tài)機(jī) (FSM
    的頭像 發(fā)表于 10-23 15:00 ?500次閱讀
    <b class='flag-5'>LSM6DSV32X</b>:高性能<b class='flag-5'>6</b>軸<b class='flag-5'>IMU</b>,賦能下一代智能運(yùn)動(dòng)<b class='flag-5'>感知</b>應(yīng)用

    LSM6DSV320X:面向高端應(yīng)用的智能6軸慣性測(cè)量單元

    。STMicroelectronics IMU設(shè)計(jì)用于提供精確的運(yùn)動(dòng)檢測(cè)和傳感器融合功能,因此非常適合用于汽車碰撞檢測(cè)、運(yùn)動(dòng)監(jiān)控和物聯(lián)網(wǎng) (IoT) 設(shè)備。LSM6DSV320X采用四通道架構(gòu),可在四個(gè)獨(dú)立通道上處理加速度和角
    的頭像 發(fā)表于 10-21 14:34 ?352次閱讀
    <b class='flag-5'>LSM6DSV320X</b>:面向高端應(yīng)用的智能<b class='flag-5'>6</b>軸慣性測(cè)量單元

    詳解半導(dǎo)體LSM6DSV320X傳感器開發(fā)平臺(tái)性能

    ST又一新品力作,LSM6DSV320X傳感器,并且得到STEVAL-MKI109D主板的支持,使用配套的上位機(jī)可以實(shí)現(xiàn)豐富的產(chǎn)品體驗(yàn)和開發(fā)輔助。本文主要在不詳細(xì)閱讀用戶手冊(cè)的情況下進(jìn)行一番盲操。
    的頭像 發(fā)表于 10-18 09:45 ?3875次閱讀
    詳解<b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導(dǎo)體</b><b class='flag-5'>LSM6DSV320X</b><b class='flag-5'>傳感器</b>開發(fā)<b class='flag-5'>平臺(tái)</b>性能

    LSM6DSV80X 6軸慣性測(cè)量單元技術(shù)解析

    STMicroelectronics LSM6DSV80X 6軸慣性測(cè)量單元 (IMU) 單個(gè)元件中集成了兩個(gè)加速度計(jì)結(jié)構(gòu),可實(shí)現(xiàn)16g
    的頭像 發(fā)表于 10-15 17:42 ?590次閱讀
    <b class='flag-5'>LSM6DSV80X</b> <b class='flag-5'>6</b>軸慣性測(cè)量單元技術(shù)解析

    半導(dǎo)體擬收購恩智浦MEMS傳感器業(yè)務(wù)

    服務(wù)多重電子應(yīng)用領(lǐng)域、全球排名前列的半導(dǎo)體公司半導(dǎo)體(簡稱ST)宣布,擬收購恩智浦半導(dǎo)體(簡稱NXP)的MEMS
    的頭像 發(fā)表于 07-30 16:01 ?731次閱讀

    Yole分析:半導(dǎo)體并購恩智浦MEMS傳感器業(yè)務(wù)有何影響?

    的MEMS傳感器業(yè)務(wù),將僅次于博世,成為全球第二大MEMS傳感器廠商,同時(shí)由于業(yè)務(wù)汽車、消費(fèi)電子等領(lǐng)域的高度重疊,將增強(qiáng)博世與
    的頭像 發(fā)表于 07-28 18:24 ?4.8w次閱讀
    Yole分析:<b class='flag-5'>意</b><b class='flag-5'>法</b><b class='flag-5'>半導(dǎo)體</b>并購恩智浦MEMS<b class='flag-5'>傳感器</b>業(yè)務(wù)有何影響?

    半導(dǎo)體推出全新AI MEMS傳感器LSM6DSV320X

    半導(dǎo)體(簡稱ST)日前宣布了一款一個(gè)節(jié)省空間的封裝內(nèi)集成運(yùn)動(dòng)跟蹤傳感器和高重力沖擊測(cè)量傳感器
    的頭像 發(fā)表于 05-26 09:55 ?1168次閱讀

    LSM6DSV16X內(nèi)置的傳感器融合算法SFLP,輸出的四元數(shù)是自身坐標(biāo)系下的還是全局坐標(biāo)系下的?

    請(qǐng)問各位大佬,LSM6DSV16X內(nèi)置的傳感器融合算法SFLP,輸出的四元數(shù)是自身坐標(biāo)系下的還是全局坐標(biāo)系下的?以及輸出的陀螺儀偏置是實(shí)時(shí)更新的嗎?謝謝!
    發(fā)表于 03-14 07:22

    使用LSM6DSV16XLSM6DSO16IS,請(qǐng)問下有沒有內(nèi)置濾波調(diào)整的接口?

    最近在使用LSM6DSV16XLSM6DSO16IS這兩款傳感器,請(qǐng)問下有沒有內(nèi)置濾波調(diào)整的接口?另外求一份AN4650那樣的應(yīng)用手冊(cè)
    發(fā)表于 03-07 07:17

    ST LSM6DSV80XIMU集成先進(jìn)的二合一MEMS加速計(jì),用于可穿戴設(shè)備和跟蹤中的高強(qiáng)度沖擊感應(yīng)

    IMU單封裝集成16g/80g雙量程感測(cè)和邊緣處理功能,為價(jià)格實(shí)惠的可穿戴設(shè)備帶來先進(jìn)的運(yùn)動(dòng)監(jiān)測(cè)功能,真正做到“像職業(yè)運(yùn)動(dòng)員一樣的訓(xùn)練! 半導(dǎo)體創(chuàng)新的慣性測(cè)量單元
    的頭像 發(fā)表于 03-06 10:49 ?1278次閱讀

    半導(dǎo)體STGAP3S系列電隔離柵極驅(qū)動(dòng)器概述

    半導(dǎo)體的STGAP3S系列碳化硅(SiC)和 IGBT功率開關(guān)柵極驅(qū)動(dòng)器集成了
    的頭像 發(fā)表于 01-09 14:48 ?1218次閱讀