Turinys:

Inercinio matavimo įrenginio naudojimo būdas?: 6 žingsniai
Inercinio matavimo įrenginio naudojimo būdas?: 6 žingsniai

Video: Inercinio matavimo įrenginio naudojimo būdas?: 6 žingsniai

Video: Inercinio matavimo įrenginio naudojimo būdas?: 6 žingsniai
Video: HAYLOU GS: Haylou's DIRTY LITTLE SECRET // Is It a Copy of the SoundPEATS WATCH 2? 2024, Lapkritis
Anonim
Inercinio matavimo įrenginio naudojimo būdas?
Inercinio matavimo įrenginio naudojimo būdas?

Kontekstas:

Aš linksmybėms kuriu robotą, kurį noriu savarankiškai perkelti namo viduje.

Tai ilgas darbas, kurį darau žingsnis po žingsnio.

Aš jau paskelbiau 2 instrukcijas šia tema:

  • vienas apie ratų kodavimo įrenginio gamybą
  • vienas apie wifi ryšį

Mano robotą valdo 2 nuolatinės srovės varikliai, naudojant mano namuose pagamintą ratų kodavimo įrenginį.

Šiuo metu tobulinu judėjimo valdymą ir kurį laiką praleidau su giroskopu, akselerometru ir IMU. Norėčiau pasidalinti šia patirtimi.

Ar norite daugiau sužinoti apie lokalizaciją? Čia yra straipsnis, kaip sujungti dirbtinį intelektą ir ultragarsą, kad būtų galima lokalizuoti robotą

1 žingsnis: Kodėl naudoti inercinį matavimo įrenginį?

Kodėl verta naudoti inercinį matavimo įrenginį?
Kodėl verta naudoti inercinį matavimo įrenginį?

Taigi kodėl aš naudoju IMU?

Pirmoji priežastis buvo ta, kad jei ratų kodavimo įrenginys yra pakankamai tikslus, kad galėtų valdyti tiesioginį judėjimą, net ir po tuningo nepavyko pasiekti tikslumo, kad sukimasis būtų mažesnis nei +- 5 laipsniai, ir to nepakanka.

Taigi išbandžiau 2 skirtingus jutiklius. Pirmiausia naudoju magnetometrą (LSM303D). Principas buvo paprastas: prieš sukimąsi nustatykite šiaurės kryptį, apskaičiuokite tikslą ir koreguokite judesį, kol bus pasiektas tikslas. Tai buvo šiek tiek geriau nei naudojant kodavimo įrenginį, tačiau su per dideliu išsisklaidymu. Po to bandžiau naudoti giroskopą (L3GD20). Principas buvo tik integruoti sukimosi greitį, kurį pateikė jutiklis, kad būtų galima apskaičiuoti sukimąsi. Ir gerai veikė. Galėjau valdyti sukimąsi +- 1 laipsniu.

Nepaisant to, man buvo įdomu išbandyti IMU. Aš renkuosi BNO055 komponentą. Praleidau šiek tiek laiko, kad suprasčiau ir išbandyčiau šį IMU. Pabaigoje nusprendžiau pasirinkti šį jutiklį dėl šių priežasčių

  • Aš galiu valdyti sukimąsi taip pat, kaip ir su L3GD20
  • Aš galiu aptikti nedidelį sukimąsi judant tiesiai
  • Turiu gauti orientaciją į šiaurę robotui lokalizuoti, o BNO055 kompaso kalibravimas yra labai paprastas

2 veiksmas: kaip naudoti BNO055 2D lokalizavimui?

Kaip naudoti BNO055 2D lokalizavimui?
Kaip naudoti BNO055 2D lokalizavimui?

BNO055 IMU yra „Bosch“9 ašių išmanusis jutiklis, galintis užtikrinti absoliučią orientaciją.

Duomenų lape pateikiami visi dokumentai. Tai yra aukštųjų technologijų komponentas, ar tai gana sudėtingas produktas, ir aš praleidau kelias valandas, norėdamas sužinoti, kaip jis veikia, ir išbandyti įvairius jo naudojimo būdus.

Manau, būtų naudinga pasidalinti šia patirtimi.

Pirmiausia naudojau „Adafruit“biblioteką, kuri yra geras įrankis kalibruoti ir atrasti jutiklį.

Pabaigoje ir po daugybės bandymų nusprendžiau

  • naudokite „Adafruit“biblioteką tik taupydami kalibravimą
  • naudokite 3 iš visų galimų BNO055 režimų (NDOF, IMU, Compss)
  • skirkite „Arduino Nano“, kad apskaičiuotumėte lokalizaciją, pagrįstą BNO055 matavimais

