Sommario:

Robot che segue la linea avanzato: 22 passaggi (con immagini)
Robot che segue la linea avanzato: 22 passaggi (con immagini)

Video: Robot che segue la linea avanzato: 22 passaggi (con immagini)

Video: Robot che segue la linea avanzato: 22 passaggi (con immagini)
Video: Ucraino continua a divertirsi in spiaggia nonostante le bombe russe a Berdyansk 2024, Dicembre
Anonim
Image
Image
Prototipazione - Perfboard
Prototipazione - Perfboard

Questo è un robot che segue la linea avanzato basato su Teensy 3.6 e sensore di linea QTRX che ho costruito e su cui ho lavorato per un po' di tempo. Ci sono alcuni importanti miglioramenti nel design e nelle prestazioni della mia prima linea che segue il robot. La velocità e la risposta del robot sono migliorate. La struttura complessiva è compatta e leggera. I componenti sono disposti vicino all'asse della ruota in modo da minimizzare il momento angolare. I motoriduttori in micrometallo ad alta potenza forniscono la coppia adeguata e le ruote in silicone con mozzo in alluminio offrono la trazione tanto necessaria alle alte velocità. Lo scudo dell'elica e gli encoder delle ruote consentono al robot di determinarne la posizione e l'orientamento. Con Teensyview montato a bordo è possibile visualizzare tutte le informazioni rilevanti e aggiornare i parametri importanti del programma tramite pulsanti.

Per iniziare a costruire questo robot, avrai bisogno dei seguenti materiali (e molto tempo e pazienza a tua disposizione).

Forniture

Elettronica

  • Scheda di sviluppo di Teensy 3.6
  • Prop Shield con sensori di movimento
  • Sparkfun TeensyView
  • Matrice di sensori di riflettanza Pololu QTRX-MD-16A
  • PCB prototipo a doppia faccia da 15x20 cm
  • Regolatore di tensione Step-Up/Step-Down Pololu S9V11F3S5
  • Regolatore di tensione regolabile 4-5-20V Pololu U3V70A
  • MP12 6V 1580 rpm micro motoriduttore con encoder (x2)
  • DRV8833 Supporto per driver a doppio motore (x2)
  • Batteria Li-Po da 3,7 V, 750 mAh
  • Interruttore ON/OFF
  • Condensatore elettrolitico 470uF
  • Condensatore elettrolitico 1000uF (x2)
  • Condensatore ceramico 0.1uF (x5)
  • Pulsanti (x3)
  • LED verde da 10 mm (x2)

Hardware

  • Ruota in silicone Atom 37x34mm (x2)
  • Ruota Pololu con sfera in metallo da 3/8"
  • Supporto motore N20 (x2)
  • Bullone e dadi

Cavi e connettori

  • Cavi flessibili 24AWG
  • 24 pin da FFC a DIP breakout e cavo FFC (Tipo A, lunghezza 150 mm)
  • Intestazione pin femmina rotonda
  • Terminale lungo con connettore femmina rotondo
  • Testata femmina a doppia fila ad angolo retto
  • Testata maschio a doppia fila ad angolo retto
  • Intestazione perno maschio
  • Intestazione del perno dell'ago maschio

Utensili

  • Multimetro
  • Saldatore
  • Filo di saldatura
  • Spelafili
  • Tronchese

Fase 1: Panoramica dei sistemi

Come con il mio precedente progetto di un robot autobilanciante, questo robot è un assemblaggio di schede breakout montate su una perfboard che ha anche lo scopo di una struttura.

I principali sistemi del robot sono descritti di seguito.

Microcontrollore: scheda di sviluppo Teensy 3.6 con processore ARM Cortex-M4 a 32 bit e 180 MHz.

Sensore di linea: array di sensori di linea di uscita analogica a 16 canali QTRX-MD-16A di Pololu con disposizione a media densità (passo del sensore da 8 mm).

Azionamento: 6V, 1580rpm, motoriduttori micrometallici ad alta potenza con encoder magnetico e ruote in silicone montate su mozzi in alluminio.

Odometria: coppie di encoder magnetici a ruota per la stima delle coordinate e della distanza percorsa.

Sensore di orientamento: scudo a puntello con sensori di movimento per stimare la posizione e la direzione del robot.

Alimentazione: batteria lipo da 3,7 V, 750 mAh come fonte di alimentazione. Il regolatore step-up/down da 3,3 V alimenta il microcontrollore, i sensori e il dispositivo di visualizzazione. Il regolatore step-up regolabile alimenta i due motori.

Interfaccia utente: Teensyview per la visualizzazione delle informazioni. Breakout a tre pulsanti per accettare gli input dell'utente. Due numeri di LED verdi da 10 mm di diametro per l'indicazione dello stato durante il funzionamento.

Passaggio 2: iniziamo a creare prototipi

Image
Image

Implementeremo il circuito di cui sopra sulla perfboard. Dobbiamo prima tenere pronte le nostre schede breakout saldando le intestazioni su di esse. Il video fornirà un'idea su quali intestazioni devono essere saldate su quali schede breakout.

Dopo aver saldato le intestazioni sulle schede breakout, impilare Teensyview e il pulsante breakout sopra Teensy.

Passaggio 3: prototipazione - Perfboard

Prototipazione - Perfboard
Prototipazione - Perfboard

Prendi il prototipo di perfboard a doppia faccia 15x20 cm e segna il confine con un pennarello indelebile come mostrato nell'immagine. Praticare fori di dimensione M2 per il montaggio della serie di sensori, della ruota orientabile e dei motoriduttori micrometallici nelle posizioni contrassegnate da un cerchio bianco. Successivamente taglieremo la perfboard lungo il confine dopo aver saldato e testato tutti i componenti.

Inizieremo la nostra prototipazione saldando i pin e le prese dell'intestazione sulla perfboard. Le schede breakout verranno successivamente inserite su queste intestazioni. Prestare molta attenzione alla posizione delle intestazioni sulla perfboard. Collegheremo tutti i fili in base a questo layout di intestazioni.

Fase 4: Prototipazione - Prop Shield

Prototipazione - Prop Shield
Prototipazione - Prop Shield
Prototipazione - Prop Shield
Prototipazione - Prop Shield
Prototipazione - Prop Shield
Prototipazione - Prop Shield
Prototipazione - Prop Shield
Prototipazione - Prop Shield

Salderemo prima le connessioni allo scudo dell'elica. Poiché utilizziamo solo i sensori di movimento dello scudo dell'elica, dobbiamo collegare solo i pin SCL, SDA e IRQ oltre ai pin 3V e di massa dello scudo dell'elica.

Una volta completata la connessione, inserire Teensy e prop shield e calibrare i sensori di movimento seguendo i passaggi indicati qui.

Passaggio 5: prototipazione: alimentazione e messa a terra

Prototipazione - Potenza e messa a terra
Prototipazione - Potenza e messa a terra

Saldare tutte le connessioni di alimentazione e di massa facendo riferimento all'immagine. Inserire tutte le schede breakout in posizione e garantire la continuità utilizzando un multimetro. Verificare i diversi livelli di tensione a bordo.

  • Tensione di uscita Li-Po (di solito tra 3V e 4.2V)
  • Tensione di uscita del regolatore step-up/down (3,3V)
  • Tensione di uscita del regolatore step-up regolabile (impostata su 6V)

Passaggio 6: prototipazione - Carrier driver motore

Prototipazione - Motor Driver Carrier
Prototipazione - Motor Driver Carrier
Prototipazione - Motor Driver Carrier
Prototipazione - Motor Driver Carrier
Prototipazione - Motor Driver Carrier
Prototipazione - Motor Driver Carrier

La scheda carrier driver dual motor DRV8833 può fornire 1.2A di corrente continua e 2A di picco per canale. Collegheremo i due canali in parallelo per pilotare un motore. Saldare le connessioni seguendo i passaggi seguenti.

  • Mettere in parallelo i due ingressi e le due uscite del supporto motore come mostrato in figura.
  • Collegare i cavi di controllo in ingresso al driver del motore.
  • Collegare un condensatore elettrolitico da 1000 uF e un condensatore ceramico da 0,1 uF attraverso i terminali Vin e Gnd delle due schede portanti.
  • Collegare un condensatore ceramico da 0,1 uF tra i terminali di uscita del driver del motore.

Passaggio 7: prototipazione - Intestazione dell'array di sensori di linea

Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea
Prototipazione - Header array di sensori di linea

Teensy 3.6 ha due ADC: ADC0 e ADC1 multiplexati a 25 pin accessibili. Possiamo accedere contemporaneamente a due pin qualsiasi dei due ADC. Collegheremo otto sensori di linea ciascuno ad ADC0 e ADC1. I sensori di numero pari saranno collegati ad ADC1 e i sensori di numero dispari ad ADC0. Saldare le connessioni seguendo i passaggi seguenti. Successivamente collegheremo il sensore di linea utilizzando l'adattatore e il cavo da FFC a DIP.

  • Collegare tutti i pin del sensore pari (16, 14, 12, 10, 8, 6, 4, 2) come mostrato nell'immagine. Instradare il filo per il collegamento del pin 12 del sensore attraverso il lato posteriore della perfboard.
  • Collegare il pin di controllo dell'emettitore (EVEN) al pin 30 di Teensy.
  • Collegare tutti i pin del sensore dispari (15, 13, 11, 9, 7, 5, 3, 1) come mostrato in figura.
  • Collegare un condensatore elettrolitico da 470uF tra Vcc e Gnd.

Se osservi attentamente i pin del sensore di linea e i corrispondenti pin dell'intestazione sulla perboard, noterai che la riga superiore del sensore di linea corrisponde alla riga inferiore dell'intestazione sulla perboard e viceversa. Questo perché quando colleghiamo il sensore di linea alla perfboard utilizzando intestazioni ad angolo retto a doppia fila, le righe si allineeranno correttamente. Mi ci è voluto un po' di tempo per capirlo e correggere le assegnazioni dei pin nel programma.

Fase 8: Prototipazione - Micro motoriduttore ed encoder

Prototipazione - Micro motoriduttore ed encoder
Prototipazione - Micro motoriduttore ed encoder
  • Fissare il micro motoriduttore in metallo con encoder utilizzando i supporti motore N20.
  • Collegare i cavi del motore e dell'encoder come mostrato in figura.
  • Encoder sinistro - Pin Teensy 4 e 0
  • Encoder destro - Pin Teensy 9 e 27

Passaggio 9: prototipazione - LED

Prototipazione - LED
Prototipazione - LED
Prototipazione - LED
Prototipazione - LED

I due LED indicano se il robot ha rilevato una svolta o meno. Ho usato un resistore in serie da 470 ohm per collegare i LED a Teensy.

  • Anodo LED sinistro al pin Teensy 6
  • Anodo LED destro al pin Teensy 8

Passaggio 10: prototipazione - Breakout

Image
Image
Prototipazione - Breakout
Prototipazione - Breakout

Ora che abbiamo completato tutte le nostre saldature sulla perfboard, possiamo tagliare con cura lungo il confine segnato sulla perfboard e rimuovere i pezzi extra di perfboard. Inoltre, collegare le due ruote e la ruota sterzante.

Inserire tutte le schede breakout nelle rispettive prese. Per l'inserimento del breakout FFC-DIP e per il fissaggio del sensore di linea QTRX-MD-16A, fare riferimento al video.

Passaggio 11: panoramica delle librerie software

Panoramica delle librerie software
Panoramica delle librerie software

Programmeremo il Teensy in Arduino IDE. Avremo bisogno di alcune librerie prima di iniziare. Le librerie che utilizzeremo sono:

  • Codificatore
  • Teensyview
  • EEPROM
  • ADC
  • NXPMotionSense

E alcuni che sono stati scritti appositamente per questo robot,

  • Premi il bottone
  • Sensore di linea
  • TeensyviewMenu
  • motori

Le librerie specifiche per questo robot sono discusse in dettaglio e sono disponibili per il download nei passaggi successivi.

Passaggio 12: spiegazione delle librerie - Pulsante

Questa libreria serve per interfacciare la breakout board a pulsante con il Teensy. Le funzioni utilizzate sono

PushButton(int leftButtonPin, int centerButtonPin, int rightButtonPin);

Chiamare questo costruttore creando un oggetto configura i pin del pulsante in modalità INPUT_PULLUP.

int8_t waitForButtonPress(void);

Questa funzione attende che venga premuto e rilasciato un pulsante e restituisce il codice della chiave.

int8_t getSingleButtonPress(void);

Questa funzione controlla se un pulsante viene premuto e rilasciato. Se sì, restituisce il codice della chiave altrimenti restituisce zero.

Passaggio 13: spiegazione delle librerie - Sensore di linea

LineSensor è la libreria per interfacciare l'array di sensori di linea con Teensy. Di seguito le funzioni utilizzate.

Sensore di linea (vuoto);

Chiamando questo costruttore creando un oggetto si inizializzano ADC0 e ADC1, legge i valori di soglia, minimo e massimo dalla EEPROM e configura i pin del sensore in modalità input e il pin di controllo dell'emettitore in modalità output.

void calibrate(uint8_t calibrazioneMode);

Questa funzione calibra i sensori di linea. La modalità di calibrazione può essere MIN_MAX o MEDIAN_FILTER. Questa funzione è spiegata in dettaglio in un passaggio successivo.

void getSensorsAnalog(uint16_t *sensorValue, modalità uint8_t);

Legge l'array di sensori in una delle tre modalità passate come argomento. La modalità è lo stato degli emettitori e può essere ON, OFF o TOGGLE. La modalità TOGGLE compensa le letture del sensore di riflettanza dovute alla luce ambientale. I sensori collegati ad ADC0 e ADC1 vengono letti in modo sincrono.

int getLinePosition(uint16_t *sensorValue);

Calcola la posizione dell'array di sensori sulla linea con il metodo della media ponderata.

uint16_t getSensorsBinary(uint16_t *sensorValue);

Restituisce una rappresentazione a 16 bit dello stato dei sensori. Uno binario indica che il sensore è oltre la linea e uno zero binario indica che il sensore è fuori linea.

uint8_t countBinary(uint16_t binaryValue);

Passando la rappresentazione a 16 bit dei valori dei sensori a questa funzione si restituisce il numero di sensori che sono oltre la linea.

void getSensorsNormalized(uint16_t *sensorValue, modalità uint8_t);

Legge i valori del sensore e vincola ciascun valore del sensore ai valori minimi e massimi corrispondenti. I valori del sensore vengono quindi mappati dal loro intervallo minimo e massimo corrispondente all'intervallo da 0 a 1000.

Passaggio 14: spiegazione delle biblioteche - TeensyviewMenu

TeensyviewMenu è la libreria dove è possibile accedere alle funzioni per il menu di visualizzazione. Di seguito le funzioni utilizzate.

TeensyViewMenu(void);

La chiamata a questo costruttore crea un oggetto di classe LineSensor, PushButton e TeensyView.

void intro(void);

Serve per navigare nel menu.

prova nulla (vuota);

Questo viene chiamato internamente all'interno del menu quando i valori del sensore di linea devono essere visualizzati su Teensyview per il test.

Passaggio 15: spiegazione delle biblioteche - Motori

Motors è la libreria utilizzata per pilotare i due motori. Di seguito le funzioni utilizzate.

Motori (vuoto);

La chiamata a questo costruttore creando un oggetto configura il controllo della direzione del motore e i pin di controllo PWM in modalità di uscita.

void setSpeed(int leftMotorSpeed, int rightMotorSpeed);

La chiamata a questa funzione guida i due motori a velocità passate come argomenti. Il valore della velocità può variare da -255 a +255 con segno negativo che indica che il senso di rotazione è invertito.

Passaggio 16: test - Odometria dell'encoder

Verificheremo i codificatori della ruota magnetica e visualizzeremo la posizione e la distanza percorsa dal robot.

Carica il DualEncoderTeensyview.ino. Il programma visualizza i tick dell'encoder su Teensyview. L'encoder incrementa se si sposta il robot in avanti e decrementa se lo si sposta indietro.

Ora carica il file EncoderOdometry.ino. Questo programma visualizza la posizione del robot in termini di coordinate x-y, visualizza la distanza totale percorsa in centimetri e l'angolo ruotato in gradi.

Per determinare la posizione dai tick dell'encoder, ho fatto riferimento all'implementazione di Dead Reckoning tramite odometria su un robot con servoazionamento differenziale R/C della Seattle Robotics Society.

Passaggio 17: test - Sensori di movimento Prop Shield

Assicurati di aver calibrato i sensori di movimento seguendo i passaggi menzionati qui.

Ora carica il file PropShieldTeensyView.ino. Dovresti essere in grado di vedere i valori dell'accelerometro, del giroscopio e del magnetometro di tutti e tre gli assi su Teensyview.

Passaggio 18: panoramica del programma

Il programma per il follower di linea avanzato è scritto in Arduino IDE. Il programma funziona nella seguente sequenza spiegata di seguito.

  • Vengono letti i valori memorizzati in EEPROM e viene visualizzato il menu.
  • Premendo LAUNCH, il programma entra nel ciclo.
  • Vengono letti i valori del sensore di linea normalizzati.
  • Il valore binario della posizione della linea si ottiene utilizzando i valori del sensore normalizzati.
  • Il conteggio del numero di sensori che sono oltre la linea viene calcolato dal valore binario della posizione della linea.
  • I tick dell'encoder vengono aggiornati e vengono aggiornati la distanza totale percorsa, le coordinate x-y e l'angolo.
  • Per diversi valori di conteggio binario che vanno da 0 a 16, viene eseguita una serie di istruzioni. Se il conteggio binario è compreso tra 1 e 5 e se i sensori che si trovano sulla linea sono adiacenti l'uno all'altro, viene chiamata la routine PID. La rotazione viene eseguita in altre combinazioni di valore binario e conteggio binario.
  • Nella routine PID (che di fatto è una routine PD), i motori vengono pilotati a velocità calcolate in base all'errore, alla variazione dell'errore, ai valori di Kp e Kd.

Il programma al momento non misura i valori di orientamento dallo scudo dell'elica. Questo è un lavoro in corso ed è in fase di aggiornamento.

Carica TestRun20.ino. Vedremo come navigare nel menu, regolare le impostazioni e come calibrare i sensori di linea nei prossimi passaggi a seguito dei quali testeremo il nostro robot.

Passaggio 19: navigazione nel menu e nelle impostazioni

Il menu ha le seguenti impostazioni che possono essere esplorate utilizzando i pulsanti sinistro e destro e selezionate utilizzando il pulsante centrale. Le impostazioni e le loro funzioni sono descritte di seguito.

  1. CALIBRATE: Per calibrare i sensori di linea.
  2. TEST: per visualizzare i valori del sensore di linea.
  3. LANCIO: per iniziare a seguire la linea.
  4. MAX SPEED: Per impostare il limite superiore della velocità del robot.
  5. ROTATE SPEED: Per impostare il limite superiore della velocità del robot quando esegue una svolta ovvero quando entrambe le ruote girano alla stessa velocità in direzioni opposte.
  6. KP: costante proporzionale.
  7. KD: Costante derivata.
  8. RUN MODE: Per selezionare tra due modalità operative - NORMALE e ACCL. In modalità NORMALE, il robot funziona a velocità predefinite corrispondenti ai valori di posizione della linea. In modalità ACCL, la VELOCITÀ MAX del robot è sostituita da VELOCITÀ ACCL nelle fasi predefinite del tracciato. Questo può essere utilizzato per accelerare il robot in tratti rettilinei della pista. Le seguenti impostazioni sono accessibili solo se RUN MODE è impostato su ACCL.
  9. DISTANZA GIRO: Per impostare la lunghezza totale del circuito di gara.
  10. ACCL SPEED: Per impostare la velocità di accelerazione del robot. Questa velocità sostituisce MAX SPEED nelle diverse fasi del tracciato come definito di seguito.
  11. NO. OF STAGES: Per impostare il numero di stadi in cui si utilizza ACCL SPEED.
  12. FASE 1: Per impostare le distanze di inizio e fine tappa in cui MAX SPEED è sostituito da ACCL SPEED. Per ogni tappa, le distanze di inizio e fine possono essere impostate separatamente.

Passaggio 20: calibrazione del sensore di linea

Image
Image

La calibrazione del sensore di linea è il processo mediante il quale viene determinato il valore di soglia di ciascuno dei 16 sensori. Questo valore di soglia viene utilizzato per decidere se un particolare sensore è oltre la linea o meno. Per determinare i valori di soglia di 16 sensori, utilizziamo uno dei due metodi.

FILTRO MEDIANO: In questo metodo, i sensori di linea sono posizionati sopra la superficie bianca e viene effettuato un numero predefinito di letture del sensore per tutti i 16 sensori. Vengono determinati i valori mediani di tutti e 16 i sensori. Lo stesso processo viene ripetuto dopo aver posizionato i sensori di linea sulla superficie nera. Il valore di soglia è la media dei valori medi delle superfici in bianco e nero.

MIN MAX: In questo metodo, i valori del sensore vengono letti ripetutamente finché l'utente non richiede un arresto. Vengono memorizzati i valori massimo e minimo incontrati da ciascun sensore. Il valore di soglia è la media dei valori minimo e massimo.

I valori di soglia così ottenuti sono mappati nell'intervallo da 0 a 1000.

La calibrazione dei sensori di linea con il metodo MIN MAX è mostrata nel video. Dopo aver calibrato i sensori di linea, i dati possono essere visualizzati come mostrato in figura. Vengono visualizzate le seguenti informazioni.

  • Una rappresentazione binaria a 16 bit della posizione della linea con un 1 binario che indica che il sensore di linea corrispondente è oltre la linea e uno 0 binario che indica che il sensore di linea è fuori linea.
  • Un conteggio del numero totale di sensori che sono oltre la linea.
  • Valori minimo, massimo e sensore (grezzi e normalizzati) dei 16 sensori, un sensore alla volta.
  • Posizione della linea nell'intervallo da -7500 a +7500.

I valori minimo e massimo del sensore di linea vengono quindi memorizzati in EEPROM.

Passaggio 21: esecuzione di prova

Image
Image

Il video è di una corsa di prova in cui il robot è programmato per fermarsi dopo aver completato un giro.

Passaggio 22: considerazioni finali e miglioramenti

Concorso Robot
Concorso Robot

L'hardware che viene messo insieme per costruire questo robot non viene utilizzato appieno dal programma che lo esegue. Molti miglioramenti potrebbero essere apportati alla parte del programma. I sensori di movimento dello scudo dell'elica non vengono attualmente utilizzati per determinare la posizione e l'orientamento. I dati di odometria degli encoder possono essere combinati con i dati di orientamento dello scudo dell'elica per determinare con precisione la posizione e la direzione del robot. Questi dati possono quindi essere utilizzati per programmare il robot per l'apprendimento della pista in più giri. Ti incoraggio a sperimentare su questa parte e a condividere i tuoi risultati.

Buona fortuna.

Concorso Robot
Concorso Robot

Secondo Premio al Concorso Robot

Consigliato: