Inhoudsopgave:

Een manier om een traagheidsmeeteenheid te gebruiken?: 6 stappen
Een manier om een traagheidsmeeteenheid te gebruiken?: 6 stappen

Video: Een manier om een traagheidsmeeteenheid te gebruiken?: 6 stappen

Video: Een manier om een traagheidsmeeteenheid te gebruiken?: 6 stappen
Video: How does an Accelerometer work? | 3D Animation 2024, November
Anonim
Een manier om een traagheidsmeeteenheid te gebruiken?
Een manier om een traagheidsmeeteenheid te gebruiken?

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?

Waarom een traagheidsmeeteenheid gebruiken?
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?

Hoe BNO055 gebruiken voor 2D-lokalisatie?
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

Hardwarepunt van Vue
Hardwarepunt van Vue
Hardwarepunt van Vue
Hardwarepunt van Vue
Hardwarepunt van Vue
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?

Hoe werkt het ?
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 architectuur en software
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: