IMU's: laat je host slapen met on-board machine learning
Bijgedragen door De Noord-Amerikaanse redacteurs van DigiKey
2019-04-18
Inertiële meeteenheden (IMU's) worden veel gebruikt om een gestage stroom van meerassige positie-informatie van versnellingsmeters, gyroscopen en andere sensoren te leveren. Met de vele vrijheidsgraden (DOF, degrees of freedom) die allemaal data genereren, kunnen de samengevoegde gegevensstromen van deze apparaten systeemprocessors constant in de waakstand houden en belasten terwijl ze door de onbewerkte IMU-data moeten ploegen om daar nuttige informatie over gebaren en systeemlocaties uit te halen. Wat ontwerpers nodig hebben, is een manier om die zoekfunctie weg te halen van de hoofdprocessor. Machine learning zou het antwoord kunnen zijn.
Na een kort overzicht van het gebruik van IMU's introduceert dit artikel de 6DOF LSM6DSO van STMicroelectronics. Daarna gebruikt het dit apparaat om te laten zien hoe het toevoegen en integreren van machine learning en beslissingsboomverwerking in IMU's de host-applicatieprocessor kan ontlasten van de real-time verwerking van positie en beweging en hoe die functies kunnen worden gebruikt in echte toepassingen.
Een snelle bespreking van IMU's
IMU's integreren een aantal bewegingssensoren in één apparaat en kunnen zeer nauwkeurige positie-informatie leveren. Ze kunnen voor veel verschillende toepassingen worden gebruikt, zoals voor de consument (mobiele telefoons), medisch (imaging), industrieel (robotica) en militair (head-tracking). Ze reageren op de beweging van de sensor en hebben één of meerdere van de volgende soorten bewegingssensoren:
- Gyroscoopsensoren meten veranderingen van hoekposities, die gewoonlijk worden uitgedrukt in graden per seconde. Het integreren van hoeksnelheid in de tijd heeft een gemeten bewegingshoek tot gevolg die kan worden gebruikt om richtingsveranderingen te registreren. Gyroscopen volgen relatieve beweging onafhankelijk van zwaartekracht, waardoor fouten door sensorafwijkingen of -integratie een positiefout tot gevolg hebben die "drift" wordt genoemd en die kan worden gecompenseerd met software.
- Versnellingsmeters meten lineaire versnelling, waaronder versnellingscomponenten die worden veroorzaakt door beweging van het apparaat en versnelling door zwaartekracht. De meeteenheid van versnelling is g, waarbij 1g = de zwaartekracht van de aarde = 9,8 meter/seconde2. Snelheidsmeters zijn verkrijgbaar met één, twee of drie assen, die een X, Y, Z-coördinatensysteem definiëren.
- Magnetische sensoren meten de magnetische veldsterkte, gewoonlijk in eenheden van microTesla (µT) of Gauss (100 µT = 1 Gauss). De meest algemeen gebruikte magnetische sensor voor mobiele elektronica is een drieassige Hall-effect-magnetometer. Door de hoek van het gedetecteerde magnetische veld van de aarde te berekenen en die gemeten hoek te vergelijken met de zwaartekracht, gemeten door een versnellingsmeter, is het mogelijk om de richting van een apparaat ten opzichte van het magnetische noorden zeer nauwkeurig te bepalen.
Bewegingsregistratie met IMU's gebruikt sensorfusie om een enkele, zeer nauwkeurige schatting van de relatieve richting en positie van het apparaat af te leiden van een bekend startpunt en richting. Sensorfusie gebruikt gewoonlijk software om de diverse bewegingssensoruitgangen van de IMU te combineren met complexe wiskundige algoritmes die door de IMU-fabrikant of de applicatie-ontwikkelaar zijn ontwikkeld.
Positieberekeningen met sensorfusie kunnen de volgende metingen produceren:
- Zwaartekracht – specifiek de zwaartekracht van de aarde, wat de versnelling uitsluit die wordt veroorzaakt door de beweging die het apparaat ervaart. Een versnellingsmeter meet de zwaartekrachtvector wanneer de IMU stationair is. Wanneer de IMU in beweging is, moeten voor de zwaartekrachtmeting gegevens van een versnellingsmeter en een gyroscoop worden gefuseerd en moet de versnelling die wordt veroorzaakt door beweging daarvan worden afgetrokken.
- Lineaire versnelling – gelijk aan de versnelling van het apparaat zoals gemeten door de versnellingsmeter, maar met aftrekking van de zwaartekrachtvector met behulp van software. Lineaire IMU-versnelling kan worden gebruikt om beweging in driedimensionale ruimte te meten.
- Richting (houding) – de set Euler-hoeken "yaw" (azimuth), "pitch" en "roll", gemeten in eenheden van graden.
- Rotatievector – afgeleid van een combinatie van gegevens van versnellingsmeter-, gyroscoop- en magnetometersensoren. De rotatievector vertegenwoordigt een rotatiehoek rond een gespecificeerde as.
Bronnen van IMU-fouten
Gyroscopen detecteren richting via veranderingen in hoeksnelheden, maar ze neigen in de loop van de tijd naar driften omdat ze alleen veranderingen detecteren en geen vast referentiekader hebben. Door versnellingsmetergegevens toe te voegen aan de gyroscoopgegevens, kan software de gyroscoopafwijking beperken voor een meer nauwkeurige schatting van de locatie. Versnellingsmeters detecteren richtingsveranderingen ten opzichte van zwaartekracht en die gegevens kunnen worden gebruikt om een gyroscoop te richten.
Versnellingsmeters zijn nauwkeuriger voor statische (het tegenovergestelde van dynamische) berekeningen. Gyroscopen zijn beter in het detecteren van richting wanneer het systeem al in beweging is. Versnellingsmeters reageren snel, waardoor jitter en ruis van versnellingsmeters een geaccumuleerde fout produceren wanneer alleen die gegevens worden gebruikt. Bovendien neigen versnellingsmeters ernaar om versnellingen te vervormen vanwege externe krachten als zwaartekracht, die zich ook in het systeem ophopen als ruis. Het filteren van deze gegevens verbetert de nauwkeurigheid.
De combinatie van de kortetermijn-nauwkeurigheid van een gyroscoop met de langetermijn-nauwkeurigheid van een versnellingsmeter heeft preciezere richtingsmetingen tot gevolg doordat op de sterke punten van iedere sensor wordt gerekend om de zwakheden van de andere sensor op te heffen of in ieder geval te verminderen. De twee sensortypes vullen elkaar aan om fouten te helpen verminderen, maar daar zijn ook andere manieren voor.
Gefuseerde filtering nodig om fouten te verminderen
IMU-software gebruikt filtering om positiefouten uit IMU-data te beperken. Er zijn diverse filteringmethoden voor gefuseerde sensorgegevens beschikbaar, met diverse graden van complexiteit. Een aanvullend filter combineert een hoogdoorlaat-gyroscoopfilter met een laagdoorlaat-versnellingsmeterfilter. Hoogfrequente ruis in de gegevens van de versnellingsmeter wordt daarom uitgefilterd in de korte termijn en afgevlakt door de gegevens van de gyroscoop.
De rekenkracht die nodig is voor het uitvoeren van al deze sensorverwerking, filtering en fusering verbruikt energie, wat een probleem kan zijn in systemen die op batterijen werken, met name wanneer de IMU-informatie niet nodig is als doorlopende stroom. Voor veel ingebedde applicaties kan een aanzienlijke hoeveelheid energie worden bespaard als de IMU een interrupt kan genereren die de hostprocessor uit de slaapmodus haalt zodat deze de verwerking kan starten of acties kan ondernemen als gevolg van de interrupt. Om dit mogelijk te maken, zijn sommige IMU-verkopers begonnen om verwerkings- en besluitvormingsfuncties in hun IMU's op te nemen.
Laat de IMU het denkwerk doen
De 6DOF LSM6DSO van STMicroelectronics is een van die IMU's. Hij heeft drie micro-elektromechanische systeem (MEMS) -gyroscopen en drie MEMS-versnellingsmeters en kan richtingsveranderingen en gebaren detecteren zonder toezicht of hulp van een hostprocessor, allemaal met on-board verwerking. De IMU verbruikt 0,55 milliampère (mA) bij werking in de modus met de hoogste prestaties.
In deze modus kan de LSM6DSO zijn eigen houding en beweging in ruimte voortdurend monitoren en een interrupt genereren in een vooraf bepaalde toestand, die de hostprocessor wekt om aanvullende verwerking op de sensorstroom uit te voeren. Het is gunstig om een IMU met laag vermogen te gebruiken die altijd in werking kan blijven, omdat deze de hostprocessor laat slapen en alleen wekt wanneer dat nodig is. Dit is een beproefde manier om energie te besparen in systemen die op batterijen werken.
Naast de gyroscoop- en versnellingsmetersensoren, bevat de LSM6DSO-IMU een signaalconditionerings- en filterblok, een eindigetoestandsautomaat (FSM, finite state machine) die maar liefst 16 programma's kan uitvoeren, allemaal met een gedeelde, configureerbare uitgangsdatasnelheid, en een machine learning-kern. In combinatie gebruikt kunnen deze bronnen gebeurtenisdetectie-interrupts genereren in de volgende omstandigheden:
- Vrije val
- Wakeup
- 6DOF-richting
- Detectie van enkele klik en dubbele klik
- Herkenning activiteit/inactiviteit
- Detectie stationair/beweging
Het signaalconditioneringsblok past conversiefactoren toe die zijn opgeslagen in de gevoeligheidsregisters om de onbewerkte sensorgegevens te schalen. Daarna converteert het de onbewerkte IMU-sensorgegevensstroom in een 16-bits, half-precision floating point (HFP) byteformaat dat de FSM kan begrijpen. De MEMS-sensoren van de IMU (de versnellingsmeters en gyroscopen) zijn samen met de twee analoog-naar-digitaal-converters (ADC's) en vier filterblokken te zien op Afbeelding 1. De filterblokken worden gebruikt om de analoge MEMS-sensorsignalen te converteren in gefilterde digitale datastromen.

Afbeelding 1: De LSM6DSO IMU gebruikt twee ADC's om analoge signalen van zijn interne MEMS-versnellingsmeters en -gyroscopen te converteren in digitale stromen. De ADC's worden gevolgd door vier digitale filters om de signalen te conditioneren voor besluitvorming door de interne FSM en machine learning-kern en door de hostprocessor. (Bron afbeelding: STMicroelectronics)
De programmeerbare FSM bestaat uit een configuratieblok en zestien programmablokken. Het configuratieblok van de FSM configureert en bestuurt de hele FSM. Elk van de zestien programmablokken van de FSM bestaat uit een ingangsselectieblok en een codeblok (Afbeelding 2). Deze beide blokken worden bestuurd door waarden die in registers in de IMU worden geschreven.

Afbeelding 2: Elk van de zestien programmablokken van de FSM in de LSM6DSO IMU bestaat uit een ingangsselectieblok en een codeblok. (Bron afbeelding: STMicroelectronics)
Het ingangsselectieblok leidt de geselecteerde ingangsdata van een van de interne sensoren van de IMU of van een externe sensor die is aangesloten op de sensorhub van de IMO naar het codeblok. De sensorhub van de IMU biedt plaats aan maar liefst vier extra externe sensoren, zoals magnetometers, die op de IMU worden aangesloten via een I2C-poort.
Het codeblok van de FSM bevat één programma voor de toestandsautomaat. Het vaste gedeelte van de datasectie van het programmablok bestaat uit zes bytes die het aantal drempels, hysterese, mask en timerinstellingen voor het programma definiëren. De variabele datasectie van het programmablok bevat de werkelijke drempel, hysterese, mask en timerinstellingen voor ieder programma zoals gedefinieerd door de waarden die zijn opgeslagen in het vaste gedeelte van de datasectie.
Het vaste gedeelte van de datasectie definieert ook de afmetingen van het variabele gedeelte van de geheugen-footprint van het codeblok, een programmeerbare resetvector en een programmateller. Omdat dit allemaal 8-bits waarden zijn, is ieder FSM-programma beperkt tot 256 bytes.
Het instructiegedeelte van het programmablok bevat het werkelijke FSM-programma. De programma-instructies bevatten opcodes voor het controleren van sensoringangen tegen drempels, het controleren op nuldoorgangen en het controleren van timerwaarden op time-outvergelijkingen. De opcodes specificeren de toestand die nodig is om van de huidige FSM-status over te gaan naar de volgende. Verder zijn er commando-opcodes voor het selecteren van drempels en masks die zijn opgeslagen in de variabele-datasectie van het programma, voor het instellen van de multiplexschakelaar van de sensorhub van de IMU om een van de vier mogelijke externe sensoren te verbinden; en voor het veroorzaken van een interrupt.
Ieder FSM-programma kan een interrupt genereren en kan de inhoud van een bijbehorende registerwaarde wijzigen op basis van het geselecteerde ingangssignaal. Deze registerwaarden worden gebruikt om gegevens van de IMU door te geven aan de hostprocessor.
Het is handig om aan de FSM te denken als een microprocessor zonder de logische rekeneenheid. De FSM kan selecties maken, vergelijkingen uitvoeren en kan beslissingen maken over zijn volgende status op basis van die vergelijkingen. Hij berekent geen andere waarden dan de Booleaanse uitkomsten van die vergelijkingen.
De FSM is geen microprocessor. Hij kan vergelijkingen maken en eenvoudige veranderingen aanbrengen aan de programmastroom op basis van die vergelijkingen. Omdat het een eenvoudige machine is, wordt hij direct met de FSM-opcodes geprogrammeerd. Er is geen taalcompiler van hoog niveau voor de FSM, maar de programma's zijn gewoonlijk zo eenvoudig dat er geen compiler nodig is.
De FSM gebruiken
De LSM6DSO IMU’s FSM kan worden geprogrammeerd om interruptsignalen te genereren die worden geactiveerd door vooraf bepaalde bewegingspatronen. De FSM kan maar liefst 16 simultane, onafhankelijke programma's uitvoeren om beweging te detecteren. Ieder FSM-programma bestaat uit een reeks if-then-else stappen en gebruikt de sensorstromen van de versnellingsmeters en gyroscopen van de LSM6DSO als ingangen. Als een van de FSM-programma's een match met zijn voorgeprogrammeerde patroon detecteert, kan de FSM een interrupt genereren bij de hostprocessor.
Elk van de zestien mogelijke FSM-programma's bevat drie geheugensecties voor vaste data, variabele data en instructies. Het schema van een enkel FSM-programmablok is te zien op Afbeelding 3.

Afbeelding 3: De FSM in de LSM6DSO IMU van STMicroelectronics heeft zestien codeblokken, die elk drie geheugensecties bevatten voor vaste data, variabele data en instructies. (Bron afbeelding: STMicroelectronics)
De structuur van een enkel programma in een codeblok bestaat uit drie secties in een geheugenblok:
- Een vaste-datasectie, die dezelfde grootte heeft voor alle FSM-programma's
- Een variabele-datasectie, die van grootte kan verschillen
- Een instructiesectie, die voorwaarden en commando's bevat
Voor het programmeren van de FSM-codeblokken moeten de drie geheugensecties worden geladen met programmeerwaarden die het gedrag van de FSM bepalen. STMicroelectronics biedt een FSM-programmeertool binnen de downloadbare Unico evaluatie-ontwikkelingssoftware en ontwikkelingsomgeving. STMicroelectronics heeft ook diverse FSM-voorbeeldprogramma's bij de Unico-ontwikkelingstools geleverd als hulp bij het leren hoe de FSM moet worden geprogrammeerd. Deze voorbeeldprogramma's demonsteren verschillende op IMU gebaseerde interruptscenario's, zoals:
- Een eenvoudige stappenteller
- Systeem in vrije val
- Eenvoudige bewegingsdetectie
- Systeem is opgepakt
- Systeem is geschud
- Systeem is gestopt met bewegen (stationair)
- Kanteling van de pols
De voorbeelden uit het FSM-voorbeeldprogramma laten het gebruik van de diverse FSM-functies zien. Al deze voorbeeldprogramma's kunnen in een IMU-demoplatform worden geïnstalleerd, zoals de STEVAL-MKI109V3 eMotion STM32 evaluatiekaart, die een 28-pins aansluiting heeft die geschikt is voor de LSM6DSO STEVAL-MKI197V1 IMU-adapterkaart. Voor het programmeren van de STEVAL-MKI109V2-kaart met een van de voorbeeldprogramma's zijn slechts enkele klikken in de Unico-ontwikkelingsomgeving nodig.
De LSM6DSO heeft echter meer dan wat je op het eerste gezicht ziet.
De machine learning-kern
De LSM6DSO IMU heeft ook een meer geraffineerde en programmeerbare patroonherkenningsmotor die de machine learning-kern wordt genoemd. Deze kan bewegingsklassen identificeren met de meerdere sensordatastromen van de interne IMU-sensoren en eventuele aangesloten externe sensoren. Herkenbare gebeurtenisklassen zijn bijvoorbeeld stationair (geen beweging), wandelen, joggen, fietsen en autorijden. De classificatie neemt in de machine learning-kern de vorm aan van beslissingsbomen.
De machine learning-kern bestaat uit drie blokken: het sensordatablok, het berekeningsblok en de beslissingsboom (Afbeelding 4). Het sensorgegevensblok van de machine learning-kern voegt datastromen samen van de interne versnellingsmeters en gyroscopen van de IMU en van eventuele externe sensoren die aan de IMU zijn bevestigd via de I2C-interface. Het berekeningsblok kan de sensordata filteren met vooraf gedefinieerde filterparameters, en gescreende statistieken voor de sensordata berekenen zoals de gemiddelde, variantie-, piek-piekamplitude, minimale, maximale en nuldoorgang. De beslissingsboom vergelijkt de berekende sensordatastatistieken tegen drempels om de ingangsdata te classificeren.

Afbeelding 4: De machine learning-kern in de LSM6DSO IMU van STMicroelectronics bestaat uit drie blokken: een sensordatablok dat datastromen van interne en externe sensoren samenvoegt, een berekeningsblok dat de sensordata filtert en statistieken berekent met die sensordata, en een beslissingsboom die gebeurtenissen classificeert op basis van de berekende statistieken. (Bron afbeelding: STMicroelectronics)
Net als met de FSM van de LSM6DSO, wordt er een speciale tool in de Unico-ontwikkelingsomgeving gebruikt om de machine learning-kern van de IMU te programmeren.
De eindigetoestandsautomaat (FSM) en de machine learning-kern kunnen ook worden gebruikt met een hostprocessor om meer geraffineerde positiebepalende algoritmes te kunnen gebruiken. Het downloadbare X-CUBE-MEMS1-softwarepakket van STMicroelectronics voor het STM32Cube-ontwikkelingssysteem van het bedrijf bevat de volgende voorbeeldsoftwareroutines:
- Activiteitsherkenning – Geeft informatie over het type activiteit dat wordt uitgevoerd door de gebruiker, zoals stilstaan, wandelen, snel wandelen, joggen, fietsen of autorijden. Dit algoritme zou kunnen worden gebruikt in een mobiele telefoon of een draagbaar apparaat.
- Bewegingsduurdetectie – Als bewegingsduurdetectie wordt gecombineerd met pedometerdata, kan het worden gebruikt om het aantal seconden te bepalen dat een gebruiker actief is. Dit algoritme zou kunnen worden gebruikt in een draagbaar apparaat voor fitness- of gezondheidstracking.
- Detectie van trillingen of bewegingsintensiteit – Geeft informatie over de intensiteit van de beweging van de gebruiker en kan bewegingsintensiteit onderscheiden op een schaal van 0 (stilstaan) tot 10 (sprinten). Dit algoritme zou kunnen worden gebruikt in een mobiele telefoon of draagbare fitnessapparaten.
- Herkenning van de draagpositie – Geeft informatie over hoe de gebruiker een apparaat draagt en kan onderscheid maken tussen de volgende posities: op een bureau, in een hand, bij het hoofd, in een borstzakje, in een broekzak, in een jaszak en vastgehouden met een zwaaiende arm. Dit algoritme zou kunnen worden gebruikt in een mobiele telefoon of een ander soort draagbaar apparaat voor activiteitsgerelateerde contextdetectie.
Conclusie
De noodzaak om een hostprocessor draaiende te houden om een positie te behouden en om beweging en gebaren te detecteren uit IMU-data kan een moeilijk te bereiken doel zijn bij ingebedde ontwerpen die op batterijen werken vanwege het relatief hoge energieverbruik van de hostprocessor. Een nieuwe generatie IMU's met laag vermogen en voldoende on-boardverwerking om machine learning uit te voeren kan dit probleem oplossen door de hostprocessor te laten slapen in een lage-stroommodus totdat hij nodig is.
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.



