Përmbajtje:

Një mënyrë për të përdorur një njësi matëse inerciale?: 6 hapa
Një mënyrë për të përdorur një njësi matëse inerciale?: 6 hapa

Video: Një mënyrë për të përdorur një njësi matëse inerciale?: 6 hapa

Video: Një mënyrë për të përdorur një njësi matëse inerciale?: 6 hapa
Video: Gjeniu i matematikës, 13-vjeçari që zgjidh ushtrimet më shpejt së makina llogaritëse 2024, Nëntor
Anonim
Një mënyrë për të përdorur një njësi matëse inerciale?
Një mënyrë për të përdorur një njësi matëse inerciale?

Konteksti:

Unë po ndërtoj për argëtim një robot që dua të lëviz në mënyrë autonome brenda një shtëpie.

Workshtë një punë e gjatë dhe po e bëj hap pas hapi.

Unë tashmë kam botuar 2 udhëzime për atë temë:

  • një për krijimin e një kodifikuesi të rrotave
  • një për lidhjen wifi

Roboti im drejtohet nga 2 motorë DC me ndihmën e kodifikuesit timon të bërë në shtëpi.

Aktualisht jam duke përmirësuar kontrollin e lëvizjes dhe kam kaluar ca kohë me xhiroskop, akselerometër dhe IMU. Unë do të kisha kënaqësinë të ndaj këtë përvojë.

Dëshironi të dini më shumë rreth lokalizimit? Këtu është një artikull se si të kombinoni inteligjencën artificiale dhe ultratinguj për të lokalizuar robotin

Hapi 1: Pse të përdorni një njësi matëse inerciale?

Pse të përdorni një njësi matëse inerciale?
Pse të përdorni një njësi matëse inerciale?

Pra, pse kam përdorur një IMU?

Arsyeja e parë ishte se nëse kodifikuesi i rrotave është mjaft i saktë për të kontrolluar lëvizjen e drejtë, edhe pas akordimit nuk kam qenë në gjendje të marr një saktësi për rrotullimin më pak se +- 5 degra dhe kjo nuk është e mjaftueshme.

Kështu që unë provova 2 sensorë të ndryshëm. Së pari unë përdor një magnetometër (LSM303D). Parimi ishte i thjeshtë: para rrotullimit merrni orientimin verior, llogaritni objektivin dhe rregulloni lëvizjen derisa të arrihet objektivi. Ishte pak më mirë sesa me koduesin, por me shumë shpërndarje. Pas kësaj unë u përpoqa të përdor një xhiroskop (L3GD20). Parimi ishte vetëm integrimi i shpejtësisë së rrotullimit të dhënë nga sensori për të llogaritur rrotullimin. Dhe funksionoi mirë. Unë kam qenë në gjendje të kontrolloj rrotullimin në +- 1 gradë.

Sidoqoftë, isha kurioz të provoja ndonjë IMU. Unë zgjedh një përbërës BNO055. Kam kaluar ca kohë për të kuptuar dhe testuar këtë IMU. Në fund vendosa të zgjedh këtë sensor për arsyet e mëposhtme

  • Unë mund të kontrolloj rrotullimin, si dhe me L3GD20
  • Unë mund të zbuloj rrotullim të lehtë kur lëviz drejt
  • Më duhet të marr orientimin verior për lokalizimin e robotit dhe kalibrimi i busullës së BNO055 është shumë i thjeshtë

Hapi 2: Si të përdorni BNO055 për lokalizimin 2D?

Si të përdorni BNO055 për lokalizimin 2D?
Si të përdorni BNO055 për lokalizimin 2D?

BNO055 IMU është një sensor inteligjent Bosch 9 aks që mund të sigurojë orientim absolut.

Fleta e të dhënave siguron një dokumentacion të plotë. Componentshtë një komponent i teknologjisë së lartë është një produkt mjaft kompleks dhe kam kaluar disa orë për të mësuar se si funksionon dhe për të provuar mënyra të ndryshme të përdorimit të tij.

Unë mendoj se mund të jetë e dobishme për të ndarë këtë përvojë.

Së pari kam përdorur bibliotekën Adafruit që ofron një mjet të mirë për të kalibruar dhe zbuluar sensorin.

Në fund dhe pas shumë testeve vendosa që të

  • përdorni bibliotekën Adafruit vetëm për kursimin e kalibrimit
  • përdorni 3 nga të gjitha mënyrat e mundshme të BNO055 (NDOF, IMU, Compss)
  • kushtoni një Arduino Nano për të llogaritur lokalizimin bazuar në masurat BNO055

Hapi 3: Pika e pajisjeve të Vue

Pika Hardware e Vue
Pika Hardware e Vue
Pika Hardware e Vue
Pika Hardware e Vue
Pika Hardware e Vue
Pika Hardware e Vue

BNO055 është një komponent I2C. Pra, ajo ka nevojë për furnizim me energji, SDA dhe SCL për të komunikuar.

Vetëm kujdesuni për tensionin Vdd sipas produktit që keni blerë. Çipi Bosch punon në intervalin: 2.4V deri 3.6V dhe mund të gjeni komponentin 3.3v dhe 5v.

Nuk ka vështirësi për lidhjen e Nano dhe BNO055.

  • BNO055 mundësohet nga Nano
  • SDA & SCL janë të lidhura me rezistenca tërheqëse 2 x 2k.
  • 3 LED të lidhura me Nano për diagnozë (me rezistorë)
  • 2 lidhës të përdorur për të përcaktuar modalitetin pas nisjes
  • 1 lidhës drejt BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 lidhës drejt Robotit/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)

Pak saldim dhe kaq!

Hapi 4: Si funksionon?

Si punon ?
Si punon ?

Nga pika e komunikimit vue:

  • Nano është mjeshtri i autobusit I2C
  • Roboti/Mega dhe BNO055 janë skllevër të I2C
  • Nano lexon përgjithmonë regjistrat BNO055
  • Roboti/Mega ngre një sinjal numerik për të kërkuar fjalën nga Nano

Nga pika e llogaritjes e vue: Nano e kombinuar me BNO055 jep

  • Titulli i busullës (përdoret për lokalizim)
  • Një titull relativ (përdoret për të kontrolluar rrotullimet)
  • Titulli dhe pozicioni absolut (përdoret për të kontrolluar lëvizjet)

Nga pika funksionale e vue: Nano:

  • menaxhon kalibrimin BNO055
  • menaxhon parametrat dhe komandat BNO055

Nënsistemi Nano & BNO055:

  • llogarit për secilin robot rrota titullin dhe lokalizimin absolut (me një faktor shkalle)
  • llogarit titullin relativ gjatë rrotullimit të robotit

Hapi 5: Arkitektura dhe Softueri

Arkitektura dhe Softueri
Arkitektura dhe Softueri

Softueri kryesor po funksionon në një Arduino Nano

  • Arkitektura bazohet në komunikimin I2C.
  • Zgjodha t'i kushtoja një Nano për faktin se Atmega që drejton robotin ishte tashmë e ngarkuar dhe kjo arkitekturë e bën më të lehtë ripërdorimin diku tjetër.
  • Nano lexon regjistrat BNO055, llogarit dhe ruan titullin dhe lokalizimin në regjistrat e vet.
  • Arduino Atmega që drejton kodin e robotit, dërgon kodime të informacionit tek rrota tek Nano dhe lexon titujt dhe lokalizimin brenda regjistrave Nano.

Aty kodi i nënstemit (Nano) është i disponueshëm këtu në GitHub

Mjeti i kalibrimit Adafruit nëse këtu në GitHub (kalibrimi do të ruhet në dhomën e eufës)

Hapi 6: Çfarë Mësova?

Në lidhje me I2C

Së pari u përpoqa të kem 2 mjeshtra (Arduino) dhe 1 skllav (sensor) në të njëjtin autobus, por në fund është e mundur dhe më e lehtë të vendosni vetëm Nano si master dhe të përdorni lidhjen GPIO midis 2 Arduinos për të "kërkuar shenjën" Me

Lidhur me BNO055 për orientimin 2D

Mund të përqendrohem në 3 mënyra të ndryshme drejtimi: NDOF (kombinoni xhiroskopin, përshpejtuesin dhe kompasin) kur roboti është i papunë, IMU (kombinoni xhiroskopin, përshpejtuesin) kur roboti lëviz dhe Compass gjatë fazës së lokalizimit. Kalimi midis këtyre mënyrave është i lehtë dhe i shpejtë.

Për të zvogëluar madhësinë e kodit dhe për të mbajtur mundësinë që të përdorni ndërprerjen BNO055 për të zbuluar përplasjen, unë preferoj të mos përdor bibliotekën Adafruit dhe ta bëj vetë.

Recommended: