Indholdsfortegnelse:
- Trin 1: Hvorfor bruge en inertial måleenhed?
- Trin 2: Sådan bruges BNO055 til 2D -lokalisering?
- Trin 3: Hardware Point of Vue
- Trin 4: Hvordan fungerer det?
- Trin 5: Arkitekturen og softwaren
- Trin 6: Hvad lærte jeg?
Video: En måde at bruge en inertial måleenhed?: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:25
Konteksten:
Jeg bygger for sjov en robot, som jeg vil flytte autonomt inde i et hus.
Det er et langt arbejde, og jeg gør det trin for trin.
Jeg har allerede offentliggjort 2 instruktioner om dette emne:
- et om at lave en hjulkoder
- en om wifi -forbindelse
Min robot drives af 2 DC -motorer ved hjælp af min hjemmelavede hjulkoder.
Jeg forbedrer i øjeblikket den bevægelige kontrol og har brugt noget tid med gyroskop, accelerometer og IMU. Jeg vil med glæde dele denne oplevelse.
Vil du vide mere om lokalisering? Her er en artikel om, hvordan man kombinerer kunstig intelligens og ultralyd for at lokalisere robotten
Trin 1: Hvorfor bruge en inertial måleenhed?
Så hvorfor brugte jeg en IMU?
Den første årsag var, at hvis hjulkoderen er præcis nok til at styre lige bevægelser, selv efter at have tømt, var jeg ikke i stand til at få en præcision for rotation mindre end +- 5 degres, og det er ikke nok.
Så jeg prøvede 2 forskellige sensorer. For det første bruger jeg et magnetometer (LSM303D). Princippet var simpelt: Før rotation få den nordlige retning, beregne målet og justere træk, indtil målet er nået. Det var lidt bedre end med encoderen, men med for spredning. Efter det forsøgte jeg at bruge et gyroskop (L3GD20). Princippet var bare at integrere rotationshastigheden fra sensoren til at beregne rotationen. Og det fungerede fint. Jeg var i stand til at styre rotation ved +- 1 grader.
Ikke desto mindre var jeg nysgerrig efter at prøve noget IMU. Jeg vælger en BNO055 komponent. Jeg brugte lidt tid på at forstå og teste denne IMU. Til sidst besluttede jeg at vælge denne sensor af følgende årsager
- Jeg kan styre rotation såvel som med L3GD20
- Jeg kan registrere let rotation, når jeg bevæger mig lige
- Jeg har brug for at få nord orientering for robotlokalisering og kompasskalibreringen af BNO055 er meget enkel
Trin 2: Sådan bruges BNO055 til 2D -lokalisering?
BNO055 IMU er en Bosch 9 -akset intelligent sensor, der kan give absolut orientering.
Databladet indeholder en komplet dokumentation. Det er en højteknologisk komponent, er det et ret komplekst produkt, og jeg brugte nogle timer på at lære, hvordan det fungerer og prøve forskellige måder at bruge det på.
Jeg tror, det kunne være nyttigt at dele denne oplevelse.
For det første brugte jeg Adafruit -biblioteket, der giver et godt værktøj til at kalibrere og opdage sensoren.
Til sidst og efter mange tests besluttede jeg mig for
- brug Adafruit -biblioteket til kun at gemme kalibrering
- brug 3 af alle de mulige tilstande for BNO055 (NDOF, IMU, Compss)
- dedikere en Arduino Nano til at beregne lokalisering baseret på BNO055 målinger
Trin 3: Hardware Point of Vue
BNO055 er en I2C -komponent. Så det har brug for strømforsyning, SDA og SCL for at kommunikere.
Bare pas på Vdd -spændingen i henhold til det produkt, du har købt. Bosch -chippen fungerer i området: 2,4V til 3,6V, og du kan finde 3,3v og 5v komponent.
Der er ingen vanskeligheder ved at forbinde Nano og BNO055.
- BNO055 drives af Nano
- SDA og SCL er forbundet med 2 x 2k pull-up modstande.
- 3 LED tilsluttet Nano til diagnose (med modstande)
- 2 stik bruges til at definere tilstanden efter opstart
- 1 stik mod BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 stik mod Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)
Lidt lodning og det er det!
Trin 4: Hvordan fungerer det?
Fra kommunikationspunkt:
- Nano er I2C busmester
- Robotten/Mega og BNO055 er I2C slaver
- Nano læser permanent BNO055 registre
- Robotten/Mega stiger et numerisk signal for at anmode om ordet fra Nano
Fra beregningens synspunkt: Nano kombineret med BNO055 leverer
- Kompassoverskriften (bruges til lokalisering)
- En relativ overskrift (bruges til at styre rotationer)
- Den absolutte kurs og position (bruges til at styre træk)
Fra funktionelt synspunkt: Nano:
- styrer BNO055 -kalibreringen
- administrerer BNO055 parametre og kommandoer
Delsystemet Nano & BNO055:
- beregne for hvert robothjul den absolutte kurs og lokalisering (med en skalafaktor)
- beregne den relative kurs under robotens rotation
Trin 5: Arkitekturen og softwaren
Hovedsoftwaren kører på en Arduino Nano
- Arkitektur er baseret på I2C -kommunikation.
- Jeg valgte at dedikere en Nano på grund af det faktum, at Atmega, der driver robotten, temmelig allerede var indlæst, og denne arkitektur gør det nemmest at genbruge andre steder.
- Nano læser BNO055 -registre, beregner og gemmer overskrift og lokalisering i sine egne registre.
- Arduino Atmega, der kører robotkoden, sender information om hjulkodere til Nano og læser overskrifter og lokalisering inde i Nano -registre.
Der er subsytem (Nano) kode tilgængelig her på GitHub
Adafruit -kalibreringsværktøjet, hvis det er her på GitHub (kalibrering gemmes på eeproom)
Trin 6: Hvad lærte jeg?
Angående I2C
For det første forsøgte jeg at have 2 mestre (Arduino) og 1 slave (sensor) på den samme bus, men i slutningen er det muligt og lettest kun at indstille Nano som master og bruge GPIO -forbindelse mellem de 2 Arduinos til at "anmode om token".
Angående BNO055 til 2D -orientering
Jeg kan koncentrere mig om 3 forskellige driftstilstande: NDOF (kombinationsgyroskop, accelerometer og kompas), når robotten er inaktiv, IMU (kombinere gyroskop, accelerometer), når robotten bevæger sig og Kompas i lokaliseringsfasen. Det er let og hurtigt at skifte mellem disse tilstande.
For at reducere kodestørrelse og beholde muligheden for at bruge BNO055 interrupt til at opdage kollision, foretrækker jeg ikke at bruge Adafruit bibliotek og gøre det på egen hånd.
Anbefalede:
Sådan opsættes en Raspberry Pi og begynder at bruge den: 4 trin
Sådan opsættes en Raspberry Pi og begynder at bruge den: For fremtidens læsere er vi i 2020. Året, hvor du, hvis du er heldig at være sund og ikke er smittet af Covid-19, dig pludselig , fik mere fritid, end du nogensinde havde forestillet dig. Så hvordan kan jeg optage mig selv på en ikke for dum måde? Åh ja
ANSIGTSSPORING VED AT BRUGE ARDUINO !!!: 7 trin
FACE TRACKING BRUG AF ARDUINO !!!: I en tidligere instruerbar delte jeg, hvordan du kan kommunikere mellem Arduino og Python ved hjælp af 'pyserial' modul og styre en LED. Hvis du ikke har set det, så tjek det ud her: KOMMUNIKATION MELLEM ARDUINO & PYTHON! Og hvordan du kan registrere farve o
DESINFEKTIONSMASKINSIMULERING VED AT BRUGE TINKERCAD: 6 trin
DESINFEKTIONSMASKINSIMULERING VED AT BRUGE TINKERCAD: I denne uigennemsigtige vil vi se, hvordan vi laver en simulering af desinfektionsmaskine, Contact less Automatic Sanitizer er en desinfektionsmaskine, fordi vi ikke bruger vores hænder til at betjene maskinen i stedet for nærhedens infrarøde sensor
Nem måde at bruge Makey Makey på med et teknisk dæk: 5 trin
Nem måde at bruge Makey Makey på med et teknisk dæk: Hej. Jeg har for nylig set et tech -deck makey -makey -program i denne konkurrence, som var virkelig fedt, men virkede hårdt, så jeg lavede en nem måde at spille spil med et tech -deck. Hvis du kan lide min instruerbare, skal du stemme på den i den makey makey -konkurrence
En talende UV-indeks-måleenhed, der bruger VEML6075-sensoren og den lille Buddy Talker: 5 trin
En talende UV-indeks-måleenhed, der bruger VEML6075-sensoren og den lille Buddy Talker: Somre kommer! Solen skinner, hvilket er fantastisk. Men efterhånden som ultraviolet (UV) stråling bliver mere intens, får folk som mig fregner, små brune øer, der svømmer i et hav af rød, solbrændt, kløende hud. At kunne få information i realtid