PCB Quadrotor (borstlösa) (14 / 20 steg)
Steg 14: IMU del 1: sensorer
Accelerometern:
Accelerometern faktiskt mäta inte acceleration. Den mäter kraft per massenhet längs varje axel. Denna mätning kan du bestämma riktningen för gravitation, som utövar en kraft nedåt, så länge quadrotor inte är accelererande.
Polulu minIMU-9 är mycket mindre krångel än den ursprungliga analoga sensorn eftersom det är själv œcleanâ och rapporterar ett digitalt värde med en känd skalningsfaktor. Skalningsfaktor är även en trevlig enkel antal: 1 mg/siffra med det mest känsliga området. Det vill säga 1/1000-dels acceleration beroende på tyngdkraften per siffra. Jag fick detta värde direkt från accelerometer datablad. Om du pekar sensorns X-axeln direkt nedåt, det bör rapportera ett värde på 1 000.
Konvertering från en mätning av acceleration en vinkel som kräver antingen en massa trigonometri eller en Linearisering. Eftersom quadrotor tillbringar större delen av sin tid horisontellt och avviker med högst 30º i någon riktning, valde jag Linearisering. Den första bilden visar hur man linearize om 0 °. Lutningen på linjen som är tangent till sensor utdata vs. vinkel kurvan vid 0 ° är 1000digit/rad. Inversen är vad som kallas A_GAIN i koden:
A_GAIN = 0,001 rad/siffra = 0.0573º / siffran.
Detta är det tal som du vill multiplicera värdet som raw accelerometer att få en ungefärlig vinkel i grader.
Gyro:
Gyroskopet inte är faktiskt ett gyroskop; Det finns ingen spinning svänghjul inuti chipet. Det mer korrekt kallas en kantig pulssensorn, och använder en MEMS stämgaffel struktur till åtgärd klassa av rotation baserad på Coriolis kraften. Som accelerometern finns det en för varje axel.
Eftersom detta är en fin digital IMU, värdet rapporterade direkt i fysiska enheter, även om skalningsfaktor är lite udda. Det ges i databladet för gyrot som 8.75mdps / siffra, eller 0.00875(º/s)/siffra. Jag använder detta värde direkt som G_GAIN i koden.
G_GAIN = 0.00875(º/s)/siffran.
Detta är numret genom att multiplicera värdet som raw gyro för att få en vinkelformig hastighet i grader per sekund.
Motivation för att slå samman sensorer att uppskatta vinkel:
Gyrot mäter direkt vinkelformig hastighet, så Betygsätt feedback är tas om hand av gyron ensam. I själva verket bör det vara möjligt att flyga quadrotor på Betygsätt feedback endast, men det skulle behöva en olika kontrollstrukturen och skulle inte själv-nivå. För att få bra attityd kontroll, krävs också vinkel feedback.
Den accelerometer uppskattningen av vinkel är tyvärr inte perfekt. Horisontell acceleration kommer att störa den vinkel uppskattningen, eftersom accelerometern inte kan skilja på skillnaden mellan accelerera framåt och lutar sig bakåt. Quadrotor spendera inte mycket tid påskynda horisontellt, men när den gör det enkelt kan dra stora fraktioner av 1g, som kommer att störa den vinkel uppskattningen väsentligen.
Gyrot kan också producera en vinkel uppskattning, av numerisk integration: om du vet hur fort du roterande, kan du förutsäga vad vinkel du ska vara på i nästa tidssteg genom att multiplicera andelen av samplingstiden. Denna uppskattning av vinkel kan arbeta under korta perioder av tid, men över länge en varaktighet som det kommer att glida bort från den sanna vinkeln. Oavsett hur bra och väl nollställt gyro är numerisk integration medför alltid vinkel uppskattningen produceras av gyro ensam att glida över tiden.
Så accelerometern är dåligt för kortsiktiga vinkel uppskattning, men ger en stabil långsiktiga genomsnittliga motsvarar gravitationen vektorn. Gyrot är bra för kortsiktiga vinkel uppskattningar, men kommer att glida över längre tid. Den kompletterande Filter, diskuteras i nästa steg, sammanslagningar sensorer tillsammans smidigt vid olika tidsskalor att få en bättre vinkel uppskattning än antingen sensorn ensam kunde producera.