Innehållsförteckning:

Ett sätt att använda en tröghetsmätningsenhet?: 6 steg
Ett sätt att använda en tröghetsmätningsenhet?: 6 steg

Video: Ett sätt att använda en tröghetsmätningsenhet?: 6 steg

Video: Ett sätt att använda en tröghetsmätningsenhet?: 6 steg
Video: How the World Cup is using AI for the offside rule 2024, November
Anonim
Ett sätt att använda en tröghetsmätningsenhet?
Ett sätt att använda en tröghetsmätningsenhet?

Sammanhanget:

Jag bygger för roligt en robot som jag vill flytta autonomt inuti ett hus.

Det är ett långt arbete och jag gör steg för steg.

Jag har redan publicerat 2 instruktioner om detta ämne:

  • en om att göra en hjulkodare
  • en om wifi -anslutning

Min robot drivs av till 2 likströmsmotorer med hjälp av min hemgjorda hjulkodare.

Jag håller just nu på att förbättra den rörliga kontrollen och har spenderat lite tid med gyroskop, accelerometer och IMU. Jag skulle gärna dela denna upplevelse.

Vill du veta mer om lokalisering? Här är en artikel om hur man kombinerar artificiell intelligens och ultraljud för att lokalisera roboten

Steg 1: Varför använda en tröghetsmätningsenhet?

Varför använda en tröghetsmätningsenhet?
Varför använda en tröghetsmätningsenhet?

Så varför använde jag en IMU?

Den första anledningen var att om hjulkodaren är tillräckligt noggrann för att styra raka rörelser, även efter att jag hade tunnit, kunde jag inte få en precision för rotation mindre än +- 5 degres och det är inte tillräckligt.

Så jag testade 2 olika sensorer. För det första använder jag en magnetometer (LSM303D). Principen var enkel: innan rotationen får norrriktningen, beräkna målet och justera rörelsen tills målet nås. Det var lite bättre än med pulsgivaren men med för spridning. Efter det försökte jag använda ett gyroskop (L3GD20). Principen var bara att integrera rotationshastigheten från sensorn för att beräkna rotationen. Och det fungerade bra. Jag kunde styra rotationen vid +- 1 grader.

Ändå var jag nyfiken på att prova lite IMU. Jag väljer en BNO055 -komponent. Jag ägnade lite tid åt att förstå och testa denna IMU. I slutet bestämde jag mig för att välja denna sensor av följande skäl

  • Jag kan styra rotation såväl som med L3GD20
  • Jag kan upptäcka liten rotation när jag rör mig rakt
  • Jag behöver få norr orientering för robotlokalisering och kompasskalibreringen av BNO055 är mycket enkel

Steg 2: Hur använder jag BNO055 för 2D -lokalisering?

Hur använder man BNO055 för 2D -lokalisering?
Hur använder man BNO055 för 2D -lokalisering?

BNO055 IMU är en Bosch 9 -axlig intelligent sensor som kan ge absolut orientering.

Databladet ger en komplett dokumentation. Det är en högteknologisk komponent, är det en ganska komplex produkt och jag tillbringade några timmar på att lära mig hur det fungerar och prova olika sätt att använda det.

Jag tror att det kan vara användbart att dela denna erfarenhet.

För det första använde jag Adafruit -biblioteket som ger ett bra verktyg för att kalibrera och upptäcka sensorn.

I slutet och efter många tester bestämde jag mig för det

  • använd Adafruit -biblioteket endast för att spara kalibrering
  • använd 3 av alla möjliga lägen för BNO055 (NDOF, IMU, Compss)
  • ägna en Arduino Nano för att beräkna lokalisering baserat på BNO055 -mätningar

Steg 3: Hardware Point of Vue

Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue
Hardware Point of Vue

BNO055 är en I2C -komponent. Så det behöver strömförsörjning, SDA och SCL för att kommunicera.

Var bara noga med Vdd -spänningen enligt den produkt du köpte. Bosch -chipet fungerar i intervallet: 2,4V till 3,6V och du kan hitta 3,3v och 5v komponent.

Det finns inga svårigheter att ansluta Nano och BNO055.

  • BNO055 drivs av Nano
  • SDA och SCL är anslutna med 2 x 2k uppdragningsmotstånd.
  • 3 lysdioder anslutna till Nano för diagnos (med motstånd)
  • 2 kontakter som används för att definiera läget efter start
  • 1 kontakt mot BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 kontakt mot Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Lite lödning och det är det!

Steg 4: Hur fungerar det?

Hur fungerar det ?
Hur fungerar det ?

Från kommunikationspunkten:

  • Nano är bussmästaren I2C
  • Roboten/Mega och BNO055 är I2C -slavar
  • Nano läser permanent BNO055 -registren
  • Roboten/Mega höjer en numerisk signal för att begära ordet från Nano

Från beräkningspunkten: Nano i kombination med BNO055 levererar

  • Kompassrubriken (används för lokalisering)
  • En relativ rubrik (används för att styra rotationer)
  • Den absoluta kursen och positionen (används för att styra rörelser)

Från funktionell synvinkel: Nano:

  • hanterar BNO055 -kalibreringen
  • hanterar BNO055 parametrar och kommandon

Delsystemet Nano & BNO055:

  • beräkna för varje robothjul den absoluta kursen och lokaliseringen (med en skalfaktor)
  • beräkna den relativa kursen under robotens rotation

Steg 5: Arkitektur och programvara

Arkitektur och programvara
Arkitektur och programvara

Huvudprogramvaran körs på en Arduino Nano

  • Arkitekturen bygger på I2C -kommunikation.
  • Jag valde att tillägna en Nano på grund av det faktum att Atmega som driver roboten var ganska redan laddad och denna arkitektur gör det lättast att återanvända någon annanstans.
  • Nano läser BNO055 -registren, beräknar och lagrar rubrik och lokalisering i sina egna register.
  • Arduino Atmega som kör robotkoden, skickar information om hjulkodare till Nano och läser rubriker och lokalisering inne i Nano -registren.

Det finns en delkod (Nano) här på GitHub

Adafruit -kalibreringsverktyget om det finns här på GitHub (kalibrering lagras på eeproom)

Steg 6: Vad lärde jag mig?

Angående I2C

Först försökte jag ha 2 masters (Arduino) och 1 slav (sensor) på samma buss men i slutet är det möjligt och enklast att bara ställa in Nano som master och använda GPIO -anslutning mellan de 2 Arduinos för att "begära token".

Angående BNO055 för 2D -orientering

Jag kan koncentrera mig på tre olika driftlägen: NDOF (kombinera gyroskop, accelerometer och kompasser) när roboten är inaktiv, IMU (kombinera gyroskop, accelerometer) när roboten rör sig och Kompass under lokaliseringsfasen. Att växla mellan dessa lägen är enkelt och snabbt.

För att minska kodstorleken och behålla möjligheten att använda BNO055 interrupt för att upptäcka kollisioner, föredrar jag att inte använda Adafruit -biblioteket och göra det på egen hand.

Rekommenderad: