Cuprins:
- Pasul 1: De ce să utilizați o unitate de măsurare inerțială?
- Pasul 2: Cum se utilizează BNO055 pentru localizarea 2D?
- Pasul 3: Punct de vedere hardware
- Pasul 4: Cum funcționează?
- Pasul 5: Arhitectură și software
- Pasul 6: Ce am învățat?
Video: O modalitate de a utiliza o unitate de măsurare inerțială?: 6 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
Contextul:
Construiesc pentru distracție un robot pe care vreau să îl mișc autonom în interiorul unei case.
Este o muncă lungă și o fac pas cu pas.
Am publicat deja 2 instructabile pe acest subiect:
- una despre realizarea unui codificator de roți
- una despre conexiunea wifi
Robotul meu este acționat de către 2 motoare de curent continuu cu ajutorul codificatorului meu de roți de casă.
În prezent îmbunătățesc controlul mișcării și am petrecut ceva timp cu giroscopul, accelerometrul și IMU. Mi-ar plăcea să împărtășesc această experiență.
Doriți să aflați mai multe despre localizare? Iată un articol despre cum să combinați inteligența artificială și ultrasunetele pentru a localiza robotul
Pasul 1: De ce să utilizați o unitate de măsurare inerțială?
Deci, de ce am folosit un IMU?
Primul motiv a fost că, dacă codificatorul roții este suficient de precis pentru a controla mișcarea dreaptă, chiar și după reglare nu am putut obține o precizie pentru rotație mai mică de + - 5 grade și acest lucru nu este suficient.
Așa că am încercat 2 senzori diferiți. În primul rând, folosesc un magnetometru (LSM303D). Principiul a fost simplu: înainte de rotație, obțineți orientarea spre nord, calculați ținta și reglați mișcarea până la atingerea țintei. A fost puțin mai bine decât cu codificatorul, dar cu o dispersie prea mare. După aceea, am încercat să folosesc un giroscop (L3GD20). Principiul a fost doar de a integra viteza de rotație furnizată de senzor pentru a calcula rotația. Și a funcționat bine. Am reușit să controlez rotația la + - 1 grad.
Cu toate acestea, am fost curios să încerc câteva IMU. Aleg o componentă BNO055. Am petrecut ceva timp să înțeleg și să testez acest IMU. La final, am decis să selectez acest senzor din următoarele motive
- Pot controla rotația, precum și cu L3GD20
- Pot detecta o ușoară rotație când mă mișc direct
- Trebuie să obțin orientarea spre nord pentru localizarea robotului, iar calibrarea busolei BNO055 este foarte simplă
Pasul 2: Cum se utilizează BNO055 pentru localizarea 2D?
BNO055 IMU este un senzor inteligent Bosch pe 9 axe care ar putea oferi o orientare absolută.
Fișa tehnică oferă o documentație completă. Este o componentă de înaltă tehnologie, este un produs destul de complex și am petrecut câteva ore să învăț cum funcționează și să încerc diferite moduri de utilizare.
Cred că ar putea fi util să împărtășim această experiență.
În primul rând am folosit biblioteca Adafruit care oferă un instrument bun pentru calibrarea și descoperirea senzorului.
La final și după o mulțime de teste am decis să fac asta
- utilizați biblioteca Adafruit doar pentru salvarea calibrării
- utilizați 3 dintre toate modurile posibile ale BNO055 (NDOF, IMU, Compss)
- dedicați un Arduino Nano pentru a calcula localizarea bazată pe măsurători BNO055
Pasul 3: Punct de vedere hardware
BNO055 este o componentă I2C. Deci are nevoie de sursă de alimentare, SDA și SCL pentru a comunica.
Doar aveți grijă la tensiunea Vdd în funcție de produsul pe care l-ați cumpărat. Cipul Bosch funcționează în intervalul: 2.4V până la 3.6V și puteți găsi componente de 3.3v și 5v.
Nu există dificultăți pentru conectarea Nano și BNO055.
- BNO055 este alimentat de Nano
- SDA și SCL sunt conectate cu rezistențe de tragere 2 x 2k.
- 3 LED-uri conectate la Nano pentru diagnostic (cu rezistențe)
- 2 conectori utilizați pentru a defini modul după pornire
- 1 conector către BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 conector către Robot / Mega (+ 9V, Gnd, sda, Scl, Pin11, Pin12)
Un pic de lipit și gata!
Pasul 4: Cum funcționează?
Din punctul de vedere al comunicării:
- Nano este maestrul autobuzului I2C
- Robotul / Mega și BNO055 sunt sclavi I2C
- Nano a citit permanent registrele BNO055
- Robotul / Mega ridică un semnal numeric pentru a solicita cuvântul de la Nano
Din punctul de vedere calcul: Nano combinat cu BNO055 livrează
- Antetul busolei (utilizat pentru localizare)
- Un titlu relativ (folosit pentru controlul rotațiilor)
- Poziția și poziția absolută (utilizate pentru a controla mișcările)
Din punct de vedere funcțional: Nano:
- gestionează calibrarea BNO055
- gestionează parametrii și comenzile BNO055
Subsistemul Nano și BNO055:
- calculați pentru fiecare roată robot direcția absolută și localizarea (cu un factor de scară)
- calculați poziția relativă în timpul rotației robotului
Pasul 5: Arhitectură și software
Principalul software rulează pe un Arduino Nano
- Arhitectura se bazează pe comunicarea I2C.
- Am ales să dedic un Nano datorită faptului că Atmega care rulează robotul era mai degrabă deja încărcat, iar această arhitectură face cel mai ușor reutilizarea în altă parte.
- Nano citește registrele BNO055, calculează și stochează titlurile și localizarea în propriile registre.
- Arduino Atmega care rulează codul robotului, trimite informații de codare a roților către Nano și citește titlurile și localizarea din registrele Nano.
Acolo cod subsytem (Nano) este disponibil aici pe GitHub
Instrumentul de calibrare Adafruit dacă este aici pe GitHub (calibrarea va fi stocată pe eeproom)
Pasul 6: Ce am învățat?
În ceea ce privește I2C
În primul rând, am încercat să am 2 master (Arduino) și 1 slave (senzor) pe aceeași magistrală, dar la sfârșit este posibil și cel mai simplu să setezi doar Nano ca master și să folosesc conexiunea GPIO între cele 2 Arduino pentru a „solicita simbolul”..
În ceea ce privește BNO055 pentru orientare 2D
Mă pot concentra pe 3 moduri de funcționare diferite: NDOF (combina giroscopul, accelerometrul și compas) când robotul este inactiv, IMU (combina giroscopul, accelerometrul) când robotul se deplasează și Busola în timpul fazei de localizare. Comutarea între aceste moduri este ușoară și rapidă.
Pentru a reduce dimensiunea codului și a păstra posibilitatea de a utiliza întreruperea BNO055 pentru a detecta coliziunea, prefer să nu folosesc biblioteca Adafruit și să o fac pe cont propriu.
Recomandat:
Cum se face o unitate flash USB folosind un radier - Carcasă pentru unitate USB DIY: 4 pași
Cum se face o unitate flash USB folosind un radier | Carcasă pentru unitate USB DIY: acest blog este despre „Cum se face unitate flash USB folosind o radieră | Carcasă pentru unitate USB DIY " sper sa-ti placa
Cea mai simplă modalitate de a face un robot de control al gesturilor: 7 pași (cu imagini)
Cea mai ușoară modalitate de a face un robot de control al gesturilor: controlează jucăriile ca un superherou. Aflați cum să faceți o mașină controlată de gesturi. Aceasta este despre cum să creați singură o mașină controlată de gesturi. Practic, aceasta este o aplicație simplă a giroscopului cu 3 axe MPU-6050, accelerometru. Puteți face multe alte lucruri
O modalitate extrem de simplă de a începe cu automatizarea casei folosind module DIY: 6 pași
O modalitate extrem de simplă de a începe cu automatizarea casei folosind module DIY: Am fost plăcut surprins când am decis să încerc să adaug niște senzori DIY asistentului de acasă. Utilizarea ESPHome este extrem de simplă și în această postare vom învăța cum să controlăm un pin GPIO și, de asemenea, să obținem temperatura și amp; date privind umiditatea de la un wireless n
ARUPI - o unitate de înregistrare automată low-cost / unitate de înregistrare autonomă (ARU) pentru ecologiști ai peisajului sonor: 8 pași (cu imagini)
ARUPI - o unitate de înregistrare automată low-cost / unitate de înregistrare autonomă (ARU) pentru ecologiști ai peisajului sonor: acest instructiv a fost scris de Anthony Turner. Proiectul a fost dezvoltat cu mult ajutor de la Shed in the School of Computing, Universitatea din Kent (domnul Daniel Knox a fost de mare ajutor!). Vă va arăta cum să construiți o înregistrare audio automatizată
Cum să creați o unitate USB bootabilă fără a utiliza niciun software: 3 pași
Cum să creați o unitate USB bootabilă fără a utiliza niciun software: Pentru a crea manual o unitate USB bootabilă, vom utiliza linia de comandă ca program implicit Windows. Iată pas cu pas pentru a crea o unitate USB bootabilă ca suport de instalare Windows. Pentru a crea o unitate USB bootabilă ca instalare Windows, eu