Sommario:

Costruisci il tuo robot Turtlebot!: 7 passaggi
Costruisci il tuo robot Turtlebot!: 7 passaggi

Video: Costruisci il tuo robot Turtlebot!: 7 passaggi

Video: Costruisci il tuo robot Turtlebot!: 7 passaggi
Video: ЧерепахаБот 4 | Картирование и навигация с помощью навигационного стека ROS 2 2024, Dicembre
Anonim
Costruisci il tuo robot Turtlebot!
Costruisci il tuo robot Turtlebot!
Costruisci il tuo robot Turtlebot!
Costruisci il tuo robot Turtlebot!
Costruisci il tuo robot Turtlebot!
Costruisci il tuo robot Turtlebot!

MODIFICARE:

Ulteriori informazioni relative al software e al controllo sono disponibili a questo link:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

Il link diretto al codice è:

github.com/MattMgn/foxbot_core

Perché questo progetto?

Turtlebot 3 è la piattaforma perfetta per approfondire l'elettronica, la robotica e persino l'intelligenza artificiale! Ti propongo di costruire il tuo turtlebot passo dopo passo con componenti convenienti senza sacrificare funzionalità e prestazioni. Con una cosa in mente: mantenere il meglio dal robot iniziale, la sua modularità, semplicità e l'enorme numero di pacchetti per la navigazione autonoma e l'intelligenza artificiale dalla comunità open source.

Questo progetto è un'opportunità per i principianti di acquisire nozioni di elettronica, meccanica e informatica, e per i più esperti di ottenere una potente piattaforma per testare e sviluppare algoritmi di intelligenza artificiale.

Cosa scoprirai in questo progetto?

Stai per scoprire quali parti meccaniche ed elettroniche essenziali devono essere mantenute dal bot originale per garantire la completa compatibilità.

L'intero processo di costruzione sarà dettagliato: dalla stampa delle parti 3D, all'assemblaggio e ai vari componenti, alla saldatura e all'integrazione dell'elettronica, fino alla compilazione del codice su Arduino. Questo tutorial si concluderà con un esempio di "ciao mondo" per familiarizzare con ROS. Se qualcosa non ti è chiaro, sentiti libero di fare una domanda!

Forniture

Elettronica:

1 x computer a scheda singola per eseguire ROS, ad esempio potrebbe essere un Raspberry Pi o un Jetson Nano

1 x Arduino DUE, potresti anche usare un UNO o un MEGA

1 x Proto-board che si adatta al pin-out Arduino DUE disponibile qui

2 motori da 12 V CC con encoder (opzione 100 giri/min)

1 x driver del motore L298N

Regolatore 2x5V

1 x batteria (batteria LiPo 3S/4S per esempio)

2 x interruttori ON/OFF

2 x LED

2 resistenze da 470kOhm

Connettori JST 3 x 4 pin

1 x cavo USB (almeno uno tra SBC e Arduino)

Sensori:

1 x sensore di corrente (opzionale)

1 x 9 gradi di libertà IMU (opzionale)

1 x LIDAR (opzionale)

Telaio:

16 x piastre modulari Turtlebot (che possono anche essere stampate in 3D)

2 x ruote da 65 mm di diametro (opzione di larghezza 6 mm)

4 x distanziatori in nylon da 30 mm (opzionale)

20 x M3 inserti (opzionale)

Altri:

fili

Viti e inserti M2.5 e M3

Stampante 3D o qualcuno che può stampare le parti per te

Un trapano a mano con un set di punte come questo

Passaggio 1: descrizione

Descrizione
Descrizione
Descrizione
Descrizione

Questo robot è un semplice azionamento differenziale che utilizza 2 ruote montate direttamente sul motore e una ruota orientabile posizionata nella parte posteriore per evitare che il robot cada. Il robot è diviso in due strati:

il Bottom Layer: con il gruppo di propulsione (batteria, controllore motore e motori), e l'elettronica 'basso livello': microcontrollore Arduino, regolatore di tensione, interruttori…

l'Upper Layer: con l'elettronica di "alto livello" ovvero il Single Board Computer e il LIDAR

Questi strati sono collegati con parti stampate e viti per garantire la robustezza della struttura.

Schema elettronico

Lo schema potrebbe apparire un po' disordinato. È un disegno schematico e non rappresenta tutti i cavi, i connettori e la scheda proto, ma può essere letto come segue:

Una batteria 3S Litihum Ion Polymer con capacità 3000mAh alimenta il primo circuito, alimenta sia la scheda del controller del motore (L298N) che un primo regolatore da 5V per encoder motore e Arduino. Questo circuito è abilitato tramite un interruttore con un LED che ne indica lo stato ON/OFF.

La stessa batteria alimenta un secondo circuito, la tensione in ingresso viene convertita a 5V per alimentare il Single Board Computer. Anche qui il circuito è abilitato tramite un interruttore e un LED.

Sensori aggiuntivi come un LIDAR o una fotocamera possono quindi essere aggiunti direttamente sul Raspberry Pi tramite USB o la porta CSI.

Disegno meccanico

Il telaio del robot è composto da 16 parti identiche che formano 2 strati quadrati (larghezza 28 cm). I numerosi fori consentono di montare parti aggiuntive ovunque ne hai bisogno e offrono un design modulare completo. Per questo progetto, ho deciso di prendere le piastre originali TurtleBot3 ma puoi anche stamparle in 3D poiché il loro design è open source.

Passaggio 2: assemblaggio del blocco motore

Gruppo blocco motore
Gruppo blocco motore
Gruppo blocco motore
Gruppo blocco motore
Gruppo blocco motore
Gruppo blocco motore

Preparazione del motore

Il primo passo consiste nell'aggiungere un nastro di schiuma di 1 mm di spessore attorno a ciascun motore per evitare vibrazioni e rumore quando il motore gira.

Parti stampate

Il supporto del motore risulta in due parti che afferrano il motore come una morsa. 4 viti ottenute per serrare il motore nel supporto.

Ogni supporto è composto da più fori che ospitano inserti M3 da montare sulla struttura. Ci sono più fori di quelli effettivamente necessari, i fori extra potrebbero eventualmente essere utilizzati per montare parti extra.

Impostazioni della stampante 3D: tutte le parti vengono stampate con i seguenti parametri

  • Ugello da 0,4 mm di diametro
  • Materiale di riempimento del 15%
  • Strato di altezza 0,2 mm

Ruota

Le ruote scelte sono ricoperte di gomma per massimizzare l'aderenza e garantire condizioni di rotolamento senza slittamenti. Una vite di bloccaggio mantiene la ruota montata sull'albero motore. Il diametro della ruota dovrebbe essere sufficientemente grande da attraversare piccoli gradini e irregolarità del terreno (quelle ruote hanno un diametro di 65 mm).

Fissazione

Quando hai finito con un blocco motore, ripeti le operazioni precedenti e poi fissali semplicemente nello strato con viti M3.

Passaggio 3: interruttori e preparazione dei cavi

Interruttori e preparazione dei cavi
Interruttori e preparazione dei cavi
Interruttori e preparazione dei cavi
Interruttori e preparazione dei cavi
Interruttori e preparazione dei cavi
Interruttori e preparazione dei cavi

Preparazione cavo motore

Generalmente il motore-encoder viene fornito con un cavo che include da un lato un connettore a 6 pin che collega il retro del PCB dell'encoder e fili scoperti dall'altro.

Hai la possibilità di saldarli direttamente sulla tua scheda proto o anche sul tuo Arduino, ma ti consiglio di utilizzare invece connettori femmina e connettori JST-XH. In questo modo puoi collegarli/scollegarli dalla tua scheda proto e semplificare il tuo assemblaggio.

Suggerimenti: puoi aggiungere una treccia di guaina espandibile attorno ai fili e pezzi di tubo termoretraibile vicino ai connettori, in questo modo otterrai un cavo "pulito".

Interruttore e LED

Per abilitare i due circuiti di potenza, preparare 2 cavi LED e interruttori: saldare prima una resistenza da 470kOhm su uno dei pin del LED, quindi saldare il LED su uno dei pin dell'interruttore. Anche qui puoi usare un pezzo di tubo termoretraibile per nascondere la resistenza all'interno. Fare attenzione a saldare il LED nella giusta direzione! Ripetere questa operazione per ottenere due cavi switch/led.

Assemblea

Assemblare i cavi precedentemente realizzati sulla parte stampata in 3D corrispondente. Usa un dado per mantenere l'interruttore, i LED non richiedono colla, basta forzare abbastanza per inserirlo nel foro.

