Inhoudsopgave:
- Stap 1: Waarom een traagheidsmeeteenheid gebruiken?
- Stap 2: Hoe BNO055 gebruiken voor 2D-lokalisatie?
- Stap 3: Hardwarepunt van Vue
- Stap 4: Hoe werkt het?
- Stap 5: De architectuur en software
- Stap 6: Wat heb ik geleerd?
Video: Een manier om een traagheidsmeeteenheid te gebruiken?: 6 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:14
De context:
Ik bouw voor de lol een robot die ik autonoom in een huis wil laten bewegen.
Het is een werk van lange adem en ik doe het stap voor stap.
Ik heb al 2 instructables over dat onderwerp gepubliceerd:
- een over het maken van een wiel-encoder
- een over wifi-verbinding
Mijn robot wordt aangedreven door 2 gelijkstroommotoren met behulp van mijn zelfgemaakte wiel-encoder.
Ik ben momenteel bezig met het verbeteren van de bewegingscontrole en heb wat tijd doorgebracht met gyroscoop, accelerometer en IMU. Deze ervaring deel ik graag.
Meer weten over lokalisatie? Hier is een artikel over hoe je kunstmatige intelligentie en echografie kunt combineren om de robot te lokaliseren
Stap 1: Waarom een traagheidsmeeteenheid gebruiken?
Dus waarom heb ik een IMU gebruikt?
De eerste reden was dat als de wielencoder nauwkeurig genoeg is om een rechte beweging te regelen, ik zelfs na het afstellen geen precisie kon krijgen voor een rotatie van minder dan +- 5 graden en dat is niet genoeg.
Dus ik heb 2 verschillende sensoren geprobeerd. Als eerste gebruik ik een magnetometer (LSM303D). Het principe was eenvoudig: verkrijg vóór de rotatie de noordoriëntatie, bereken het doel en pas de beweging aan totdat het doel is bereikt. Het was een beetje beter dan met de encoder, maar met te spreiding. Daarna heb ik geprobeerd een gyroscoop (L3GD20) te gebruiken. Het principe was gewoon om de rotatiesnelheid van de sensor te integreren om de rotatie te berekenen. En het werkte prima. Ik was in staat om de rotatie op +- 1 graad te regelen.
Toch was ik nieuwsgierig om wat IMU te proberen. Ik kies een BNO055 component. Ik heb wat tijd besteed om deze IMU te begrijpen en te testen. Uiteindelijk heb ik om de volgende redenen voor deze sensor gekozen:
- Ik kan de rotatie zowel regelen als met de L3GD20
- Ik kan een lichte rotatie detecteren wanneer ik me rechtuit beweeg
- Ik moet de noordoriëntatie krijgen voor de robotlokalisatie en de kompaskalibratie van de BNO055 is heel eenvoudig
Stap 2: Hoe BNO055 gebruiken voor 2D-lokalisatie?
BNO055 IMU is een Bosch 9-assige intelligente sensor die absolute oriëntatie kan bieden.
De datasheet biedt een volledige documentatie. Het is een high-tech component, het is een nogal complex product en ik heb enkele uren besteed om te leren hoe het werkt en om verschillende manieren uit te proberen om het te gebruiken.
Ik denk dat het nuttig kan zijn om deze ervaring te delen.
Ten eerste gebruikte ik de Adafruit-bibliotheek die een goed hulpmiddel biedt om de sensor te kalibreren en te ontdekken.
Aan het einde en na veel testen heb ik besloten om:
- gebruik de Adafruit-bibliotheek alleen om kalibratie op te slaan
- gebruik 3 van alle mogelijke modi van BNO055 (NDOF, IMU, Compss)
- wijs een Arduino Nano toe om lokalisatie te berekenen op basis van BNO055-metingen
Stap 3: Hardwarepunt van Vue
BNO055 is een I2C-component. Het heeft dus voeding, SDA en SCL nodig om te communiceren.
Let gewoon op de Vdd-spanning volgens het product dat u hebt gekocht. De Bosch-chip werkt in het bereik: 2,4V tot 3,6V en je kunt een component van 3,3v en 5v vinden.
Er zijn geen problemen voor het aansluiten van de Nano en de BNO055.
- De BNO055 wordt aangedreven door de Nano
- SDA & SCL zijn verbonden met 2 x 2k pull-up weerstanden.
- 3 LED's aangesloten op de Nano voor diagnose (met weerstanden)
- 2 connectoren die worden gebruikt om de modus na het opstarten te definiëren
- 1 connector naar de BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 connector naar de Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)
Een beetje solderen en dat is alles!
Stap 4: Hoe werkt het?
Vanaf het communicatiepunt van vue:
- De Nano is de I2C-busmaster
- De Robot/Mega en de BNO055 zijn I2C-slaven
- De Nano leest permanent de BNO055-registers
- De robot/mega roept een numeriek signaal op om het woord van de Nano op te vragen
Vanaf rekenpunt van vue: de Nano in combinatie met de BNO055 levert:
- De kompasrichting (gebruikt voor lokalisatie)
- Een relatieve koers (gebruikt om rotaties te regelen)
- De absolute koers en positie (gebruikt om bewegingen te besturen)
Vanuit functioneel oogpunt: De Nano:
- beheert de BNO055-kalibratie
- beheert de BNO055 parameters en commando's
Het subsysteem Nano & BNO055:
- bereken voor elke robot de absolute koers en lokalisatie (met een schaalfactor)
- bereken de relatieve koers tijdens het draaien van de robot
Stap 5: De architectuur en software
De belangrijkste software draait op een Arduino Nano
- Architectuur is gebaseerd op I2C-communicatie.
- Ik heb ervoor gekozen om een Nano te gebruiken vanwege het feit dat de Atmega die de robot bestuurt nogal al geladen was en deze architectuur het gemakkelijk maakt om elders te hergebruiken.
- De Nano leest de BNO055-registers, berekent en slaat koers en lokalisatie op in zijn eigen registers.
- De Arduino Atmega die de robotcode uitvoert, stuurt informatie over de encoders van de wielen naar de Nano en leest de koppen en lokalisatie in de Nano-registers.
De subsysteemcode (Nano) is hier beschikbaar op GitHub
De Adafruit-kalibratietool indien hier op GitHub (kalibratie wordt opgeslagen op eeproom)
Stap 6: Wat heb ik geleerd?
Over I2C
Ten eerste heb ik geprobeerd om 2 masters (Arduino) en 1 slave (sensor) op dezelfde bus te hebben, maar aan het einde is het mogelijk en het gemakkelijkst om alleen de Nano als master in te stellen en de GPIO-verbinding tussen de 2 Arduino's te gebruiken om "het token aan te vragen".
Betreffende BNO055 voor 2D-oriëntatie
Ik kan me concentreren op 3 verschillende loopmodi: NDOF (gyroscoop, accelerometer en kompas combineren) wanneer de robot inactief is, IMU (gyroscoop combineren, accelerometer) wanneer de robot beweegt en kompas tijdens de lokalisatiefase. Schakelen tussen deze modi is eenvoudig en snel.
Om de codegrootte te verkleinen en de mogelijkheid te behouden om BNO055-interrupt te gebruiken om botsingen te detecteren, gebruik ik de Adafruit-bibliotheek liever niet en doe ik het alleen.
Aanbevolen:
Hoe de GPIO-pinnen en Avrdude van een Raspberry Pi te gebruiken om DIMP 2 of DA PIMP te Bit-bang-programma te gebruiken 2: 9 stappen
Hoe de GPIO-pinnen van een Raspberry Pi en Avrdude te gebruiken voor Bit-bang-programma DIMP 2 of DA PIMP 2: Dit zijn stapsgewijze instructies voor het gebruik van een Raspberry Pi en het gratis open-source commando avrdude to bit-bang -programmeer een DIMP 2 of DA PIMP 2. Ik neem aan dat je bekend bent met je Raspberry Pi en de LINUX-opdrachtregel. Je hoeft niet
Een Arduino programmeren Een andere Arduino gebruiken om een scrollende tekst weer te geven zonder een bibliotheek - Ajarnpa
Een Arduino programmeren Een andere Arduino gebruiken om een scrollende tekst weer te geven zonder een bibliotheek: Sony Spresense of Arduino Uno zijn niet zo duur en vereisen niet veel stroom. Als uw project echter beperkingen heeft op het gebied van stroom, ruimte of zelfs budget, kunt u overwegen om Arduino Pro Mini te gebruiken. In tegenstelling tot Arduino Pro Micro, is Arduino Pro Mi
Gemakkelijke manier om Makey Makey te gebruiken met een Tech Deck - Ajarnpa
Gemakkelijke manier om Makey Makey te gebruiken met een Tech Deck: Hallo. Ik zag onlangs een tech-deck makey makey-programma in deze wedstrijd dat echt cool was, maar moeilijk leek, dus maakte ik een gemakkelijke manier om games te spelen met een tech-deck. Als je mijn instructable leuk vindt, stem er dan op in de makey makey-wedstrijd
Game-saves kopiëren naar een MU van Microsoft of een derde partij op een eenvoudige manier: 9 stappen
Game Saves kopiëren naar een Microsoft of 3rd Party MU op de GEMAKKELIJKE MANIER .: Originele tutorial HIER Er zijn tal van Softmod-tutorials die er zijn en ze zijn allemaal goed, maar het is lastig om de opslagbestanden op de Xbox HDD te krijgen, ik heb een leven gemaakt cd die het eenvoudig maakt om dat te doen. Dit is geen complete softmod-tutorial, dit
Maak op een gemakkelijke manier een opdrachtpromptvenster: 3 stappen
Maak op de gemakkelijke manier een opdrachtpromptvenster: ik weet dat dit al eerder is gedaan, maar mijn versie is een klein beetje anders. opdrachtprompt openen. (Dit zou het geval zijn in de meeste scholen, of