Guide to gyro en versnellingsmeter met Arduino met inbegrip van Kalman-filtering


deze gids werd voor het eerst geplaatst op het forum van de Arduino, en kan hier worden gevonden: http://arduino.cc/forum/index.php/topic, 58048.0.html

Ik reposted gewoon, dus zelfs meer gebruik van het krijg. De code kan hier worden gevonden:
https://github.com/TKJElectronics/example-sketch-for-IMU-including-Kalman-filter

Hallo iedereen
Onlangs kocht ik dit analoge 6DOF (zes graden van vrijheid) IMU board (http://www.sparkfun.com/products/10010) van watterott.com. Het maakt gebruik van drie gyros en drie versnellingsmeters voor het berekenen van hoeken in drie dimensies.

Ik keek een tijdje voor wat code online en hoe te verbinden met hen. Na vele uren van onderzoek volgde ik de nauwkeurige meting af van hoeken in twee richtingen te maken. Ik besloot te schrijven een korte handleiding voor collega elektronische liefhebbers.
Het belangrijkste doel van deze gids is aan anderen te leren hoe je sommige nuttige gegevens uit hun IMU of gewoon een gyro of versnellingsmeter. De code voor de Arduino kan worden gevonden op github: https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter. Het moet vrij eenvoudig te implementeren van mijn code aan uw eigen sensor. Ik zal niet alle details over de theorie achter beschrijven, in plaats daarvan kunt u kijken naar de bronnen voor meer info.

Voordat u begint moet u verbinden de IMU als volgt:

Acc_Gyro Arduino
3,3 v <> — 3, 3V
<> — GND GND
Gx4 X <> — AN0
Gx4 Y <> — AN1
Gx4 Z <> — AN2
ACC X <> — AN3
ACC Y <> — AN4
ACC Z <> — AN5

Ook verbinden met 3,3 v de AREF pin op de Arduino voor meer nauwkeurigheid.
Het is zeer belangrijk dat u niet de sensor aan 5V sluit-dit de sensor vernietigen zal.

Nu u bent klaar voor het lezen van bepaalde gegevens van de sensor.

Om te communiceren met de sensor is eenvoudig:
De gyro meet graden per seconde, terwijl de versnellingsmeter versnelling (g's) in drie dimensies maatregelen. Beide uitgangen de metingen als een analoog signaal.
Om deze te krijgen vertaald in graden, die u hoeft te doen sommige codering:

De gyro
Eerst moet u quids (een getal tussen 0-1023) worden omgezet in iets nuttigs (dit is voor een ADC met een 10 bit resolutie, dit moet bijvoorbeeld 4095 (2 ^ 12-1 = 4095) voor 12 bit ADC). Om dit te doen gebruik ik gewoon deze eenvoudige vergelijking:
gyroRate = (gyroAdc-gyroZero) / gevoeligheid - waar gyroAdc de readed waarde van onze sensor, gyroZero is de waarde wanneer het stationaire (dit wordt gedaan in de code - kijk in de sectie "Installatie") terwijl gevoeligheid is de gevoeligheid gevonden in het gegevensblad, maar vertaald in quids.

Als je in de gegevensbladen van de twee gyros (http://www.sparkfun.com/datasheets/Sensors/IMU/lpr530al.pdf en http://www.sparkfun.com/datasheets/Sensors/IMU/LY530ALH.pdf kijkt) zult u zien dat de gevoeligheid 3.33mV/deg/s voor de 4xOUT is. Het is vrij gemakkelijk te vertalen in quids: gevoeligheid / 3.3 * 1023.
Dus in dit voorbeeld krijg ik:
0.00333/3.3*1023=1.0323.

NB: voor het vertalen van mV tot en met V eenvoudige gewoon delen door duizend.

De laatste vergelijking zal er zo uitzien:
gyroRate = (gyroAdc-gryoZero) / 1.0323

Het resultaat zal komen als graden per seconde. Om dit te vertalen in graden moet u weten de exacte tijd sinds de laatste lus. Gelukkig, de Arduino kreeg een eenvoudige opdracht om dit te doen: millis(). Met behulp van dat, kan men berekenen van het tijdsverschil (delta time) en daardoor het berekenen van de hoek van de gyro. De laatste vergelijking zal er zo uitzien:
gyroAngle += gyroRate * rekenwijze/1000

Helaas, drijft de gyro na verloop van tijd. Dat betekent dat het kan niet worden vertrouwd voor een langere tijdspanne, maar het is zeer nauwkeurig voor een korte tijd. Dit is wanneer de versnellingsmeter handig komt. Het hoeft niet elke drift, maar het is te instabiel voor kortere tijdspanne. Zal ik beschrijven hoe te combineren deze metingen in een tijdje, maar eerst zal ik beschrijven hoe te vertalen van de lezingen van de versnellingsmeter in iets nuttigs.

De versnellingsmeter
De versnellingsmeter meet de versnelling (g's) in drie dimensies. Om te vertalen van de analoge lezingen in graden, die u enkel hoeft te lezen van de as en de nul offset aftrekken als volgt:
accVal = accAdc-accZero

Waar accAdc is de analoge lezing en accZero is de waarde als er 0g staat-dit wordt berekend in het begin van de code, kijk in de sectie "Installatie". De waarde nul kan ook worden gevonden in het gegevensblad: http://www.sparkfun.com/datasheets/Components/SMD/adxl335.pdf. U zult zien dat de nulspanning op 0g is ongeveer 1, 5V, om te vertalen dit naar quids, je moet opnieuw gebruik maken van deze vergelijking: zeroVoltage / 3.3 * 1023.
Dus in dit voorbeeld krijg ik:
1.5/3.3*1023=465.

U kunt vervolgens berekent de toonhoogte en rollen met behulp van de volgende vergelijkingen:
toonhoogte = atan2 (accYval, accZval) + PI
Roll = atan2 (accXval, accZval) + PI

ATAN2 heeft een output bereik van - pi tot π (Zie http://en.wikipedia.org/wiki/Atan2), ik voeg π, zodat het bereik deze geconverteerd naar 0 en 2π.
Om deze te converteren van radialen naar graden we gewoon vermenigvuldig het resultaat met 57.295779513082320876798154814105 - dit vooraf is gedefinieerd in de Arduino IDE als RAD_TO_DEG.

Kalman-filter
Zoals ik al eerder heb uitgelegd de gyro is zeer nauwkeurig, maar de neiging om te drijven. De versnellingsmeter is een beetje instabiel, maar doet niet drijven. U kunt de precieze hoek berekenen met behulp van iets genaamd een Kalman-filter. Een gedetailleerde gids over hoe het wordt uitgevoerd kan gevonden worden op mijn blog: http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/.

Als u wilt om iets een beetje meer eenvoudig te gebruiken, kunt u wat heet een aanvullende Filter. Het is vrij gemakkelijk te begrijpen en de wiskunde is veel eenvoudiger, omdat het werkt slechts in één stap.
De vergelijking kan er bijvoorbeeld als volgt uitzien:
hoek = 0.98 *(angle+gyro*dt) + 0,02 * acc - u kunt fine-tunen de nummers aan wat je wilt. Vergeet niet dat de som 1 moet zijn.
Voor mij was het resultaat uit de complementaire Filter zeer close (of bijna dezelfde) als degene berekend door de Kalman-filter.

Je hebt nu geleerd (hopelijk) het analoge gegevens ophalen uit IMU en vertalen naar iets nuttigs. Ik heb mijn eigen code bijgevoegd voor mijn 6DOF IMU (http://www.sparkfun.com/products/10010), maar met enkele wijziging iets, ik ben vrij zeker dat het mogelijk is te gebruiken met elke analoge gyro/versnellingsmeter.

Als je nog vragen hebt, viel vrij om een reactie hieronder.

Bronnen:

http://www.Arduino.CC/cgi-bin/yabb2/YaBB.pl?num=1284738418
http://www.x-Firm.com/?page_id=148
http://Web.mit.edu/First/Segway/

Update
Ik heb net een Processing-code die gegevens uit de Arduino op een mooie grafiek wordt afgedrukt. Zoals u in de video hieronder zien kunt is het filteren effectief stoppen. De licht blauwe lijn is de versnellingsmeter, de paarse lijn is de gyro, de zwarte lijn is de hoek berekend door het complementaire Filter en de rode lijn is de hoek berekend door de Kalman-filter. Zoals u de Kalman-filter is gewoon een beetje meer nauwkeurige zien kan (ik weet dat het moeilijk is te zien in de video) dan de aanvullende Filter, vooral wanneer ik schud het.
Ik heb mijn code, zowel de geactualiseerde code voor de Arduino en de verwerking code bijgevoegd. Het is ook mogelijk om de gegevens van de y-as te bekijken. Gewoon uncomment drawAxisY(); in de code.

Nieuwste firmware
Ik besloot om alle broncode op github, want het is veel makkelijker te onderhouden.
De nieuwste code kan nu worden gevonden op github: https://github.com/TKJElectronics/Example-Sketch-for-IMU-including-Kalman-filter

Mijn Balancing robot
Hieronder is een video van mijn balancing robot. Het gebruikt dezelfde IMU en algoritme zoals beschreven in de post hierboven.

Kickstarter
Ik heb zojuist mijn balancing robot op Kickstarter: http://www.kickstarter.com/projects/tkjelectronics/balanduino-balancing-robot-kit
Kunt u overwegen het project steunen.

Gerelateerde Artikelen

Low-cost, zelfgemaakte houten katrol rek/airer/droger drogen.  Met inbegrip van hoe te maken van de houten katrollen. Bricolez, etendoir een linge suspendu

Low-cost, zelfgemaakte houten katrol rek/airer/droger drogen. Met inbegrip van hoe te maken van de houten katrollen. Bricolez, etendoir een linge suspendu

alle gerecycleerde materialen, met inbegrip van hoe te maken van de houten katrollen. Goedkoop en vrolijke engineering in het praktische gebruik van gerecycleerde onbehandelde pallet en fruit krat hout te maken een katrol creel/airer/droger. Gedetail
Het uitvoeren van TASM en compileren x86 vergadering programma in Windows 7 64 bits versie (met inbegrip van de verwijderd opdrachten in Windows 7 64 bit: bewerken en Debug)

Het uitvoeren van TASM en compileren x86 vergadering programma in Windows 7 64 bits versie (met inbegrip van de verwijderd opdrachten in Windows 7 64 bit: bewerken en Debug)

How to Run TASM en compileren x86 vergadering programma's in Windows 7 64 bits versie (met inbegrip van de verwijderde opdrachten in Windows 7 64 bit: Debug en bewerken)Stap 1: 1. Ga naar Start, en Mijn Computer. Klik op (C:) Lokale schijf C (of een
15 minuten ontbijt (met inbegrip van cleanup)

15 minuten ontbijt (met inbegrip van cleanup)

waarschuwing: veel calorieënAls je eieren, spek en toast. En willen een snelle warme maaltijd in de ochtend. Dit kan worden.Tijd: 15 minuten, met inbegrip van opruimen.Stap 1: Prep Zet de pan op het vuur, de maximum temperatuur. Gebruik boter, olie o
Hoe krijg ik Siri werkt op bijna elke Apple iDevice met inbegrip van de nieuwe iPad(3rd gen)

Hoe krijg ik Siri werkt op bijna elke Apple iDevice met inbegrip van de nieuwe iPad(3rd gen)

MAJOR IMPORTANT UPDATE!: Paradox Productions in beslag zijn genomen door de FBI, of CIA, ik vergat. Kortom, dit Instructable kan niet werken, tenzij u 1) iOS 5.0.1 en 2) uw eigen Siri-poort hebt. Er zijn ook andere poorten compatibel.Ik heb wassen he
Hoe Re-lopende een dun schoenentas te voeren uw zware RC Starter REISKENNEL (met inbegrip van de zware 12 volt batterij erin!)

Hoe Re-lopende een dun schoenentas te voeren uw zware RC Starter REISKENNEL (met inbegrip van de zware 12 volt batterij erin!)

Oke im terug met meer RC type-wijzigingen!Nou, dat is hier niet helemaal waar... Want het simpele feit is dat als je ooit een zak om te voeren zwaar gewogen items dan deze opdrachtgevers in de juiste handigheid komen zal - versterken ook de sterke si
Beginner's guide to ESP8266 en tweeting met behulp van ESP8266

Beginner's guide to ESP8266 en tweeting met behulp van ESP8266

Ik heb geleerd over Arduino 2 jaar geleden. Dus begon ik te spelen rond met eenvoudige dingen zoals LED's, knoppen, motoren enz. Toen ik dacht zou het niet gaaf aansluiten om dingen zoals het weergeven van de dag weer doen, voorraad prijzen, trein ti
Bijna alles onder controle met een 3D-camera (met inbegrip van uw Arduino)

Bijna alles onder controle met een 3D-camera (met inbegrip van uw Arduino)

als u uw toepassing bepalen door toetsenbord, muis of joystick dan het is gemakkelijk om het te controleren met handgebaren met behulp van een 3D-camera. Dit leerprogramma zal u tonen hoe het kan worden gedaan met behulp van Device Emulator, een nett
* Inleiding * SPI op de Pi: communiceren met een SPI 3-assige versnellingsmeter met behulp van een Raspberry Pi

* Inleiding * SPI op de Pi: communiceren met een SPI 3-assige versnellingsmeter met behulp van een Raspberry Pi

stap voor stap handleiding over het opzetten van Raspbian, en communiceren met een SPI-apparaat met behulp van bcm2835 SPI bibliotheek (niet beetje geneukt!)Dit is nog steeds zeer voorlopige... Ik moet toevoegen van betere foto's van fysieke hookup,
Robot-Platform met inbegrip van h-bruggen van $10 R/C auto

Robot-Platform met inbegrip van h-bruggen van $10 R/C auto

elke keer als ik ga naar een winkel ik houd een oogje op goedkope spul dat is gehackt.   Ik heb het zien in CVS apotheek en een paar andere plaatsen de "Tumbler Thunder" of de gelijknamige R/C auto.  CVS heeft gehad in het verleden goede hackabl
Verbazingwekkend binaire kalender en met inbegrip van maanfase in een LED Matrix klok

Verbazingwekkend binaire kalender en met inbegrip van maanfase in een LED Matrix klok

Hallo, alle!!Dit is mijn project met meer functies dan mijn Binary Clock die je ook op mijn andere Instructables zien kunt.Belangrijkste concept is een heleboel functies, waaronder een volledige maandkalender met dag, maand, jaar, nummer van de week
Hoe maak je een Green Lantern ring-met inbegrip van een gloeiende versie!

Hoe maak je een Green Lantern ring-met inbegrip van een gloeiende versie!

Hier is hoe te maken van je eigen hars gegoten Green Lantern ring. Dit een complete revisie van mijn oorspronkelijke instructable over hoe te maken van een ring, Green Lantern, die eerder alleen liet zien hoe een cast sterling silver ring wordt gemaa
Een perfecte presentatie doos maken voor een perfecte Gift (met inbegrip van de dingen die Martha Stewart vergeet te vertellen!)

Een perfecte presentatie doos maken voor een perfecte Gift (met inbegrip van de dingen die Martha Stewart vergeet te vertellen!)

Hebt u ooit iets zo cool gemaakt voor iemand die je wist dat je kon niet gewoon stok in een gewatteerde envelop en uit het schip naar hen?ik gewandeld van Breckenridge naar Aspen met mijn dan 14 maanden oude op mijn rug in eind augustus van 2015. Ik
Zelfgemaakte r/c jet boot, met inbegrip van jet station

Zelfgemaakte r/c jet boot, met inbegrip van jet station

dit is een groot project voor iedereen met een beetje tijd te besteden. r/c jetboats zijn vrij zeldzaam en altijd hoofden draaien wanneer je voor een spin, dit één maar meer nog vanwege de zelfgemaakte jetdrive gaat. in dit uitleggen instructables zi
Hoe giet een biertje (met inbegrip van methoden uit een fles en uit een kraan)

Hoe giet een biertje (met inbegrip van methoden uit een fles en uit een kraan)

dus hoe één giet een biertje goedStap 1: Bereid uw lichaam en geest veel mensen zich afvragen hoe om giet een biertje van ergens naar een andere plaatsveel mensen die zich dit afvraagt zijn waarschijnlijk nu benieuwd hoe ik doenAls je niet dat ik zal