Taula de continguts:

Una manera d’utilitzar una unitat de mesura inercial ?: 6 passos
Una manera d’utilitzar una unitat de mesura inercial ?: 6 passos

Vídeo: Una manera d’utilitzar una unitat de mesura inercial ?: 6 passos

Vídeo: Una manera d’utilitzar una unitat de mesura inercial ?: 6 passos
Vídeo: Замена старых окон на новые. Переделка хрущевки от А до Я. Смета. Все что нужно знать. #7 2024, De novembre
Anonim
Una manera d’utilitzar una unitat de mesura inercial?
Una manera d’utilitzar una unitat de mesura inercial?

El context:

Estic construint per diversió un robot que vull moure de forma autònoma dins d’una casa.

És una feina llarga i estic fent pas a pas.

Ja he publicat 2 instruccions sobre aquest tema:

  • una sobre la fabricació d’un codificador de rodes
  • un sobre connexió wifi

El meu robot funciona amb 2 motors de corrent continu amb l'ajut del meu codificador de rodes casolà.

Actualment estic millorant el control de moviment i he passat un temps amb giroscopi, acceleròmetre i IMU. M’agradaria compartir aquesta experiència.

Voleu saber més sobre la localització? Aquí teniu un article sobre com combinar la intel·ligència artificial i els ultrasons per localitzar el robot

Pas 1: per què utilitzar una unitat de mesura inercial?

Per què utilitzar una unitat de mesura inercial?
Per què utilitzar una unitat de mesura inercial?

Llavors, per què he fet servir una IMU?

La primera raó va ser que si el codificador de rodes és prou precís per controlar el moviment directe, fins i tot després de sintonitzar no vaig poder obtenir una precisió de rotació inferior a + - 5 graus i això no és suficient.

Així que vaig provar 2 sensors diferents. En primer lloc, faig servir un magnetòmetre (LSM303D). El principi era senzill: abans de la rotació, obteniu l'orientació nord, calculeu l'objectiu i ajusteu el moviment fins que s'arribi a l'objectiu. Va ser una mica millor que amb el codificador, però amb massa dispersió. Després vaig intentar utilitzar un giroscopi (L3GD20). El principi era només integrar la velocitat de rotació proporcionada pel sensor per calcular la rotació. I va funcionar bé. Vaig poder controlar la rotació a + - 1 grau.

Tot i això, tenia curiositat per provar alguna IMU. Trio un component BNO055. Vaig dedicar una estona a comprendre i provar aquesta IMU. Al final, vaig decidir seleccionar aquest sensor per les següents raons

  • Puc controlar la rotació, així com amb el L3GD20
  • Puc detectar una lleugera rotació quan es mou recte
  • Necessito orientar-me cap al nord per a la localització del robot i el calibratge de la brúixola del BNO055 és molt senzill

Pas 2: Com utilitzar BNO055 per a la localització 2D?

Com utilitzar BNO055 per a la localització 2D?
Com utilitzar BNO055 per a la localització 2D?

BNO055 IMU és un sensor intel·ligent Bosch de 9 eixos que podria proporcionar una orientació absoluta.

El full de dades proporciona una documentació completa. És un component d’alta tecnologia, és un producte bastant complex i vaig passar algunes hores per aprendre com funciona i provar diferents maneres d’utilitzar-lo.

Crec que podria ser útil compartir aquesta experiència.

En primer lloc, he utilitzat la biblioteca Adafruit que proporciona una bona eina per calibrar i descobrir el sensor.

Al final i després de moltes proves, vaig decidir fer-ho

  • utilitzeu la biblioteca Adafruit només per desar el calibratge
  • utilitzeu 3 de tots els modes possibles de BNO055 (NDOF, IMU, Compss)
  • dediqueu un Arduino Nano per calcular la localització basada en els mesuraments BNO055

Pas 3: Punt de vista de maquinari

Punt de vista de maquinari
Punt de vista de maquinari
Punt de vista de maquinari
Punt de vista de maquinari
Punt de vista de maquinari
Punt de vista de maquinari

BNO055 és un component I2C. Per tant, necessita font d'alimentació, SDA i SCL per comunicar-se.

Només cal que tingueu cura del voltatge Vdd segons el producte que hàgiu comprat. El xip Bosch funciona en el rang: 2.4V a 3.6V i podeu trobar components de 3.3v i 5v.

No hi ha dificultats per connectar el Nano i el BNO055.

  • El BNO055 funciona amb Nano
  • SDA i SCL estan connectats amb resistències de tracció de 2 x 2 k.
  • 3 LED connectats al Nano per al diagnòstic (amb resistències)
  • 2 connectors utilitzats per definir el mode després de l'arrencada
  • 1 connector cap al BNO (Gnd, Vdd, Sda, Scl, Int)
  • 1 connector cap al robot / mega (+ 9V, Gnd, sda, Scl, Pin11, Pin12)

Una mica de soldadura i ja està!

Pas 4: Com funciona?

Com funciona ?
Com funciona ?

Des del punt de vista de la comunicació:

  • El Nano és el mestre d’autobusos I2C
  • El Robot / Mega i el BNO055 són esclaus I2C
  • El Nano va llegir permanentment els registres BNO055
  • El robot / Mega fa un senyal numèric per demanar la paraula al Nano

Des del punt de vista de càlcul: el Nano combinat amb el BNO055 ofereix

  • L'encapçalament de la brúixola (utilitzat per a la localització)
  • Un encapçalament relatiu (utilitzat per controlar les rotacions)
  • L'encapçalament i la posició absoluts (s'utilitzen per controlar els moviments)

Des del punt de vista funcional: The Nano:

  • gestiona el calibratge BNO055
  • gestiona els paràmetres i les ordres de BNO055

El subsistema Nano i BNO055:

  • calcular per a cada roda de robot l’encapçalament i la localització absoluts (amb un factor d’escala)
  • calculeu l’encapçalament relatiu durant la rotació del robot

Pas 5: Arquitectura i programari

L’arquitectura i el programari
L’arquitectura i el programari

El programari principal s’executa en un Arduino Nano

  • L’arquitectura es basa en la comunicació I2C.
  • Vaig escollir dedicar-li un Nano pel fet que l’Atmega que fa funcionar el robot ja estava bastant carregat i aquesta arquitectura fa que sigui més fàcil reutilitzar-lo en altres llocs.
  • El Nano llegeix els registres BNO055, calcula i emmagatzema l'encapçalament i la localització en els seus propis registres.
  • L'Arduino Atmega que executa el codi del robot, envia informació de codificadors de rodes al Nano i llegeix els encapçalaments i la localització dels registres Nano.

Hi ha disponible el codi subsytem (Nano) aquí a GitHub

L'eina de calibratge d'Adafruit si és aquí a GitHub (el calibratge s'emmagatzemarà a eeproom)

Pas 6: què he après?

Quant a I2C

En primer lloc, he intentat tenir 2 mestres (Arduino) i 1 esclau (sensor) al mateix bus, però al final és possible i fàcil establir només el Nano com a mestre i utilitzar la connexió GPIO entre els 2 Arduinos per "sol·licitar el testimoni"..

Respecte a BNO055 per a orientació 2D

Puc concentrar-me en 3 modes de funcionament diferents: NDOF (combinar giroscopi, acceleròmetre i Compas) quan el robot està inactiu, IMU (combinar giroscopi, acceleròmetre) quan el robot es mou i Brúixola durant la fase de localització. Canviar entre aquests modes és fàcil i ràpid.

Per reduir la mida del codi i mantenir la possibilitat d'utilitzar la interrupció BNO055 per detectar col·lisions, prefereixo no fer servir la biblioteca Adafruit i fer-ho pel meu compte.

Recomanat: