Sommario:
- Passaggio 1: perché utilizzare un'unità di misura inerziale?
- Passaggio 2: come utilizzare BNO055 per la localizzazione 2D?
- Passaggio 3: punto di vista hardware
- Passaggio 4: come funziona?
- Passaggio 5: l'architettura e il software
- Passaggio 6: cosa ho imparato?
Video: Un modo per utilizzare un'unità di misura inerziale?: 6 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
Il contesto:
Sto costruendo per divertimento un robot che voglio muovere autonomamente all'interno di una casa.
È un lavoro lungo e lo sto facendo passo dopo passo.
Ho già pubblicato 2 istruttori su quell'argomento:
- uno sulla creazione di un codificatore a ruota
- uno sulla connessione wifi
Il mio robot è guidato da 2 motori CC con l'aiuto del mio codificatore a ruota fatto in casa.
Attualmente sto migliorando il controllo del movimento e ho passato un po' di tempo con giroscopio, accelerometro e IMU. Mi farebbe piacere condividere questa esperienza.
Vuoi saperne di più sulla localizzazione? Ecco un articolo su come combinare intelligenza artificiale e ultrasuoni per localizzare il robot
Passaggio 1: perché utilizzare un'unità di misura inerziale?
Allora perché ho usato un IMU?
La prima ragione era che se l'encoder della ruota è abbastanza preciso da controllare il movimento rettilineo, anche dopo la messa a punto non sono stato in grado di ottenere una precisione per la rotazione inferiore a +- 5 gradi e questo non è sufficiente.
Quindi ho provato 2 sensori diversi. Per prima cosa utilizzo un magnetometro (LSM303D). Il principio era semplice: prima della rotazione ottenere l'orientamento nord, calcolare l'obiettivo e regolare lo spostamento fino a raggiungere l'obiettivo. Era un po' meglio che con l'encoder ma con troppa dispersione. Successivamente ho provato a utilizzare un giroscopio (L3GD20). Il principio era proprio quello di integrare la velocità di rotazione fornita dal sensore per calcolare la rotazione. E ha funzionato bene. Sono stato in grado di controllare la rotazione a +- 1 grado.
Tuttavia ero curioso di provare qualche IMU. Scelgo un componente BNO055. Ho passato un po' di tempo per capire e testare questa IMU. Alla fine ho deciso di selezionare questo sensore per i seguenti motivi
- Posso controllare la rotazione così come con L3GD20
- Riesco a rilevare una leggera rotazione quando ci si sposta in linea retta
- Ho bisogno di ottenere l'orientamento nord per la localizzazione del robot e la calibrazione della bussola del BNO055 è molto semplice
Passaggio 2: come utilizzare BNO055 per la localizzazione 2D?
BNO055 IMU è un sensore intelligente a 9 assi Bosch che potrebbe fornire un orientamento assoluto.
La scheda tecnica fornisce una documentazione completa. È un componente ad alta tecnologia è un prodotto piuttosto complesso e ho passato alcune ore per imparare come funziona e provare diversi modi di usarlo.
Penso che potrebbe essere utile condividere questa esperienza.
Per prima cosa ho utilizzato la libreria Adafruit che fornisce un buon strumento per calibrare e scoprire il sensore.
Alla fine e dopo tante prove ho deciso di
- usa la libreria Adafruit solo per salvare la calibrazione
- utilizzare 3 di tutte le possibili modalità di BNO055 (NDOF, IMU, Compss)
- dedicare un Arduino Nano per calcolare la localizzazione basata su misurazioni BNO055
Passaggio 3: punto di vista hardware
BNO055 è un componente I2C. Quindi ha bisogno di alimentazione, SDA e SCL per comunicare.
Basta fare attenzione alla tensione Vdd in base al prodotto che hai acquistato. Il chip Bosch funziona nella gamma: da 2,4 V a 3,6 V e puoi trovare componenti da 3,3 V e 5 V.
Non ci sono difficoltà per collegare il Nano e il BNO055.
- Il BNO055 è alimentato dal Nano
- SDA e SCL sono collegati con resistori di pull-up 2 x 2k.
- 3 LED collegati al Nano per diagnosi (con resistenze)
- 2 connettori utilizzati per definire la modalità dopo l'avvio
- 1 connettore verso il BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 connettore verso Robot/Mega (+9V, Gnd, sda, Scl, Pin11, Pin12)
Un po' di saldatura e il gioco è fatto!
Passaggio 4: come funziona?
Dal punto di vista della comunicazione:
- Il Nano è il master del bus I2C
- Il Robot/Mega e il BNO055 sono slave I2C
- Il Nano legge permanentemente i registri BNO055
- Il Robot/Mega emette un segnale numerico per richiedere la parola al Nano
Dal punto di vista del calcolo: il Nano combinato con il BNO055 offre
- La direzione della bussola (usata per la localizzazione)
- Un titolo relativo (usato per controllare le rotazioni)
- La rotta e la posizione assolute (utilizzate per controllare le mosse)
Dal punto di vista funzionale: Il Nano:
- gestisce la calibrazione BNO055
- gestisce i parametri e i comandi del BNO055
Il sottosistema Nano & BNO055:
- calcolare per ogni ruota robot la rotta assoluta e la localizzazione (con un fattore di scala)
- calcolare la rotta relativa durante la rotazione del robot
Passaggio 5: l'architettura e il software
Il software principale è in esecuzione su un Arduino Nano
- L'architettura si basa sulla comunicazione I2C.
- Ho scelto di dedicare un Nano per il fatto che l'Atmega che gestisce il robot era piuttosto già caricato e questa architettura lo rende più facile da riutilizzare altrove.
- Il Nano legge i registri BNO055, calcola e memorizza l'intestazione e la localizzazione nei propri registri.
- L'Arduino Atmega che esegue il codice del robot, invia le informazioni degli encoder delle ruote al Nano e legge le intestazioni e la localizzazione all'interno dei registri Nano.
Il codice del sottosistema (Nano) è disponibile qui su GitHub
Lo strumento di calibrazione Adafruit se qui su GitHub (la calibrazione verrà archiviata su eeproom)
Passaggio 6: cosa ho imparato?
Per quanto riguarda I2C
Per prima cosa ho provato ad avere 2 master (Arduino) e 1 slave (sensore) sullo stesso bus ma alla fine è possibile e più semplice impostare solo il Nano come master e utilizzare la connessione GPIO tra i 2 Arduino per "richiedere il token".
Per quanto riguarda BNO055 per l'orientamento 2D
Posso concentrarmi su 3 diverse modalità di funzionamento: NDOF (combina giroscopio, accelerometro e Compas) quando il robot è fermo, IMU (combina giroscopio, accelerometro) quando il robot è in movimento e Compass durante la fase di localizzazione. Il passaggio tra queste modalità è facile e veloce.
Per ridurre la dimensione del codice e mantenere la possibilità di utilizzare l'interrupt BNO055 per rilevare la collisione, preferisco non utilizzare la libreria Adafruit e farlo da solo.
Consigliato:
Come creare un'unità flash USB utilizzando una gomma - Custodia per unità USB fai da te: 4 passaggi
Come creare un'unità flash USB utilizzando una gomma | Custodia per unità USB fai-da-te: questo blog tratta di "Come realizzare un'unità flash USB utilizzando una gomma | Custodia per unità USB fai da te" Spero ti piaccia
ARUPI - un'unità di registrazione automatizzata a basso costo/unità di registrazione autonoma (ARU) per ecologisti del paesaggio sonoro: 8 passaggi (con immagini)
ARUPI - un'unità di registrazione automatizzata a basso costo/unità di registrazione autonoma (ARU) per ecologisti del paesaggio sonoro: questa istruzione è stata scritta da Anthony Turner. Il progetto è stato sviluppato con molto aiuto dallo Shed in the School of Computing, University of Kent (il signor Daniel Knox è stato di grande aiuto!). Ti mostrerà come costruire un sistema di registrazione audio automatizzato
Come utilizzare il terminale Mac e come utilizzare le funzioni chiave: 4 passaggi
Come utilizzare il terminale Mac e come utilizzare le funzioni chiave: ti mostreremo come aprire il terminale MAC. Ti mostreremo anche alcune funzionalità all'interno del Terminale, come ifconfig, il cambio di directory, l'accesso ai file e arp. Ifconfig ti permetterà di controllare il tuo indirizzo IP e il tuo annuncio MAC
Come creare un'unità USB avviabile senza utilizzare alcun software: 3 passaggi
Come creare un'unità USB avviabile senza utilizzare alcun software: per creare manualmente un'unità USB avviabile, utilizzeremo il prompt dei comandi come programma predefinito di Windows. Ecco i passaggi per creare un'unità USB avviabile come supporto di installazione di Windows. Per creare un'unità USB avviabile come installazione di Windows me
Il modo più semplice per modificare in modo soft una XBOX originale: 5 passaggi
Il modo più semplice per modificare in modo soft un XBOX originale: questo Instructable è preso da gh3tt0h4x0r su Youtube (compresi gli screencaps, dato che il mio Gamebridge era strano la notte in cui l'ho fatto). Il suo video in due parti mostra come è possibile eseguire una semplice installazione dell'XBMC (XBox Media Center) su una XBox senza la necessità