3 žingsnis: „Hardue Point of Vue“

Techninė įranga „Vue“
Techninė įranga „Vue“
Techninė įranga „Vue“
Techninė įranga „Vue“
Techninė įranga „Vue“
Techninė įranga „Vue“

BNO055 yra I2C komponentas. Taigi, norint bendrauti, reikia maitinimo šaltinio, SDA ir SCL.

Tiesiog pasirūpinkite Vdd įtampa pagal įsigytą produktą. „Bosch“lustas veikia diapazone: nuo 2,4 V iki 3,6 V, o jūs galite rasti 3,3 ir 5 voltų komponentą.

Jungiant „Nano“ir „BNO055“nėra jokių sunkumų.

  • „BNO055“maitina „Nano“
  • SDA ir SCL yra prijungti prie 2 x 2k ištraukiamųjų rezistorių.
  • 3 šviesos diodai, prijungti prie „Nano“diagnostikai (su rezistoriais)
  • 2 jungtys, naudojamos režimui apibrėžti po įkrovos
  • 1 jungtis link BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 jungtis link roboto/mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Šiek tiek litavimo ir viskas!

4 žingsnis: kaip tai veikia?

Kaip tai veikia ?
Kaip tai veikia ?

Iš bendravimo taško:

  • „Nano“yra I2C autobusų meistras
  • Robotas/Mega ir BNO055 yra I2C vergai
  • „Nano“nuolat skaito BNO055 registrus
  • Robotas/Mega pakelia skaitmeninį signalą ir paprašo žodžio iš „Nano“

Iš skaičiavimo taško: „Nano“kartu su „BNO055“veikia

  • Kompaso antraštė (naudojama lokalizavimui)
  • Santykinė antraštė (naudojama sukimams valdyti)
  • Absoliuti kryptis ir padėtis (naudojama judesiams valdyti)

Funkciniu požiūriu: Nano:

  • valdo BNO055 kalibravimą
  • valdo BNO055 parametrus ir komandas

Posistemis Nano & BNO055:

  • kiekvienam roboto ratui apskaičiuoti absoliučią kryptį ir lokalizaciją (naudojant mastelio koeficientą)
  • Apskaičiuokite santykinę kryptį roboto sukimosi metu

5 žingsnis: architektūra ir programinė įranga

Architektūra ir programinė įranga
Architektūra ir programinė įranga

Pagrindinė programinė įranga veikia „Arduino Nano“

  • Architektūra pagrįsta I2C komunikacija.
  • Aš nusprendžiau skirti „Nano“dėl to, kad „Atmega“, valdanti robotą, buvo gana jau įkelta ir dėl šios architektūros ją lengviau naudoti kitur.
  • „Nano“skaito BNO055 registrus, apskaičiuoja ir saugo antraštes bei lokalizaciją savo registruose.
  • „Arduino Atmega“, valdanti roboto kodą, siunčia ratų kodavimo informaciją „Nano“ir skaito antraštes bei lokalizaciją „Nano“registruose.

„GitHub“čia yra posistemio („Nano“) kodas

„Adafruit“kalibravimo įrankis, jei esate čia „GitHub“(kalibravimas bus saugomas „eeproom“)

6 žingsnis: Ką aš išmokau?

Kalbant apie I2C

Pirma, aš bandžiau turėti 2 šeimininkus („Arduino“) ir 1 vergą (jutiklį) tame pačiame magistralėje, bet galiausiai galima ir paprasčiausiai nustatyti tik „Nano“kaip pagrindinį ir naudoti GPIO ryšį tarp 2 „Arduinos“, kad „paprašytumėte žetono“.

Kalbant apie BNO055 2D orientacijai

Galiu sutelkti dėmesį į 3 skirtingus veikimo režimus: NDOF (kombinuotas giroskopas, akselerometras ir kompasai), kai robotas neveikia, IMU (kombinuotas giroskopas, akselerometras), kai robotas juda, ir kompasas lokalizacijos etape. Perjungimas tarp šių režimų yra lengvas ir greitas.

Norėdami sumažinti kodo dydį ir išlaikyti galimybę naudoti „BNO055“pertrauką, kad aptiktų susidūrimą, aš nenoriu naudoti „Adafruit“bibliotekos ir tai daryti savarankiškai.

Rekomenduojamas: