Satura rādītājs:

Inerciālās mērīšanas vienības izmantošanas veids?: 6 soļi
Inerciālās mērīšanas vienības izmantošanas veids?: 6 soļi

Video: Inerciālās mērīšanas vienības izmantošanas veids?: 6 soļi

Video: Inerciālās mērīšanas vienības izmantošanas veids?: 6 soļi
Video: Секретная система паровых туннелей Нью-Йорка. (и почему льется с улицы) - ЭТО ИСТОРИЯ 2024, Novembris
Anonim
Inerciālās mērīšanas vienības izmantošanas veids?
Inerciālās mērīšanas vienības izmantošanas veids?

Konteksts:

Es izklaidei būvēju robotu, kuru vēlos autonomi pārvietot mājas iekšienē.

Tas ir ilgs darbs, un es to daru soli pa solim.

Es jau publicēju 2 pamācības par šo tēmu:

  • viens par riteņu kodētāja izgatavošanu
  • viens par wifi savienojumu

Ar manu mājās ražoto riteņu kodētāju manu robotu vada divi līdzstrāvas motori.

Pašlaik es uzlaboju kustību vadību un kādu laiku esmu pavadījis kopā ar žiroskopu, akselerometru un IMU. Es labprāt dalītos šajā pieredzē.

Vai vēlaties uzzināt vairāk par lokalizāciju? Šeit ir raksts par to, kā apvienot mākslīgo intelektu un ultraskaņu, lai lokalizētu robotu

1. darbība. Kāpēc izmantot inerciālās mērīšanas vienību?

Kāpēc izmantot inerciālās mērīšanas vienību?
Kāpēc izmantot inerciālās mērīšanas vienību?

Kāpēc tad es izmantoju IMU?

Pirmais iemesls bija tas, ka, ja riteņu kodētājs ir pietiekami precīzs, lai kontrolētu taisnu kustību, pat pēc tuningēšanas es nevarēju iegūt precizitāti rotācijai, kas mazāka par +- 5 grādiem, un ar to nepietiek.

Tāpēc es izmēģināju 2 dažādus sensorus. Pirmkārt, es izmantoju magnetometru (LSM303D). Princips bija vienkāršs: pirms rotācijas iegūstiet ziemeļu orientāciju, aprēķiniet mērķi un pielāgojiet kustību, līdz mērķis ir sasniegts. Tas bija nedaudz labāk nekā ar kodētāju, bet ar pārāk lielu izkliedi. Pēc tam es mēģināju izmantot žiroskopu (L3GD20). Princips bija tikai integrēt rotācijas ātrumu, ko nodrošina sensors, lai aprēķinātu rotāciju. Un tas strādāja labi. Es varēju kontrolēt rotāciju pie +- 1 grāda.

Tomēr man bija interesanti izmēģināt kādu IMU. Es izvēlos BNO055 komponentu. Es pavadīju kādu laiku, lai saprastu un pārbaudītu šo IMU. Beigās es nolēmu izvēlēties šo sensoru šādu iemeslu dēļ

  • Es varu kontrolēt rotāciju tikpat labi kā ar L3GD20
  • Es varu noteikt nelielu rotāciju, pārvietojoties taisni
  • Lai lokalizētu robotu, man ir jāiegūst ziemeļu orientācija, un BNO055 kompasa kalibrēšana ir ļoti vienkārša

2. darbība. Kā lietot BNO055 2D lokalizācijai?

Kā lietot BNO055 2D lokalizācijai?
Kā lietot BNO055 2D lokalizācijai?

BNO055 IMU ir Bosch 9 asu viedais sensors, kas varētu nodrošināt absolūtu orientāciju.

Datu lapa nodrošina pilnu dokumentāciju. Tas ir augsto tehnoloģiju komponents, vai tas ir diezgan sarežģīts produkts, un es pavadīju dažas stundas, lai uzzinātu, kā tas darbojas, un izmēģinātu dažādus tā izmantošanas veidus.

Es domāju, ka varētu būt noderīgi dalīties šajā pieredzē.

Pirmkārt, es izmantoju Adafruit bibliotēku, kas nodrošina labu instrumentu sensora kalibrēšanai un atklāšanai.

Beigās un pēc daudziem testiem es nolēmu

  • izmantojiet Adafruit bibliotēku, lai saglabātu tikai kalibrēšanu
  • izmantojiet 3 no visiem iespējamajiem BNO055 režīmiem (NDOF, IMU, Compss)
  • veltiet Arduino Nano, lai aprēķinātu lokalizāciju, pamatojoties uz BNO055 mērījumiem

3. solis: aparatūras punkts Vue

Aparatūras punkts Vue
Aparatūras punkts Vue
Aparatūras punkts Vue
Aparatūras punkts Vue
Aparatūras punkts Vue
Aparatūras punkts Vue

BNO055 ir I2C sastāvdaļa. Tātad, lai sazinātos, ir nepieciešams barošanas avots, SDA un SCL.

Vienkārši rūpējieties par Vdd spriegumu atbilstoši iegādātajam produktam. Bosch mikroshēma darbojas diapazonā: 2.4V līdz 3.6V, un jūs varat atrast 3.3v un 5v komponentu.

Nav nekādu grūtību savienot Nano un BNO055.

  • BNO055 darbina Nano
  • SDA un SCL ir savienoti ar 2 x 2k pievilkšanas rezistoriem.
  • 3 gaismas diodes, kas savienotas ar Nano diagnostikai (ar rezistoriem)
  • 2 savienotāji, ko izmanto, lai definētu režīmu pēc palaišanas
  • 1 savienotājs virzienā uz BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 savienotājs pret robotu/mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Mazliet lodēt un viss!

4. darbība. Kā tas darbojas?

Kā tas darbojas ?
Kā tas darbojas ?

No saziņas punkta:

  • Nano ir I2C autobusu meistars
  • Robots/Mega un BNO055 ir I2C vergi
  • Nano pastāvīgi nolasa BNO055 reģistrus
  • Robots/Mega paceļ ciparu signālu, lai pieprasītu vārdu no Nano

No aprēķina punkta: Nano kopā ar BNO055 nodrošina

  • Kompasa virsraksts (izmanto lokalizācijai)
  • Relatīvs virsraksts (izmanto, lai kontrolētu rotācijas)
  • Absolūtais kurss un pozīcija (izmanto kustību kontrolei)

No funkcionālā viedokļa: Nano:

  • pārvalda BNO055 kalibrēšanu
  • pārvalda BNO055 parametrus un komandas

Apakšsistēma Nano & BNO055:

  • aprēķina katram robota ritenim absolūto virzienu un lokalizāciju (ar mēroga koeficientu)
  • aprēķiniet relatīvo virzienu robota rotācijas laikā

5. darbība: arhitektūra un programmatūra

Arhitektūra un programmatūra
Arhitektūra un programmatūra

Galvenā programmatūra darbojas ar Arduino Nano

  • Arhitektūras pamatā ir I2C komunikācija.
  • Es izvēlējos veltīt Nano, jo Atmega, kas vada robotu, jau bija ielādēta un šī arhitektūra atvieglo atkārtotu izmantošanu citur.
  • Nano nolasa BNO055 reģistrus, aprēķina un uzglabā virsrakstu un lokalizāciju savos reģistros.
  • Arduino Atmega, kas vada robota kodu, nosūta riteņiem kodētāja informāciju Nano un nolasa virsrakstus un lokalizāciju Nano reģistros.

Tur apakšsistēmas (Nano) kods ir pieejams šeit vietnē GitHub

Adafruit kalibrēšanas rīks, ja atrodaties šeit GitHub (kalibrēšana tiks saglabāta eeproom)

6. solis: Ko es iemācījos?

Attiecībā uz I2C

Pirmkārt, es mēģināju, lai vienā autobusā būtu 2 meistari (Arduino) un 1 vergs (sensors), bet beigās ir iespējams un visvieglāk iestatīt tikai Nano kā galveno un izmantot GPIO savienojumu starp 2 Arduinos, lai "pieprasītu marķieri".

Attiecībā uz BNO055 2D orientācijai

Es varu koncentrēties uz 3 dažādiem darbības režīmiem: NDOF (kombinēt žiroskopu, akselerometru un kompasas), kad robots ir dīkstāvē, IMU (kombinēt žiroskopu, akselerometru), kad robots pārvietojas, un kompasu lokalizācijas fāzē. Pārslēgšanās starp šiem režīmiem ir vienkārša un ātra.

Lai samazinātu koda lielumu un saglabātu iespēju izmantot sadursmes noteikšanai BNO055 pārtraukumu, es labāk neizmantoju Adafruit bibliotēku un daru to pats.

Ieteicams: