Taula de continguts:

Construeix el teu propi robot Turtlebot !: 7 passos
Construeix el teu propi robot Turtlebot !: 7 passos

Vídeo: Construeix el teu propi robot Turtlebot !: 7 passos

Vídeo: Construeix el teu propi robot Turtlebot !: 7 passos
Vídeo: Taula rodona: Del virtual al tangible: els desafiaments de l'art digital en la nova dècada 2024, Juliol
Anonim
Construeix el teu propi robot Turtlebot!
Construeix el teu propi robot Turtlebot!
Construeix el teu propi robot Turtlebot!
Construeix el teu propi robot Turtlebot!
Construeix el teu propi robot Turtlebot!
Construeix el teu propi robot Turtlebot!

EDITAR:

Podeu obtenir més informació relacionada amb el programari i el control en aquest enllaç:

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

L’enllaç directe al codi és:

github.com/MattMgn/foxbot_core

Per què aquest projecte?

Turtlebot 3 és la plataforma perfecta per aprofundir en l’electrònica, la robòtica i fins i tot la IA. Et proposo que creïs el teu propi turtlebot pas a pas amb components assequibles sense sacrificar les funcions i el rendiment. Amb una cosa en ment: mantenir el millor del robot inicial, la seva modularitat, simplicitat i l'enorme nombre de paquets per a la navegació autònoma i la IA de la comunitat de codi obert.

Aquest projecte és una oportunitat per als principiants d’adquirir nocions d’electrònica, mecànica i ciències de la computació i per als més experimentats d’obtenir una plataforma potent per provar i desenvolupar algoritmes d’intel·ligència artificial.

Què descobriràs en aquest projecte?

Esteu a punt de descobrir quines parts mecàniques i electròniques essencials s’han de conservar del bot original per garantir una compatibilitat completa.

Es detallarà tot el procés de construcció: des de la impressió de peces 3D, el muntatge i els diversos components, la soldadura i la integració de components electrònics fins a la finalització de la compilació de codis a Arduino. Aquest instructiu conclourà amb un exemple de "hola world" per familiaritzar-vos amb ROS. Si alguna cosa sembla poc clara, no dubteu a fer-ne la pregunta.

Subministraments

Electrònica:

1 x ordinador de placa única per executar ROS, per exemple, pot ser un Raspberry Pi o un Jetson Nano

1 x Arduino DUE, també podeu utilitzar un UNO o un MEGA

1 x placa base que s’adapta al pin-out Arduino DUE disponible aquí

2 motors de 12 V CC amb codificadors (opció de 100 RPM)

1 controlador de motor L298N

Regulador de 2 x 5V

1 x bateria (per exemple, bateria LiPo 3S / 4S)

2 interruptors ON / OFF

2 x LED

2 x 470 kOhm resistències

Connectors JST de 3 x 4 pins

1 x cable USB (almenys un entre el SBC i l'Arduino)

Sensors:

1 x sensor de corrent (opcional)

1 x 9 graus de llibertat IMU (opcional)

1 x LIDAR (opcional)

Xassís:

16 plaques modulars Turtlebot (que també es poden imprimir en 3D)

2 x rodes de 65 mm de diàmetre (opció d'amplada de 6 mm)

4 x separadors de niló de 30 mm (opcional)

20 insercions M3 (opcional)

Altres:

Filferros

Cargols i insercions M2.5 i M3

Impressora 3D o algú que us pugui imprimir les peces

Un trepant manual amb un joc de broques com aquest

Pas 1: descripció

Descripció
Descripció
Descripció
Descripció

Aquest robot és un accionament diferencial senzill que utilitza 2 rodes muntades directament al motor i una roda rodant que es col·loca a la part posterior per evitar que el robot caigui. El robot es divideix en dues capes:

la capa inferior: amb el grup de propulsió (bateria, controlador de motors i motors), i l'electrònica de 'baix nivell': microcontrolador Arduino, regulador de tensió, interruptors …

la capa superior: amb l'electrònic d'alt nivell, és a dir, l'ordinador de placa única i el LIDAR

Aquestes capes s’uneixen amb peces i cargols impresos per garantir la robustesa de l’estructura.

Esquema electrònic

L'esquema pot semblar una mica desordenat. És un dibuix esquemàtic i no representa tots els cables, connectors i proto-placa, però es pot llegir de la següent manera:

Una bateria de polímer iònic 3S Litihum amb capacitat de 3000 mAh alimenta el primer circuit, alimenta tant la placa de controlador de motor (L298N) com un primer regulador de 5V per a codificadors de motors i Arduino. Aquest circuit s’activa mitjançant un interruptor amb un LED que indica el seu estat ON / OFF.

La mateixa bateria alimenta un segon circuit, el voltatge d'entrada es converteix a 5V per alimentar l'ordinador de placa única. Aquí també, el circuit s’activa mitjançant un interruptor i un LED.

A continuació, es poden afegir sensors addicionals com un LIDAR o una càmera directament al Raspberry Pi mitjançant el port USB o CSI.

Disseny mecànic

El marc del robot està compost per 16 parts idèntiques que formaven 2 capes quadrades (28 cm d’amplada). Els nombrosos forats permeten muntar peces addicionals allà on ho necessiteu i ofereixen un disseny modular complet. Per a aquest projecte, vaig decidir obtenir les plaques originals de TurtleBot3, però també les podeu imprimir en 3D, ja que el seu disseny és de codi obert.

Pas 2: Muntatge del bloc de motors

Muntatge del bloc de motors
Muntatge del bloc de motors
Muntatge del bloc de motors
Muntatge del bloc de motors
Muntatge del bloc de motors
Muntatge del bloc de motors

Preparació del motor

El primer pas és afegir cinta d'escuma d'1 mm de gruix al voltant de cada motor per evitar vibracions i sorolls quan el motor giri.

Parts impreses

El suport del motor es tradueix en dues parts que agafen el motor com un vici. 4 cargols aconseguits per ajustar el motor al suport.

Cada suport es compon de diversos forats que acullen insercions M3 per muntar a l'estructura. Hi ha més forats dels realment necessaris, els forats addicionals es podrien utilitzar per muntar una peça addicional.

Configuració de la impressora 3D: totes les parts s’imprimeixen amb els paràmetres següents

  • Broquet de 0,4 mm de diàmetre
  • 15% de farciment de material
  • Capa d’alçada de 0,2 mm

Roda

Les rodes escollides estan recobertes de goma per maximitzar l’adherència i garantir un rodament lliure de relliscades. Un cargol de subjecció manté la roda muntada a l’eix del motor. El diàmetre de la roda hauria de ser prou gran com per creuar irregularitats menors de graons i terra (aquestes rodes tenen un diàmetre de 65 mm).

Fixació

Quan hàgiu acabat amb un bloc de motor, repetiu les operacions anteriors i, simplement, fixeu-les a la capa amb cargols M3.

Pas 3: interruptors i preparació de cables

Preparació de commutadors i cables
Preparació de commutadors i cables
Preparació de commutadors i cables
Preparació de commutadors i cables
Preparació de commutadors i cables
Preparació de commutadors i cables

Preparació del cable del motor

En general, el motor-codificador ve amb un cable que inclou en un costat un connector de 6 pins que connecta la part posterior del PCB del codificador i cables nus a l’altre costat.

Teniu la possibilitat de soldar-los directament a la vostra placa de proto o fins i tot al vostre Arduino, però us recomano que feu servir capçaleres de pin femella i connectors JST-XH. D'aquesta manera, podeu endollar-los / desconnectar-los de la vostra placa proto i facilitar el muntatge.

Consells: podeu afegir una trena de màniga expandible al voltant dels cables i trossos de tub retràctil a prop dels connectors, de manera que obtindreu un cable "net".

Interruptor i LED

Per habilitar els dos circuits d'alimentació, prepareu 2 LED i canvieu els cables: al principi, soldeu una resistència de 470 kOhm en un dels pins LED, i després soldeu el LED en un dels pins del commutador. Aquí també podeu utilitzar un tros de tub retràctil per amagar la resistència a l'interior. Aneu amb compte de soldar el LED en la direcció correcta. Repetiu aquesta operació per obtenir dos cables de commutació / led.

muntatge

Muntar els cables fets anteriorment a la part impresa en 3D corresponent. Utilitzeu una femella per mantenir l’interruptor, ja que els LED no requereixen cola, sinó prou força per encabir-lo al forat.

Pas 4: Cablatge de les plaques electròniques

Cablejat de les plaques electròniques
Cablejat de les plaques electròniques
Cablejat de les plaques electròniques
Cablejat de les plaques electròniques
Cablejat de les plaques electròniques
Cablejat de les plaques electròniques

Disseny de taulers

Una proto-placa que s’adapta al disseny de la placa Arduino s’utilitza per reduir el nombre de cables. A la part superior del proto-tauler, el L298N està apilat amb capçalera femella Dupont (els Dupont són capçaleres "semblants a Arduino").

Preparació L298N

Originalment, la placa L298N no inclou la capçalera Dupont masculina corresponent, cal afegir una fila de 9 pins a sota del tauler. Heu de realitzar 9 forats amb una broca de 1 mm de diàmetre en paral·lel als forats existents, tal com es pot veure a la imatge. A continuació, enllaceu els passadors corresponents de les 2 files amb materials per soldar i cables curts.

L298N pin-out

El L298N es compon de 2 canals que permeten controlar la velocitat i la direcció:

direcció a través de 2 sortides digitals, anomenades IN1, IN2 per al primer canal i IN3 i IN4 per al segon

velocitat a través de 1 sortides digitals, anomenades ENA per al primer canal i ENB per al segon

He triat el següent pin-out amb l'Arduino:

motor esquerre: IN1 al pin 3, IN2 al pin 4, ENA al pin 2

motor dret: IN3 al pin 5, IN4 al pin 6, ENB al pin 7

Regulador de 5V

Fins i tot si el l298N normalment és capaç de proporcionar 5V, encara hi afegeixo un petit regulador. Alimenta l'Arduino mitjançant el port VIN i els 2 codificadors dels motors. Podeu saltar-vos aquest pas utilitzant directament el regulador L298N 5V incorporat.

Connectors JST i pin-out del codificador

Utilitzeu adaptadors de connectors JST-XH femelles de 4 pins, per connectar-los a:

  • 5V del regulador
  • un terreny
  • dos ports d'entrada digitals (per exemple: 34 i 38 per al codificador dret i 26 i 30 per a l'esquerre)

I2C addicional

Com haureu notat, hi ha un connector JST de 4 pins addicional a la placa proto. S'utilitza per connectar un dispositiu I2C com una IMU, podeu fer el mateix i fins i tot afegir el vostre propi port.

Pas 5: Motor Group i Arduino a la capa inferior

Motor Group i Arduino a la capa inferior
Motor Group i Arduino a la capa inferior
Motor Group i Arduino a la capa inferior
Motor Group i Arduino a la capa inferior
Motor Group i Arduino a la capa inferior
Motor Group i Arduino a la capa inferior

Fixació de blocs motors

Un cop muntada la capa inferior amb les 8 plaques de Turtlebot, només cal utilitzar 4 cargols M3 directament a les insercions per mantenir els blocs del motor. A continuació, podeu connectar els cables d’alimentació del motor a les sortides L298N i als cables fabricats anteriorment als connectors JST de la placa base.

Distribució d'energia

La distribució d’energia es realitza simplement amb un bloc de terminals barrera. En un costat de la barrera, es cargola un cable amb un endoll femella XT60 per connectar-lo a la bateria LiPo. A l’altra banda, els nostres dos cables LED / interruptors prèviament soldats estan cargolats. Així, cada circuit (Motor i Arduino) es podria habilitar amb el seu propi interruptor i el LED verd corresponent.

Gestió de cables

Ràpidament haurà de fer front a molts cables. Per reduir l'aspecte desordenat, podeu utilitzar la "taula" prèviament impresa en 3D. A la taula, manteniu els taulers electrònics amb cinta de doble cara i, a sota de la taula, deixeu que els cables flueixin lliurement.

Manteniment de la bateria

Per evitar l'expulsió de la bateria quan conduïu el robot, només podeu utilitzar una banda elàstica per al cabell.

Rodet rodet

No és realment un rodet, sinó una simple mitja esfera fixada amb 4 cargols a la capa inferior. N’hi ha prou per garantir l’estabilitat del robot.

Pas 6: ordinador de placa única i sensors a la capa superior

Ordinador de placa única i sensors a la capa superior
Ordinador de placa única i sensors a la capa superior
Ordinador de placa única i sensors a la capa superior
Ordinador de placa única i sensors a la capa superior
Ordinador de placa única i sensors a la capa superior
Ordinador de placa única i sensors a la capa superior

Quin ordinador de placa única triar?

No necessito presentar-vos el famós Raspberry Pi, el seu nombre de casos d’ús supera en gran mesura el camp de la robòtica. Però hi ha un desafiador molt més poderós per al Raspberry Pi que podeu ignorar. De fet, el Jetson Nano de Nvidia incorpora una potent targeta gràfica de 128 nuclis a més del seu processador. Aquesta targeta gràfica en particular s’ha desenvolupat per accelerar tasques computacionals i costoses com el processament d’imatges o la inferència de xarxes neuronals.

Per a aquest projecte vaig triar el Jetson Nano i podeu trobar la part 3D corresponent entre els fitxers adjunts, però si voleu anar amb el Raspberry Pi hi ha molts casos imprimibles aquí.

Regulador 5V

Qualsevol que sigui la placa que hàgiu decidit portar al vostre robot, necessiteu un regulador de 5 V. L’última versió de Raspberry Pi 4 requereix 1,25 A com a màxim, però Jetson Nano requereix fins a 3 A d’estrès, així que vaig optar per que el Pololu 5V 6A tingués una reserva d’alimentació per a futurs components (sensors, llums, escales …), però qualsevol 5V 2A econòmic hauria de fer-ho el treball. El Jetson utilitza un canó de 5,5 mm de CC i el Pi un micro USB, agafa el cable corresponent i el solda a la sortida del regulador.

Disseny LIDAR

El LIDAR que s’utilitza aquí és el LDS-01, hi ha diversos LIDAR 2D que es poden utilitzar com RPLidar A1 / A2 / A3, YDLidar X4 / G4 o fins i tot Hokuyo LIDAR. L'únic requisit és que s'hagi de connectar mitjançant USB i col·locar-lo al centre de l'estructura. De fet, si el LIDAR no està ben centrat, el mapa creat per l'algorisme SLAM pot canviar la posició estimada de les parets i els obstacles de la seva posició real. També si algun obstacle del robot creua el feix làser, reduirà l'abast i el camp de visió.

Muntatge LIDAR

El LIDAR està muntat en una peça impresa en 3D que segueix la seva forma, la peça mateixa es manté sobre una placa rectangular (realment en fusta contraxapada a la imatge, però també es pot imprimir en 3D). A continuació, una peça adaptadora permet fixar el conjunt a la placa superior de turtlebot amb separadors de niló.

Càmera com a sensor addicional o substitució de LIDAR

Si no voleu gastar massa diners en un LIDAR (que costa aproximadament 100 dòlars), opteu per una càmera: també existeixen algoritmes SLAM que només funcionen amb una càmera RGB monocular. Tots dos SBC accepten càmeres USB o CSI.

A més, la càmera us permetrà executar scripts de visió per ordinador i detecció d’objectes.

muntatge

Abans de tancar el robot, passeu els cables pels forats més grans de la placa superior:

  • el cable corresponent del regulador de 5V al vostre SBC
  • el cable USB del port de programació de l'Arduino DUE (el més proper al barril de CC) a un port USB del vostre SBC

A continuació, manteniu la placa superior en posició amb una dotzena de cargols. El vostre robot ja està a punt per ser programat, BÉ FET!

Pas 7: feu-lo moure

Compileu l’Arduino

Obriu el vostre ID Arduino preferit i importeu la carpeta del projecte anomenada own_turtlebot_core i, a continuació, seleccioneu el tauler i el port corresponent, podeu consultar aquest excel·lent tutorial.

Ajusteu la configuració bàsica

El projecte es compon de dos fitxers i cal adaptar-ne un al vostre robot. Obrim doncs own_turtlebot_config.h i descobrim quines línies requereixen la nostra atenció:

#define ARDUINO_DUE // ** COMENTAR AQUESTA LÍNIA SI NO UTILITZEU UN DUE **

S'ha d'utilitzar només amb Arduino DUE, si no comenta la línia.

#define RATE_CONTROLLER_KP 130.0 // ** AFINAR AQUEST VALOR **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE AQUEST VALOR ** #define RATE_CONTROLLER_KI 0,00005 // ** TUNE AQUEST VALOR **

Aquests 3 paràmetres corresponen als guanys del controlador de velocitat que utilitza el PID per mantenir la velocitat desitjada. En funció de la tensió de la bateria, la massa del robot, el diàmetre de la roda i l’engranatge mecànic del vostre motor, haureu d’adaptar els seus valors. PID és un controlador clàssic i no se us detallarà aquí, però aquest enllaç us proporcionarà prou entrades per afinar les vostres.

/ * Definiu pins * /

// motor A (dreta) byte const motorRightEncoderPinA = 38; // ** MODIFICA AMB EL TEU PIN NB ** const byte motorRightEncoderPinB = 34; // ** MODIFICA AMB EL TEU PIN NB ** const byte enMotorRight = 2; // ** MODIFICA AMB EL TEU PIN NB ** const byte in1MotorRight = 4; // ** MODIFICA AMB EL TEU PIN NB ** const byte in2MotorRight = 3; // ** MODIFICA AMB EL TEU PIN NB ** // motor B (esquerra) byte const motorLeftEncoderPinA = 26; // ** MODIFICA AMB EL TEU PIN NB ** const byte motorLeftEncoderPinB = 30; // ** MODIFICA AMB EL TEU PIN NB ** const byte enMotorLeft = 7; // ** MODIFICA AMB EL TEU PIN NB ** const byte in1MotorLeft = 6; // ** MODIFICA AMB EL TEU PIN NB ** const byte in2MotorLeft = 5; // ** MODIFICA AMB EL TEU PIN NB **

Aquest bloc defineix el pinout entre el L298N i l'Arduino, només cal que modifiqueu el número del pin perquè coincideixi amb el vostre. Quan hàgiu acabat el fitxer de configuració, compileu i pengeu el codi.

Instal·leu i configureu ROS

Un cop hàgiu assolit aquest pas, les instruccions són exactament les mateixes que les detallades a l’excel·lent manual de TurtleBot3. Heu de seguir escrupolosament

Ben fet, TurtleBot 3 ara és vostre i podeu executar tots els paquets i tutorials existents amb ROS.

D'acord, però, què és ROS?

ROS significa Robots Operating System (Sistema operatiu de robots), al principi pot semblar bastant complex, però no ho és, imagineu-vos una forma de comunicació entre maquinari (sensors i actuadors) i programari (algoritmes de navegació, control, visió per ordinador …). Per exemple, podeu canviar fàcilment el vostre LIDAR actual amb un altre model sense trencar la configuració, perquè cada LIDAR publica el mateix missatge LaserScan. El ROS que s’utilitza àmpliament és la robòtica, Executeu el vostre primer exemple

L'equivalent de "hola món" per a ROS consisteix a teleoperar el robot a través de l'ordinador remot. El que voleu fer és enviar ordres de velocitat perquè els motors girin, les ordres segueixen aquest tub:

  • un node turtlebot_teleop, que s’executa a l’ordinador remot, publica un tema "/ cmd_vel" que inclou un missatge Twist
  • aquest missatge es reenvia a través de la xarxa de missatges ROS al SBC
  • un node sèrie permet rebre "/ cmd_vel" a l'Arduino
  • l'Arduino llegeix el missatge i estableix la velocitat angular de cada motor perquè coincideixi amb la velocitat lineal i angular desitjada del robot

Aquesta operació és senzilla i es pot aconseguir executant les línies d’ordres enumerades més amunt. Si voleu informació més detallada només heu de veure el vídeo.

[SBC]

roscore

[SBC]

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

[Ordinador remot]

exporta TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Per anar més enllà

Abans de provar tots els exemples oficials, heu de saber una darrera cosa al manual cada vegada que afronteu aquesta ordre:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

heu d'executar aquesta ordre al vostre SBC:

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

I si teniu un LIDAR, executeu l'ordre associada al vostre SBC, en el meu cas, executeu un LDS01 amb la línia següent:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

I això és tot, heu creat definitivament el vostre propi turtlebot:) Esteu preparats per descobrir les fantàstiques capacitats de ROS i per codificar algorismes de visió i aprenentatge automàtic.

Recomanat: