Emlékszem, amikor először láttam Steadicam-es stabilizált felvételt, le voltam nyűgözve, hogy mennyire jól néz ki, mintha csak úgy suhannak a kamera a levegőben. Ez ugye a gyakorlatban egy mechanikus szűrőt jelent. Azóta persze minden bokorban gimbal terem, a kisméretű akciókamerák és telefonok miatt nagyon elterjedtek az aktív stabilizálást végző eszközök.
Miután én is beszereztem egy ilyen pici kamerát, felmerült bennem az igény, hogy tök jó lenne hozzá készíteni egy gimbalt.
InvenSense MPU-9250
Korábban a RobonAUT-on már használtuk az InvenSense MPU9250-es, 9 tengelyes érzékelőjét, így most is ezt terveztem használni.
Maga a chip tartalmaz egy MPU6xxx-es gyorsulásmérő és giroszkóp kombinációt, illetve ráragasztottak Asahi Kasei AK8963 iránytűt is. Utóbbival a belső I2C buszon lehet kommunikálni, tehát a mikrokontrollerem SPI írja az MPU9250 regisztereit, aminek hatására belül egy I2C tranzakció történik. Növeli az IC élvezeti faktorát, hogy a két szilícium koordinátarendszere nem egyezik meg.
A driver fejlesztése során egy problémával találkoztam, ami arra világított rá, hogy van egy bit, aminek a bekapcsolásával buffereli a belső I2C kiolvasásokat, és nem fogok csupa nulla értékeket látni, ha SPI-on pont akkor olvasok, amikor belül megy egy I2C tranzakció.
Az iránytű kalibrációja

Ideális esetben, ha a függőleges tengely mentén körbefordítjuk az iránytűt, a két kiolvasott értéknek origó középpontú kört kell kirajzolni. Ehhez képest bármelyik tengely mentén egy random pacát fogunk látni.
Két hatás érvényesül, amely gondot okoz. Az első a hard iron, amit a közelben lévő mágneses anyagok (pl: motor mágnese) okoznak. A mérés során miattuk mozdul el a körök középpontja. Ezt könnyű kompenzálni, csak minden tengelyen meg kell nézni a minimum és maximum értékeket, majd ezek átlagával kell kompenzálni az értékeket. Ezzel máris az origóba ugrott körök középpontja.
A másik hatás a soft iron, ezt leginkább az olyan anyagok okozzák, amelyek kissé eltérítik a föld mágneses mezejét (pl: vas tárgyak). Ennek hatására a kör nem kör, hanem egy kissé elfordult ellipszis lesz. A kompenzálásához egyrészt minden tengelyhez kell egy szorzótényező, másrészt egy szögre is szükség van, amelyet a főtengely végpontjából könnyű meghatározni.
Az egészből tehát összeáll egy-egy bias érték, egy-egy scale érték, illetve három 2×2-es forgatásmátrix a három sík mentén. Ha úgy tetszik, ez összevonható egy bias értékké és egy 3×3-as mátrixszá, vagy egy teljes, 4×4-es transformációmátrixszá.
Adatok felhasználása
Ennél a pontnál már rendelkezésre áll 9 tengelynyi pontos adat, viszont a gimbal szabályzásához a három tengelyen mért szögekre van szükség. Ehhez Sebastian Madgwick szűrőjét használtam, amely már korábban is bevált.
Motorvezérlés
Kezdetnek egy kéznél lévő CD meghajtóból kiszerelt motort használtam. Ez egy 18 pólusú brushless DC motor. A Hall-szenzoros visszacsatolással nem foglalkoztam, mivel az MPU-ból pontosan tudjuk a pozíciót. A motorok meghajtására az STL293B, kő egyszerűségű IC használtam. A tesztelés során, a 18 pólus miatt kicsit nehezebb volt abszolút pozícióra szabályozni, de sikerült megoldani, mint az az alábbi videón is látható.
A keret
Ahhoz, hogy az egészet használni tudjam a kamerával, néhány Fusion 360 tutorial után terveztem egy két részből álló keretet, amely alább látható:
Egyik kedves kollégám 3D nyomtatójának segítségével gyorsan sikerült is kinyomtatni, amit ezúton is köszönök neki.
További feladatok
- Nagyobb nyomatékú motor és motorvezérlő beszerzése
- További tengelyekhez szükséges mechanika megtervezése
- Vezérlés elkészítése