Tässä projektissa servon liikerata analysoidaan koneoppimismallilla. Inferenssiä ei suoriteta pilvessä, vaan suoraan mikrokontrollerissa.
Mallin tehtävä on tunnistaa, onko mitattu liikerata normaali vai sisältääkö se poikkeavuuden. Poikkeavuuden tunnistus toteutetaan anomaly detection -mallilla (K-means).
Inferenssi ajetaan Raspberry Pi Pico W -alustalla. Pico W perustuu RP2040-mikrokontrolleriin, jossa on kaksi ARM Cortex-M0+ -ydintä. Tämä mahdollistaa TinyML-tyyppisten mallien ajon paikallisesti, kun malli ja datan esikäsittely on suunniteltu kevyiksi.
Kotisivu: raspberrypi.com/products/raspberry-pi-pico
K-means on klusterointialgoritmi, joka ryhmittelee havaintoja niiden samankaltaisuuden perusteella. Anomaly detection -käytössä ideana on, että normaalit mittausjaksot asettuvat lähelle opittuja klustereiden keskipisteitä, kun taas poikkeavat jaksot jäävät kauemmas. Kun etäisyys lähimpään klusterikeskukseen ylittää määritetyn kynnyksen, liikerata tulkitaan poikkeavaksi.
Malli on siirretty laitteelle C++-kirjastona. Käytännössä tämä tarkoittaa, että inferenssilogiikka (sekä mahdollinen esikäsittely) on käännetty osaksi laiteohjelmistoa ja sitä kutsutaan mittaussyklin jälkeen.
| Mittari | Arvio | Huomio |
|---|---|---|
| Latenssi / inference (ms) | Riippuu toteutuksesta | K-means-tyyppinen laskenta on usein kevyt, jos featuret ja klustereiden määrä ovat pieniä. |
| RAM usage (arena, bufferit) | Riippuu toteutuksesta | SRAM kuluu tyypillisesti mittauspuskureihin, featurelaskentaan ja mallin työmuistiin. |
| Flash (mallin koko) | Riippuu toteutuksesta | C++-kirjastomuotoinen malli kasvattaa firmwarea. Koko riippuu parametreista ja ominaisuuksista. |
| CPU load / duty cycle | Riippuu toteutuksesta | Koska inferenssi tehdään mittaussyklin jälkeen, kuorma muodostuu piikeistä eikä välttämättä jatkuvasta ajosta. |
Servoa ohjataan liikeradalla 0 - 180 - 0 astetta. Yksi liikerata muodostaa mittaussyklin.
Mittaussyklin aikana servon liikerata mitataan kiihtyvyysanturilla (x, y ja z). Mittaussyklin jälkeen suoritetaan inferenssi.
Jos liikerata on normaali, vihreä LED palaa.
Jos liikeradasta löytyy poikkeavuus, punainen LED palaa.
Videossa aluksi servon liikerata on normaali, eli vihreä LED palaa. Tämän jälkeen liikerata ei ole normaali, jolloin punainen LED palaa. Lopuksi servon liikerata on taas normaali, jolloin vihreä LED palaa.