Innehållsförteckning:
- Steg 1: Varför använda en tröghetsmätningsenhet?
- Steg 2: Hur använder jag BNO055 för 2D -lokalisering?
- Steg 3: Hardware Point of Vue
- Steg 4: Hur fungerar det?
- Steg 5: Arkitektur och programvara
- Steg 6: Vad lärde jag mig?
Video: Ett sätt att använda en tröghetsmätningsenhet?: 6 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:37
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?
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?
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
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?
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
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:
Enkelt sätt att använda Makey Makey med en teknisk däck: 5 steg
Enkelt sätt att använda Makey Makey med en teknisk däck: Hej. Jag såg nyligen ett tech -makey -makey -program i denna tävling som var riktigt coolt men verkade svårt så jag gjorde ett enkelt sätt att spela spel med ett tech -deck. Om du gillar min instruerbara, vänligen rösta på den i makey makey -tävlingen
SlouchyBoard - ett irriterande sätt att hålla dig från att slinka (Intro till EasyEDA): 4 steg (med bilder)
SlouchyBoard - ett irriterande sätt att hålla dig från att slinka (Intro till EasyEDA): Slouchy board är en liten 30 mm x 30 mm PCB (Printed Circuit Board) som använder en lutningsgivare, en piezo -summer och en ATTiny 85 för att göra ett irriterande ljud när användaren är slarvig. Brädan kan fästas på en användares skjorta eller hatt så att när de lägger
DIY MusiLED, musiksynkroniserade lysdioder med ett klick Windows och Linux-applikation (32-bitars och 64-bitars). Lätt att återskapa, lätt att använda, lätt att porta .: 3 steg
DIY MusiLED, musiksynkroniserade lysdioder med ett klick Windows och Linux-applikation (32-bitars och 64-bitars). Lätt att återskapa, lätt att använda, lätt att porta .: Detta projekt hjälper dig att ansluta 18 lysdioder (6 röda + 6 blå + 6 gula) till ditt Arduino-kort och analysera datorns ljudkortets realtidsignaler och vidarebefordra dem till lysdioderna för att tända dem enligt slageffekterna (Snare, High Hat, Kick)
Ett riktigt enkelt/enkelt/inte komplicerat sätt att få människor/människor/djur/robotar att se ut som om de har riktigt cool/ljus värmevision (valfri färg) med GIMP: 4 steg
Ett riktigt enkelt/enkelt/inte komplicerat sätt att få människor/människor/djur/robotar att se ut som om de har riktigt cool/ljus värmevision (valfri färg) med GIMP: Läs … titeln
LÄKSTA SÄTT ATT GÖRA ETT KOMPAKT LJUS !! 3 ENKELA STEG !!: 3 steg
LÄKSTA SÄTT ATT GÖRA ETT KOMPAKT LJUS !! 3 ENKELA STEG !!: Vad du behöver - Tennfolie 1 AA -batteri (vissa AAA -batterier fungerar) 1 Mini -glödlampa (glödlampor används för de flesta ficklampor; se bild) Linjal (om det behövs)