Passaggio 4: cablaggio delle schede elettroniche

Cablaggio Schede Elettroniche
Cablaggio Schede Elettroniche
Cablaggio Schede Elettroniche
Cablaggio Schede Elettroniche
Cablaggio Schede Elettroniche
Cablaggio Schede Elettroniche

Layout delle schede

Una proto-scheda adatta al layout della scheda Arduino viene utilizzata per ridurre il numero di fili. Sulla parte superiore della scheda proto, l'L298N è impilato con un'intestazione femmina Dupont (Dupont sono intestazioni "simili ad Arduino").

Preparazione L298N

Originariamente, la scheda L298N non viene fornita con l'intestazione Dupont maschio corrispondente, è necessario aggiungere una riga di 9 pin sotto la scheda. È necessario realizzare 9 fori con punta da 1 mm di diametro in parallelo ai fori esistenti come si può vedere in foto. Quindi collegare i pin corrispondenti delle 2 file con materiali di saldatura e fili corti.

Piedinatura L298N

L298N è composto da 2 canali che consentono il controllo della velocità e della direzione:

direzione tramite 2 uscite digitali, denominate IN1, IN2 per il primo canale, e IN3 e IN4 per il secondo

velocità tramite 1 uscita digitale, denominata ENA per il primo canale e ENB per il secondo

Ho scelto il seguente pin-out con Arduino:

motore sinistro: IN1 su pin 3, IN2 su pin 4, ENA su pin 2

motore destro: IN3 su pin 5, IN4 su pin 6, ENB su pin 7

Regolatore 5V

Anche se l'l298N è normalmente in grado di fornire 5V, aggiungo comunque un piccolo regolatore. Alimenta Arduino tramite la porta VIN e i 2 encoder sui motori. È possibile saltare questo passaggio utilizzando direttamente il regolatore L298N 5V integrato.

Connettori JST e pin-out Encoder

Utilizzare adattatori per connettori JST-XH femmina a 4 pin, ciascun connettore è quindi collegato a:

  • 5V dal regolatore
  • un terreno
  • due ingressi digitali (ad esempio: 34 e 38 per l'encoder destro e 26 e 30 per quello sinistro)

I2C. in più

Come avrai notato, c'è un connettore JST a 4 pin extra sulla scheda proto. Viene utilizzato per collegare il dispositivo I2C come un IMU, puoi fare lo stesso e persino aggiungere la tua porta.

Passaggio 5: gruppo motore e Arduino sul livello inferiore

Motor Group e Arduino sullo strato inferiore
Motor Group e Arduino sullo strato inferiore
Motor Group e Arduino sullo strato inferiore
Motor Group e Arduino sullo strato inferiore
Motor Group e Arduino sullo strato inferiore
Motor Group e Arduino sullo strato inferiore

Fissaggio dei blocchi motore

Una volta che lo strato inferiore è stato assemblato con le 8 piastre del Turtlebot, è sufficiente utilizzare 4 viti M3 direttamente negli inserti per mantenere i blocchi motore. Quindi è possibile collegare i cavi di alimentazione del motore alle uscite L298N e i cavi precedentemente realizzati ai connettori JST della scheda proto.

Distribuzione dell'energia

La distribuzione dell'energia è realizzata semplicemente con una morsettiera a barriera. Su un lato della barriera è avvitato un cavo con spina femmina XT60 per il collegamento alla batteria LiPo. Dall'altro lato, i nostri due cavi LED/switch precedentemente saldati sono avvitati. Quindi ogni circuito (Motore e Arduino) potrebbe essere abilitato con il proprio interruttore e il corrispondente LED verde.

Gestione dei cavi

Presto avrai a che fare con un sacco di cavi! Per ridurre l'aspetto disordinato, puoi utilizzare il "tavolo" precedentemente stampato in 3D. Sul tavolo, mantieni le tue schede elettroniche con nastro biadesivo e sotto il tavolo lascia che i fili scorrano liberamente.

Manutenzione della batteria

Per evitare l'espulsione della batteria durante la guida del tuo robot, puoi semplicemente utilizzare un elastico per capelli.

Rotella a rulli

Non proprio un roller caster ma una semplice mezza sfera fissata con 4 viti sullo strato inferiore. È sufficiente per garantire la stabilità del robot.

Passaggio 6: computer a scheda singola e sensori sullo strato superiore

Computer a scheda singola e sensori sullo strato superiore
Computer a scheda singola e sensori sullo strato superiore
Computer a scheda singola e sensori sullo strato superiore
Computer a scheda singola e sensori sullo strato superiore
Computer a scheda singola e sensori sullo strato superiore
Computer a scheda singola e sensori sullo strato superiore

Quale computer a scheda singola scegliere?

Non ho bisogno di presentarvi il famoso Raspberry Pi, il suo numero di casi d'uso supera ampiamente il campo della robotica. Ma c'è uno sfidante molto più potente per il Raspberry Pi che potresti ignorare. Infatti il Jetson Nano di Nvidia incorpora una potente scheda grafica a 128 core oltre al suo processore. Questa particolare scheda grafica è stata sviluppata per accelerare attività computazionali costose come l'elaborazione di immagini o l'inferenza della rete neurale.

Per questo progetto ho scelto il Jetson Nano e puoi trovare la parte 3D corrispondente tra i file allegati, ma se vuoi andare con il Raspberry Pi ci sono molti casi stampabili qui.

Regolatore 5V

Qualunque sia la scheda che hai deciso di portare sul tuo robot, hai bisogno di un regolatore 5V. L'ultimo Raspberry Pi 4 richiede 1,25 A max ma Jetson Nano richiede fino a 3 A sotto stress, quindi ho optato per il Pololu 5V 6A per avere una riserva di carica per i componenti futuri (sensori, luci, stepper…), ma qualsiasi 5V 2A economico dovrebbe andare bene il lavoro. Il Jetson usa un barilotto CC da 5,5 mm e il Pi una micro USB, prendi il cavo corrispondente e saldalo all'uscita del regolatore.

Layout LIDAR

Il LIDAR usato qui è l'LDS-01, ci sono vari altri LIDAR 2D che potrebbero essere usati come RPLidar A1/A2/A3, YDLidar X4/G4 o anche Hokuyo LIDAR. L'unico requisito è che debba essere collegato tramite USB e posizionato al centro sopra la struttura. Infatti, se il LIDAR non è ben centrato, la mappa creata dall'algoritmo SLAM può spostare la posizione stimata di muri e ostacoli dalla loro posizione reale. Inoltre, se eventuali ostacoli del robot attraversano il raggio laser, ridurranno la portata e il campo visivo.

Montaggio LIDAR

Il LIDAR è montato su una parte stampata in 3D che ne segue la forma, la parte stessa è tenuta su una piastra rettangolare (in realtà in compensato nella foto ma potrebbe anche essere stampata in 3D). Una parte adattatrice permette poi di fissare l'insieme sulla piastra superiore della tartaruga con distanziali in nylon.

Fotocamera come sensore aggiuntivo o sostituzione LIDAR

Se non vuoi spendere troppi soldi in una LIDAR (che costa circa 100$), scegli una fotocamera: esistono anche algoritmi SLAM che funzionano solo con una fotocamera RGB monoculare. Entrambi gli SBC accettano fotocamere USB o CSI.

Inoltre, la fotocamera ti consentirà di eseguire script di visione artificiale e rilevamento di oggetti!

Assemblea

Prima di chiudere il robot, far passare i cavi attraverso i fori più grandi della piastra superiore:

  • il cavo corrispondente dal regolatore 5V al tuo SBC
  • il cavo USB dalla porta di programmazione dell'Arduino DUE (il più vicino al barilotto DC) a una porta USB del tuo SBC

Quindi tenere in posizione la piastra superiore con una dozzina di viti. Il tuo robot è ora pronto per essere programmato, BEN FATTO!

Passaggio 7: fallo muovere

Compila Arduino

Apri il tuo IDE Arduino preferito e importa la cartella del progetto chiamata own_turtlebot_core, quindi seleziona la tua scheda e la porta corrispondente, puoi fare riferimento a questo eccellente tutorial.

Regola le impostazioni principali

Il progetto è composto da due file e uno deve essere adattato al tuo robot. Quindi apriamo own_turtlebot_config.h e scopriamo quali linee richiedono la nostra attenzione:

#define ARDUINO_DUE // ** COMMENTA QUESTA RIGA SE NON UTILIZZANDO UN DUE **

Dovrebbe essere usato solo con Arduino DUE, se non commentare la riga.

#define RATE_CONTROLLER_KP 130.0 // ** REGOLA QUESTO VALORE **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** REGOLA QUESTO VALORE ** #define RATE_CONTROLLER_KI 0.00005 // ** REGOLA QUESTO VALORE **

Questi 3 parametri corrispondono ai guadagni del regolatore di velocità utilizzati dal PID per mantenere la velocità desiderata. A seconda della tensione della batteria, della massa del robot, del diametro della ruota e dell'ingranaggio meccanico del tuo motore, dovrai adattare i loro valori. PID è un controller classico e non sarai dettagliato qui, ma questo collegamento dovrebbe darti abbastanza input per sintonizzare il tuo.

/* Definisci i pin */

// motore A (destra) const byte motorRightEncoderPinA = 38; // ** MODIFICA CON IL TUO PIN NB ** const byte motorRightEncoderPinB = 34; // ** MODIFICA CON IL TUO PIN NB ** const byte enMotorRight = 2; // ** MODIFICA CON IL TUO PIN NB ** const byte in1MotorRight = 4; // ** MODIFICA CON IL TUO PIN NB ** const byte in2MotorRight = 3; // ** MODIFICA CON IL TUO PIN NB ** // motore B (sinistra) const byte motorLeftEncoderPinA = 26; // ** MODIFICA CON IL TUO PIN NB ** const byte motorLeftEncoderPinB = 30; // ** MODIFICA CON IL TUO PIN NB ** const byte enMotorLeft = 7; // ** MODIFICA CON IL TUO PIN NB ** const byte in1MotorLeft = 6; // ** MODIFICA CON IL TUO PIN NB ** const byte in2MotorLeft = 5; // ** MODIFICA CON IL TUO PIN NB **

Questo blocco definisce il pinout tra L298N e Arduino, modifica semplicemente il numero di pin in modo che corrisponda al tuo. Quando hai finito con il file di configurazione, compila e carica il codice!

Installa e configura ROS

Una volta raggiunto questo passaggio, le istruzioni sono esattamente le stesse descritte nell'ottimo manuale di TurtleBot3, che devi seguire scrupolosamente

ben fatto TurtleBot 3 è ora tuo e puoi eseguire tutti i pacchetti e tutorial esistenti con ROS.

Ok ma cos'è il ROS?

ROS sta per Robots Operating System, all'inizio potrebbe sembrare abbastanza complesso ma non lo è, immagina solo un modo di comunicazione tra hardware (sensori e attuatori) e software (algoritmi di navigazione, controllo, computer vision…). Ad esempio, puoi facilmente scambiare il tuo LIDAR attuale con un altro modello senza interrompere la configurazione, perché ogni LIDAR pubblica lo stesso messaggio LaserScan. ROS è ampiamente utilizzato è la robotica, Esegui il tuo primo esempio

L'equivalente di 'ciao mondo' per ROS consiste nel teleoperare il tuo robot attraverso il computer remoto. Quello che vuoi fare è inviare comandi di velocità per far girare i motori, i comandi seguono questo tubo:

  • un nodo turtlebot_teleop, in esecuzione sul computer remoto, pubblica un argomento "/cmd_vel" incluso un messaggio Twist
  • questo messaggio viene inoltrato tramite la rete di messaggi ROS all'SBC
  • un nodo seriale permette di ricevere su Arduino il "/cmd_vel"
  • l'Arduino legge il messaggio e imposta la velocità angolare su ciascun motore in modo che corrisponda alla velocità lineare e angolare desiderata del robot

Questa operazione è semplice e può essere eseguita eseguendo le righe di comando elencate sopra! Se vuoi informazioni più dettagliate guarda il video.

[SBC]

roscore

[SBC]

rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=115200

[Computer remoto]

esporta TURTLEBOT3_MODEL=${TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Andare oltre

Devi sapere un'ultima cosa prima di provare tutti gli esempi ufficiali, nel manuale ogni volta che affronti questo comando:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

devi invece eseguire questo comando sul tuo SBC:

rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=115200

E se hai un LIDAR esegui il comando associato sul tuo SBC, nel mio caso eseguo un LDS01 con la riga seguente:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

E questo è tutto, hai definitivamente costruito il tuo turtlebot:) Sei pronto per scoprire le fantastiche capacità di ROS e per codificare algoritmi di visione e apprendimento automatico.

Consigliato: