IMU:er: Låt värddatorn vila med maskininlärning på kortet
Bidraget med av DigiKeys nordamerikanska redaktörer
2019-04-18
Tröghetsmätningsenheter (IMU:er) används för att ge en stadig ström av fleraxlig positionsinformation från accelerometrar, gyroskop och andra sensorer. När de många frihetsgraderna (DOF) alla genererar data kan de hopslagna dataströmmarna från dessa enheter hålla systemprocessorerna i konstant vaket läge och belasta dem när de gå igenom rå-IMU-data för att extrahera användbar gest- och systemplatsinformation. Vad konstruktörerna behöver är ett sätt att avlasta huvudprocessorn från den här sorteringsfunktionen. Maskininlärning kan vara svaret.
Efter en kort översikt av IMU-användningen introducerar den här artikeln 6DOF LSM6DSO från STMicroelectronics. Den använder sedan den här enheten för att visa hur tillägg och integrering av maskininlärning och beslutsträdsbehandling i IMU:er kan avlasta värdtillämpningens processor när det gäller realtidspositions- och rörelsebehandling samt hur dessa funktioner kan användas i verkliga tillämpningar.
En snabb IMU-granskning
IMU:er innehåller ett antal rörelsesensorer i en enhet och kan ge positionsinformation med hög precision. De kan användas för ett antal tillämpningar inklusive konsumentprodukter (mobiltelefoner), medicin (bildsystem), industri (robotteknik) och militärt (spårning av huvudrörelser). De reagerar på sensorns rörelser och inkluderar en eller flera av följande rörelsesensortyper:
- Gyroskopsensorer mäter förändringar av vinkelposition, normalt uttryckt i grader per sekund. Att integrera vinkelhastighet över tid ger en kontrollerad rörelsevinkel som kan användas för att spåra riktningsändringar. Gyroskop spårar relativa rörelser oberoende av gravitation, så fel genom sensorbias eller integrering leder till ett positionsfel som kallas "drift", som kan kompenseras med programvara.
- Accelerometrar mäter linjär acceleration, inklusive accelerationskomponenter som orsakas av enhetsrörelser och acceleration på grund av gravitation. Enheten för acceleration är g, där 1 g = jordens gravitationskraft = 9,8 meter/sekund2. Accelerometrar finns med en, två eller tre axlar, vilket definierar ett X, Y, Z-koordinatsystem.
- Magnetsensorer mäter magnetfältets styrka, typiskt i mikrotesla (µT) eller gauss (100 µT = 1 gauss). Den vanligaste magnetsensorn som används för mobil elektronik är en hall-effektmagnetometer med tre axlar. Genom att beräkna vinkeln hos den avkända jordens magnetfält och jämföra den mätta vinkeln med gravitationen som uppmätts med en accelerometer går det att mäta en enhets kurs med respekt till magnetisk norr med hög precision.
Rörelsespårning med IMU:er använder sensorfusion för att hämta en beräkning av relativ enhetsinriktning och position med hög precision från en känd startpunkt och riktning. Sensorfusion använder normalt programvara för att kombinera IMU:ns olika rörelsesensorutgångar med komplexa matematiska algoritmer som utvecklats antingen av IMU-tillverkaren eller tillämpningsutvecklaren.
Positionsberäkningar med sensorfusion kan ge följande mätningar:
- Gravitation – specifikt jordens gravitation, vilket exkluderar accelerationen som orsakas av rörelsen som enheten upplever. En accelerometer mäter gravitationsvektorn när IMU är stillastående. När IMU är i rörelse kräver gravitationsmätningen att data från en accelerometer och ett gyroskop slås samman och att därefter dra bort accelerationen som orsakas av rörelse.
- Linjär acceleration – motsvarar enhetens acceleration uppmätt av accelerometern, men med gravitationsvektorn bortdragen med programvara. IMU:ns linjära acceleration kan användas för att mäta rörelse i tredimensionell rymd.
- Riktning (position) – uppsättningen av Eulervinklar inklusive girvinkel, stigvinkel och rullvinkel, mätt i grader.
- Rotationsvektor – hämtas från en kombination av data från accelerometer, gyroskop och magnetometersensorer. Rotationsvektorn representerar en rotationsvinkel runt en specificerad axel.
Källor till IMU-fel
Gyroskop känner av riktning via vinkelhastighetsändringar, men de tenderar att förskjutas med tiden eftersom de endast känner av förändringar och inte har någon fast referensram. Att lägga till accelerometerdata till gyroskopdata låter programvaran minimera gyroskopbias för en mer exakt positionsberäkning. Accelerometrar känner av riktningsförändringar när det gäller gravitation och att data kan användas för att rikta ett gyroskop.
Accelerometrar är mer exakta för statiska (till skillnad från dynamiska) beräkningar. Gyroskop är bättre på att känna av riktningen när systemet redan är i rörelse. Accelerometrar reagerar snabbt, så jitter och brus hos accelerometern skapar ansamlade fel när dessa data används ensamma. Dessutom brukar accelerometrar förvrida accelerationer på grund av externa krafter som gravitationskrafter, som också ansamlas i systemet som brus. Att filtrera dessa data förbättrar precisionen.
Att kombinera ett gyroskops kortsiktiga precision med en accelerometers långsiktiga precision ger mer precisa positionsberäkningar genom att förlita sig på varje sensors styrka för att motverka eller åtminstone minska den andra sensorns svagheter. De två sensortyperna kompletterar varandra för att hjälpa till att minska fel, men det finns andra sätt på vilka fel reduceras.
Säkrad filtrering krävs för att minska felet
IMU-programvaran använder filtrering för att minimera positionsfel från IMU-data. Det finns flera filtreringsmetoder för att slå samman sensordata, var och en med varierande grader av komplexitet. Ett kompletterande filter kombinerar ett högpassgyroskopfilter med ett lågpassaccelerometerfilter. Högfrekvensbuller i accelerometerdata filtreras därför på kort sikt och jämnas ut av gyroskopdata.
Beräkningskraften som krävs för att utföra all den här sensorberbetningen, filtreringen och sammanslagningen förbrukar energi, vilket kan vara ett problem i batteridrivna system, särskilt när IMU-informationen inte krävs som ett kontinuerligt flöde. För många inbäddade applikationer kan betydande strömbesparingar göras om IMU kan generera en avbrottssignal som väcker värdprocessorn från viloläge så att den kan initiera bearbetning eller vidta åtgärder som ett resultat av avbrottet. För att aktivera den här funktionen börjar vissa IMU-leverantörer lägga till behandlings- och beslutsfattningsfunktioner till sina IMU:er.
Låt IMU:s sköta tänkandet
6DOF LSM6DSO från STMicroelectronics är en sådan IMU. Den innehåller tre MEMS-gyroskop (mikroelektromekaniska system (MEMS)) och tre MEMS-accelerometrar och kan känna av riktningsändringar och gester utan översikt eller hjälp från en värdprocessor med kortintern behandling. IMU förbrukar 0,55 milliampere (mA) i sitt högsta prestandaläge.
I det här läget kan LSM6DSO kontinuerligt övervaka sin egen position och rörelse i rummet och kan generera en avbrottssignal vid ett förordnat villkor som väcker värdprocessorn så att den kan utföra ytterligare behandling i sensorströmmen. Att använda en IMU med låg effekt som alltid kan vara i drift är fördelaktigt eftersom det låter värdprocessorn vila och endast aktiveras vid behov. Det är ett beprövat sätt att spara energi i batteridrivna system.
Utöver sina gyroskop- och accelerometersensorer innehåller LSM6DSO IMU ett signalbehandlings- och filterblock, en finit tillståndsmaskin (FSM) som kan köra så många som 16 program —som alla har ett gemensamt, konfigurerbar utgående datahastighet — och en maskininlärningskärna. När dessa resurser används tillsammans kan de generera händelseavkänningsavbrott för följande tillstånd:
- Fritt fall
- Aktivering
- 6DOF-orientering
- Avkänning av enkelt klick och dubbelklick
- Igenkänning av aktivitet/inaktivitet
- Stationär/rörelseavkänning
Signalbehandlingsblocket tillför omvandlingsfaktorer som lagrets i dess känslighetsregister för att skala råsensordata. Den omvandlar sedan strömmen av rå-IMU-sensordata till ett 16-bitars, half-precision floating point (HFP) byteformat som FSM förstår. IMU:ns MEMS-sensorer (accelerometrarna och gyroskopen) tillsammans med de två analog-till-digitalomvandlarna (ADC:er) och fyra filterblocken visas i figur 1. Filterblocken används för att omvandla analoga MEMS-sensorsignaler till filtrerade digitala dataströmmar.

Figur 1: LSM6DSO IMU använder två ADC:er för att omvandla analoga signaler från sina interna MEMS-accelerometrar och gyroskop till digitala strömmar. ADC:erna följs av fyra digitala filter som anpassar signalerna för beslutsfattande i den interna FSM och maskininlärningskärnan samt av värdprocessorn. (Bildkälla: STMicroelectronics)
Den programmerbara FSM består av ett konfigurationsblock och sexton programblock. FSM:ens konfigurationsblock konfigurerar och styr hela FSM. Vart och ett av FSM:s sexton programblock består av ett inmatningsvalblock och ett kodblock (figur 2). Båda dessa block styrs av värden som skrivs till register i IMU.

Figur 2: Vart och ett av FSM:s sexton programblock i LSM6DSO IMU:n består av ett inmatningsvalblock och ett kodblock. (Bildkälla: STMicroelectronics)
Ingångsväljarblocket leder de valda ingångsdata från en av IMU:ns interna sensorer eller från en extern sensor som är ansluten till IMU:ns sensornav till kodblocket. IMU:ns sensornav kan klara av upp fyra ytterligare externa sensorer som magnetometrar, som är anslutna till IMU via en I2C-port.
FSM:s kodblock innehåller ett program för tillståndsmaskinen. Programblockets dataavsnitts fasta del består av sex byte som definierar antalet trösklar, hysteres-, mask- och timerinställningarna för programmet. Programblockets variabla dataavsnitt rymmer de verkliga tröskel-, hysteres-, mask- och timerinställningarna för varje program enligt definitionen som sparats i den fasta delen av dataavsnittet.
Den fasta delen av dataavsnittet definierar storleken på den variabla delen av kodblockets minnesyta, en programmerbar återställningsvektor samt en programräknare. Eftersom de alla är 8-bitarsvärden begränsas varje FSM-program till 256 byte.
Programblockets anvisningsavsnitt innehåller det faktiska FSM-programmet. Programanvisningarna inkluderar operationskoder för att kontrollera sensorinsignaler mot trösklar, kontrollera nollgenomgångar och kontrollera timervärden för timeoutjämförelser. Operationskoderna anger det villkor som måste passera från det aktuella FSM-tillståndet till nästa. Dessutom finns det kommandooperationskoder för att välja trösklar och masker som lagrats i programmets variabla dataavsnitt samt för att ställa in IMU:ns sensornavs multiplexväljare för att ansluta till en av de fyra möjliga externa sensorerna samt för att bekräfta ett avbrott.
Varje FSM-program kan generera ett avbrott och kan modifiera innehållet i motsvarande registervärde baserat på den valda ingångssignalen. Dessa registervärden används för att skicka data från IMU till värdprocessorn.
En FSM kan ses som en mikroprocessor minus den aritmetiska logikenheten. FSM kan göra val, utföra jämförelser och kan fatta beslut om sin nästa status baserat på dessa jämförelser. Den beräknar inga andra värden än de booleska resultaten från jämförelserna.
FSM är inte en mikroprocessor. Den kan göra jämförelser och utföra enkla ändringar i programflödet baserat på dessa jämförelser. Eftersom det är en enkel maskin programmeras den direkt med FSM-operationskoderna. Det finns ingen högnivåspråkkompilator för FSM, men programmen är i allmänhet så enkla att ingen kompilator krävs.
Använda FSM
LSM6DSO IMU:ns FSM kan programmeras för att generera avbrottssignaler som aktiverats av fördefinierade rörelsemönster. FSM kan köra så många som 16 samtidiga, oberoende program för att känna av rörelse. Varje FSM-program består av en sekvens av if-then-else-steg och använder sensorströmmar från LSM6DSO:s accelerometrar och gyroskop som insignaler. Om något av FSM-programmen känner av en matchning med dess förprogrammerade mönster kan FSM generera ett avbrott till värdprocessorn.
Vart och ett av de sexton möjliga FSM-programmen innehåller tre minnesavsnitt för fasta data, variabla data och anvisningar. Ett enda FSM-programblockschema visas i figur 3.

Figur 3: FSM i STMicroelectronics LSM6DSO IMU innehåller sexton kodblock som vart och ett innehåller tre minnesavsnitt för fasta data, variabla data och anvisningar. (Bildkälla: STMicroelectronics)
Strukturen för ett enskilt program i ett kodblock består av tre avsnitt i ett minnesblock:
- Ett fast dataavsnitt, som har samma storlek för alla FSM-program
- Ett variabelt dataavsnitt som kan variera i storlek
- Ett instruktionsavsnitt som innehåller villkor och kommandon
Att programmera varje FSM-kodblock innefattar inläsning av de tre minnesavsnitten med programmeringsvärden som avgör FSM:s beteende. STMicroelectronics tillhandahåller ett FSM-programmeringsverktyg i den nedladdningsbara Unico-utvärderingsutvecklingsprogramvara och utvecklingsmiljö. STMicroelectronics har även inkluderat flera prov-FSM-program med Unico-utvärderingsverktygen som ett hjälpmedel i att lära sig hur FSM programmeras. Dessa provprogram demonstrerar flera IMU-baserade avbrottsscenarion inklusive:
- En grundläggande stegräknare
- System i fritt fall
- Enkel rörelsedetektering
- Systemet har tagits upp
- Systemet har skakats
- Systemet har slutat röra sig (stillastående)
- Handledsvridning
Exemplen på prov-FSM-programmet demonstrerar användning av de olika FSM-funktionerna. Valfria av dessa provprogram kan installeras i en IMU-provplattform som STEVAL-MKI109V3 eMotion STM32-utvärderingskortet, som har ett 28-stiftsuttag som godtar LSM6DSO STEVAL-MKI197V1 IMU-adapterkortet. Att programmera STEVAL-MKI109V2-kortet med ett av exempelprogrammen kräver bara några få klick i Unico-utvecklingsmiljön.
Dock innehåller LSM6DSO mer än man kan tro vid en första anblick.
Maskininlärningskärnan
LSM6DSO IMU innefattar även en mer sofistikerad och programmerbar mönstermatchningsmotor som kallas maskininlärningskärna. Detta kan identifiera rörelseklasser med flera sensordataströmmar från interna IMU-sensorer och några bifogade externa sensorer. Händelseklasser som känns igen inkluderar stillastående (ingen rörelse), promenad, jogging, cykling och körning. Klassificeringen tar formen av beslutsträd i maskininlärningskärnan.
Maskininlärningskärnan består av tre block: sensordatablocket, beräkningsblocket och beslutsträdet (figur 4). Maskininlärningskärnans sensordatablock sammanställer dataströmmar från IMU:ns interna accelerometrar och gyroskop samt från eventuella externa sensorer som fästs på IMU via I2C-gränssnittet. Beräkningsblocket kan filtrera sensordata med fördefinierade filtreringsparametrar och beräknar fönsterstatistik inklusive medelvärde, varians, amplitud topp till topp, minimum, maximum och nollgenomgång för sensordata. Beslutsträdet jämför den beräknade sensordatastatistiken med trösklar för att klassificera inkommande data.

Figur 4: Maskininlärningskärnan i STMicroelectronics LSM6DSO IMU består av tre block: ett sensordatablock som sammanställer dataströmmar från interna och externa sensorer, ett beräkningsblock som filtrerar sensordata och beräknar statistik utifrån dessa sensordata samt ett beslutsträd som klassificerar händelser som baseras på beräknad statistik. (Bildkälla: STMicroelectronics)
Som för LSM6DSO:s FSM används ett dedikerat verktyg i Unico-utvecklingsmiljön för att programmera IMU:ns maskininlärningskärna.
Den finita tillståndsmaskinen och maskininlärningskärnan kan också användas tillsammans med en värdprocessor för att implementera mer sofistikerade positionsspårningsalgoritmer. Det nedladdningsbara STMicroelectronics X-CUBE-MEMS1-programvarupaketet för företagets STM32Cube-utvecklingssystem inkluderar följande exempelprogramvarurutiner:
- Aktivitetsigenkänning – Ger information om vilken typ av aktivitet som utförs av användaren inklusive stillaståendes, promenad, snabb gång, jogging, cykling eller körning. Den här algoritmen används typiskt i mobiltelefoner eller olika typer av bärbara enheter.
- Avkänning av rörelsevaraktighet – I kombination med stegräknardata kan avkänning av rörelsevaraktighet användas för att avgöra hur många sekunder en användare är aktiv. Den här algoritmen används typiskt i bärbara enheter för tränings- eller hälsospårning.
- Vibrations- eller rörelseintensitetsavkänning – Ger information om intensiteten i användarens rörelser och kan skilja rörelseintensiteten i ett område från 0 (stilla) till 10 (sprintlöpning). Den här algoritmen kan används typiskt i mobiltelefoner eller någon typ av bärbar träningsenhet.
- Avkänning av bärposition – Ger information om hur användaren bär en enhet och kan skilja mellan följande positioner: på ett skrivbord, i handen, nära huvudet, i en skjortficka, i en byxficka, i en jackficka samt i en pendlande hand. Den här algoritmen används typiskt i mobiltelefoner eller olika typer av bärbara enheter för aktivitetsrelaterad kontextavkänning.
Slutsatser
Behovet av att ha en värdprocessor igång för att bibehålla positionsbestämningen och känna av rörelser och gester från IMU-data kan vara ett svårt mål att uppnå med batteridrivna inbäddade system på grund av värdprocessorns relativt höga effektförbrukning. Dock kan en ny generation av lågeffekt-IMU:er med tillräcklig beräkningskraft på kortet för att utföra maskininlärning lösa detta problem genom att låta värdprocessorn vila i lågströmläge tills den behövs.
Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.



