Inhoudsopgave:

Bouw je eigen Turtlebot-robot! - Ajarnpa
Bouw je eigen Turtlebot-robot! - Ajarnpa

Video: Bouw je eigen Turtlebot-robot! - Ajarnpa

Video: Bouw je eigen Turtlebot-robot! - Ajarnpa
Video: Simulating the TurtleBot3 Robot 2024, Juli-
Anonim
Bouw je eigen Turtlebot-robot!
Bouw je eigen Turtlebot-robot!
Bouw je eigen Turtlebot-robot!
Bouw je eigen Turtlebot-robot!
Bouw je eigen Turtlebot-robot!
Bouw je eigen Turtlebot-robot!

BEWERKING:

Meer informatie over software en besturing is beschikbaar via deze link:

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

De directe link naar de code is:

github.com/MattMgn/foxbot_core

Waarom dit project?

Turtlebot 3 is het perfecte platform om je te verdiepen in elektronica, robotica en zelfs AI! Ik stel voor dat je stap voor stap je eigen turtlebot bouwt met betaalbare componenten zonder in te boeten aan functies en prestaties. Met één ding in gedachten: het beste uit de oorspronkelijke robot behouden, zijn modulariteit, eenvoud en het enorme aantal pakketten voor autonome navigatie en AI van de open-sourcegemeenschap.

Dit project is een kans voor beginners om noties van elektronica, mechanica en computerwetenschappen te verwerven, en voor de meer ervarenen om een krachtig platform te krijgen om kunstmatige intelligentie-algoritmen te testen en te ontwikkelen.

Wat ga je ontdekken in dit project?

U staat op het punt te ontdekken welke essentiële mechanische en elektronische onderdelen van de originele bot moeten worden bewaard om volledige compatibiliteit te garanderen.

Het hele bouwproces wordt gedetailleerd: van het printen van 3D-onderdelen, het assembleren en de verschillende componenten, het solderen en integreren van elektronica tot uiteindelijk het compileren van codes op Arduino. Deze instructable zal eindigen op een 'hallo wereld'-voorbeeld om u vertrouwd te maken met ROS. Mocht er iets onduidelijk zijn, stel gerust een vraag!

Benodigdheden

Elektronica:

1 x Single Board Computer om ROS uit te voeren, kan bijvoorbeeld een Raspberry Pi of een Jetson Nano zijn

1 x Arduino DUE, je kunt ook een UNO of een MEGA gebruiken

1 x Proto-board dat past op Arduino DUE pin-out hier beschikbaar

2 x 12V DC motoren met encoders (100 RPM optie)

1 x L298N-motorstuurprogramma

2 x 5V-regelaar

1 x batterij (bijvoorbeeld 3S/4S LiPo-batterij)

2 x AAN/UIT-schakelaars

2 x LED

2 x 470kOhm-weerstanden

3 x 4-pins JST-connectoren

1 x USB-kabel (minstens één tussen de SBC en de Arduino)

Sensoren:

1 x Stroomsensor (optioneel)

1 x 9 vrijheidsgraden IMU (optioneel)

1 x LIDAR (optioneel)

Chassis:

16 x Turtlebot modulaire platen (die ook 3D geprint kunnen worden)

2 x wielen 65 mm diameter (6 mm breedte optie)

4 x nylon afstandhouders 30 mm (optioneel)

20 x M3-inzetstukken (optioneel)

anderen:

Draden

M2.5 en M3 schroeven en inzetstukken

3D-printer of iemand die de onderdelen voor je kan printen

Een handboor met een set boren zoals deze

Stap 1: Beschrijving:

Beschrijving
Beschrijving
Beschrijving
Beschrijving

Deze robot is een eenvoudige differentieelaandrijving die gebruikmaakt van 2 wielen die direct op hun motor zijn gemonteerd en een zwenkwiel dat aan de achterkant is geplaatst om te voorkomen dat de robot omvalt. De robot is verdeeld in twee lagen:

de onderste laag: met de voortstuwingsgroep (batterij, motorcontroller en motoren), en de 'low level'-elektronica: Arduino-microcontroller, spanningsregelaar, schakelaars …

de Upper Layer: met de 'high level' electronic namelijk de Single Board Computer en de LIDAR

Die lagen zijn verbonden met geprinte onderdelen en schroeven om de robuustheid van de constructie te waarborgen.

Elektronisch schema

Het schema ziet er misschien wat rommelig uit. Het is een schematische tekening en het vertegenwoordigt niet alle draden, connectoren en het proto-board, maar het kan als volgt worden gelezen:

Een 3S Litihum Ion Polymer-batterij met een capaciteit van 3000 mAh voedt het eerste circuit, het voedt zowel de motorcontrollerkaart (L298N) als een eerste 5V-regelaar voor motorencoders en Arduino. Dit circuit wordt geactiveerd via een schakelaar met een LED die de AAN/UIT-status aangeeft.

Dezelfde batterij voedt een tweede circuit, de ingangsspanning wordt omgezet naar 5V om de Single Board Computer van stroom te voorzien. Ook hier wordt de schakeling geactiveerd via een schakelaar en een LED.

Extra sensoren zoals een LIDAR of een camera kunnen dan direct op de Raspberry Pi worden toegevoegd via USB of de CSI-poort.

Mechanisch ontwerp

Het robotframe bestaat uit 16 identieke delen die 2 vierkante lagen (28 cm breed) vormden. De vele gaten maken het mogelijk om extra onderdelen te monteren waar je het nodig hebt en bieden een compleet modulair ontwerp. Voor dit project heb ik besloten om de originele TurtleBot3-platen te kopen, maar je kunt ze ook 3D-printen omdat hun ontwerp open source is.

Stap 2: Motorblokmontage

Motorblokassemblage
Motorblokassemblage
Motorblokassemblage
Motorblokassemblage
Motorblokassemblage
Motorblokassemblage

Motorvoorbereiding

De eerste stap is om 1 mm dikke schuimtape rond elke motor toe te voegen om trillingen en geluid te voorkomen wanneer de motor draait.

Gedrukte onderdelen

De motorhouder resulteert in twee delen die de motor als een bankschroef vastgrijpen. 4 schroeven bereikt om de motor in de houder vast te zetten.

Elke houder bestaat uit verschillende gaten die M3-inzetstukken bevatten die op de structuur moeten worden gemonteerd. Er zijn meer gaten dan eigenlijk nodig zijn, de extra gaten kunnen eventueel worden gebruikt om een extra onderdeel te monteren.

3D-printerinstellingen: alle onderdelen worden afgedrukt met de volgende parameters:

  • Spuitmond met een diameter van 0,4 mm
  • 15% materiële vulling
  • 0.2 mm hoogte laag

Wiel

De gekozen wielen zijn bedekt met rubber om de hechting te maximaliseren en een slipvrije rolconditie te garanderen. Een klemschroef houdt het wiel op de motoras gemonteerd. De diameter van het wiel moet groot genoeg zijn om kleine oneffenheden in de trede en de grond te overbruggen (die wielen hebben een diameter van 65 mm).

fixatie

Als u klaar bent met één motorblok, herhaalt u de vorige bewerkingen en bevestigt u ze eenvoudig in de laag met M3-schroeven.

Stap 3: Schakelaars en kabelvoorbereiding

Schakelaars en kabelvoorbereiding
Schakelaars en kabelvoorbereiding
Schakelaars en kabelvoorbereiding
Schakelaars en kabelvoorbereiding
Schakelaars en kabelvoorbereiding
Schakelaars en kabelvoorbereiding

Voorbereiding motorkabel

Over het algemeen wordt de motor-encoder geleverd met een kabel met aan de ene kant een 6-pins connector die de achterkant van de encoder-PCB verbindt, en naakte draden aan de andere kant.

Je hebt de mogelijkheid om ze direct op je proto-board of zelfs je Arduino te solderen, maar ik raad je aan om in plaats daarvan vrouwelijke pin-headers en JST-XH-connectoren te gebruiken. Zo kunt u ze op uw proto-board aansluiten/loskoppelen en uw montage eenvoudiger maken.

Tips: je kunt uitbreidbare kous rond je draden en stukjes krimpkous in de buurt van connectoren toevoegen, zo krijg je een 'schone' kabel.

Schakelaar en LED

Om de twee stroomcircuits in te schakelen, bereidt u 2 LED- en schakelaarkabels voor: soldeer eerst een weerstand van 470kOhm op een van de LED-pinnen en soldeer vervolgens de LED op een van de schakelpinnen. Ook hier kun je een stuk krimpkous gebruiken om de weerstand erin te verbergen. Wees voorzichtig om de LED in de juiste richting te solderen! Herhaal deze handeling om twee schakelaar/led-kabels te krijgen.

samenkomst

Monteer de eerder gemaakte kabels op het bijbehorende 3D-geprinte onderdeel. Gebruik een moer om de schakelaar vast te houden, de LED's hebben geen lijm nodig, alleen kracht genoeg om in het gat te passen.

Stap 4: bedrading van elektronische borden

Bedrading elektronische borden
Bedrading elektronische borden
Bedrading elektronische borden
Bedrading elektronische borden
Bedrading elektronische borden
Bedrading elektronische borden

Borden lay-out

Een proto-board dat past bij de indeling van het Arduino-bord wordt gebruikt om het aantal draden te verminderen. Op de bovenkant van het proto-board is de L298N gestapeld met Dupont vrouwelijke header (Dupont zijn 'Arduino-achtige' headers).

L298N voorbereiding

Oorspronkelijk wordt het L298N-bord niet geleverd met de bijbehorende mannelijke Dupont-header, je moet een rij met 9 pinnen onder het bord toevoegen. U dient met een boor van 1 mm diameter 9 gaten te realiseren, parallel aan de bestaande gaten zoals u op de afbeelding kunt zien. Verbind vervolgens de bijbehorende pinnen van de 2 rijen met soldeermaterialen en korte draden.

L298N pin-out

De L298N bestaat uit 2 kanalen die snelheids- en richtingsregeling mogelijk maken:

richting via 2 digitale uitgangen, genaamd IN1, IN2 voor het eerste kanaal, en IN3 en IN4 voor het tweede

snelheid door 1 digitale uitgangen, genaamd ENA voor het eerste kanaal en ENB voor het tweede

Ik koos voor de volgende pin-out met de Arduino:

linker motor: IN1 op pin 3, IN2 op pin 4, ENA op pin 2

rechter motor: IN3 op pin 5, IN4 op pin 6, ENB op pin 7

5V-regelaar

Zelfs als de l298N normaal gesproken 5V kan leveren, voeg ik nog een kleine regelaar toe. Het voedt de Arduino via de VIN-poort en de 2 encoders op de motoren. U kunt deze stap overslaan door direct de ingebouwde L298N 5V-regelaar te gebruiken.

JST-connectoren en encoder pin-out

Gebruik 4-pins vrouwelijke JST-XH-connectoradapters, elke connector wordt vervolgens gekoppeld aan:

  • 5V van regelaar
  • een grond
  • twee digitale ingangspoorten (bijvoorbeeld: 34 en 38 voor de rechter encoder en 26 en 30 voor de linker)

Extra I2C

Zoals je misschien hebt gemerkt, is er een extra 4-pins JST-connector op het proto-board. Het wordt gebruikt voor het aansluiten van een I2C-apparaat zoals een IMU, u kunt hetzelfde doen en zelfs uw eigen poort toevoegen.

Stap 5: Motor Group en Arduino op de onderste laag

Motor Group en Arduino op de onderste laag
Motor Group en Arduino op de onderste laag
Motor Group en Arduino op de onderste laag
Motor Group en Arduino op de onderste laag
Motor Group en Arduino op de onderste laag
Motor Group en Arduino op de onderste laag

Bevestiging van motorblokken

Zodra de onderste laag is gemonteerd met de 8 Turtlebot-platen, gebruikt u eenvoudig 4 M3-schroeven rechtstreeks in de inzetstukken om de motorblokken te onderhouden. Vervolgens kunt u motorvoedingsdraden aansluiten op de L298N-uitgangen en de eerder gemaakte kabels op de proto-board JST-connectoren.

Machtsverdeling

Stroomverdeling wordt eenvoudig gerealiseerd met een barrière-aansluitblok. Aan de ene kant van de slagboom is een kabel met een vrouwelijke XT60-stekker geschroefd om verbinding te maken met de LiPo-batterij. Aan de andere kant zijn onze twee eerder gesoldeerde LED-/schakelkabels vastgeschroefd. Zo kon elk circuit (motor en Arduino) worden geactiveerd met een eigen schakelaar en de bijbehorende groene LED.

Kabelbeheer

Je krijgt al snel met veel kabels te maken! Om het rommelige aspect te verminderen, kunt u de eerder 3D-geprinte 'tafel' gebruiken. Onderhoud je elektronische borden op tafel met dubbelzijdig plakband en laat onder de tafel de draden vrij stromen.

Batterij onderhouden

Om te voorkomen dat de batterij wordt uitgeworpen tijdens het besturen van uw robot, kunt u eenvoudig een haarelastiek gebruiken.

Rolwiel

Niet echt een roller caster maar een simpele halve bol die met 4 schroeven op de onderlaag wordt vastgezet. Het is voldoende om de stabiliteit van de robot te garanderen.

Stap 6: Single Board Computer en sensoren op de bovenste laag

Single Board Computer en sensoren op de bovenste laag
Single Board Computer en sensoren op de bovenste laag
Single Board Computer en sensoren op de bovenste laag
Single Board Computer en sensoren op de bovenste laag
Single Board Computer en sensoren op de bovenste laag
Single Board Computer en sensoren op de bovenste laag

Welke Single Board Computer kiezen?

Ik hoef je de beroemde Raspberry Pi niet voor te stellen, het aantal use-cases overtreft het robotica-veld ruimschoots. Maar er is een veel krachtigere uitdager voor de Raspberry Pi die je misschien negeert. Inderdaad, de Jetson Nano van Nvidia heeft naast de processor een krachtige 128-core grafische kaart. Deze specifieke grafische kaart is ontwikkeld om dure rekentaken zoals beeldverwerking of neurale netwerkinferentie te versnellen.

Voor dit project heb ik de Jetson Nano gekozen en je kunt het bijbehorende 3D-onderdeel vinden tussen de bijgevoegde bestanden, maar als je met de Raspberry Pi wilt gaan, zijn er hier veel afdrukbare hoesjes.

5V-regelaar:

Welk bord je ook hebt gekozen voor je robot, je hebt een 5V-regelaar nodig. De nieuwste Raspberry Pi 4 vereist 1.25A max, maar Jetson Nano vereist tot 3A bij stress, dus ik koos voor de Pololu 5V 6A om een gangreserve te hebben voor toekomstige componenten (sensoren, lichten, steppers …), maar elke goedkope 5V 2A zou moeten doen de baan. De Jetson gebruikt een 5,5 mm DC-vat en de Pi een micro-USB, pak de bijbehorende kabel en soldeer deze aan de uitgang van de regelaar.

LIDAR-indeling

De hier gebruikte LIDAR is de LDS-01, er zijn verschillende andere 2D LIDAR die kunnen worden gebruikt zoals RPLidar A1/A2/A3, YDLidar X4/G4 of zelfs Hokuyo LIDAR's. De enige vereiste is dat deze via USB moet worden aangesloten en gecentreerd boven de structuur moet worden geplaatst. Als de LIDAR niet goed gecentreerd is, kan de kaart die door het SLAM-algoritme is gemaakt, de geschatte positie van muren en obstakels verschuiven van hun werkelijke positie. Ook als obstakels van de robot de laserstraal kruisen, zal dit het bereik en het gezichtsveld verminderen.

LIDAR-montage

De LIDAR is gemonteerd op een 3D-geprint onderdeel dat zijn vorm volgt, het onderdeel zelf wordt vastgehouden op een rechthoekige plaat (eigenlijk in multiplex op de foto, maar zou ook 3D-geprint kunnen worden). Vervolgens maakt een adapterdeel het mogelijk om het geheel met nylon afstandhouders op de bovenste turtlebot-plaat te bevestigen.

Camera als extra sensor of LIDAR-vervanging

Als je niet te veel geld wilt uitgeven aan een LIDAR (die ongeveer $ 100 kost), ga dan voor een camera: er bestaan ook SLAM-algoritmen die alleen werken met een monoculaire RGB-camera. Beide SBC accepteren een USB- of CSI-camera.

Bovendien kunt u met de camera computervisie en objectdetectiescripts uitvoeren!

samenkomst

Leid de kabels door de grotere gaten in de bovenplaat voordat u de robot sluit:

  • de bijbehorende kabel van de 5V-regelaar naar uw SBC
  • de USB-kabel van de programmeerpoort van de Arduino DUE (het dichtst bij de DC-cilinder) naar een USB-poort van uw SBC

Houd vervolgens de bovenplaat op zijn plaats met een tiental schroeven. Uw robot is nu klaar om te worden geprogrammeerd, GOED GEDAAN!

Stap 7: Laat het bewegen

Compileer de Arduino

Open je favoriete Arduino IDE en importeer de projectmap met de naam own_turtlebot_core, selecteer vervolgens je bord en de bijbehorende poort, je kunt deze uitstekende tutorial raadplegen.

Pas de Core-instellingen aan

Het project bestaat uit twee bestanden, waarvan er één moet worden aangepast aan uw robot. Laten we dus own_turtlebot_config.h openen en ontdekken welke regels onze aandacht vereisen:

#define ARDUINO_DUE // ** COMMENTAAR DEZE REGEL ALS U GEEN DUE GEBRUIKT **

Moet alleen worden gebruikt met Arduino DUE, zo niet, geef commentaar op de regel.

#define RATE_CONTROLLER_KP 130.0 // ** STEL DEZE WAARDE IN **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE DEZE WAARDE ** #define RATE_CONTROLLER_KI 0.00005 // ** TUNE DEZE WAARDE **

Die 3 parameters komen overeen met de winst van de snelheidsregelaar die door de PID wordt gebruikt om de gewenste snelheid te handhaven. Afhankelijk van de accuspanning, de massa van de robot, de wieldiameter en de mechanische overbrenging van uw motor, moet u hun waarden aanpassen. PID is een klassieke controller en je zult hier niet gedetailleerd worden, maar deze link zou je genoeg input moeten geven om je eigen te tunen.

/* Definieer pinnen */

// motor A (rechts) const byte motorRightEncoderPinA = 38; // ** WIJZIG MET UW PIN NB ** const byte motorRightEncoderPinB = 34; // ** WIJZIG MET UW PIN NB ** const byte enMotorRight = 2; // ** WIJZIG MET UW PIN NB ** const byte in1MotorRight = 4; // ** WIJZIG MET UW PIN NB ** const byte in2MotorRight = 3; // ** WIJZIG MET UW PIN NB ** // motor B (links) const byte motorLeftEncoderPinA = 26; // ** WIJZIG MET UW PIN NB ** const byte motorLeftEncoderPinB = 30; // ** WIJZIG MET UW PIN NB ** const byte enMotorLeft = 7; // ** WIJZIG MET UW PIN NB ** const byte in1MotorLeft = 6; // ** WIJZIG MET UW PIN NB ** const byte in2MotorLeft = 5; // ** WIJZIG MET UW PIN NB **

Dit blok definieert de pinout tussen de L298N en de Arduino, pas eenvoudig het pinnummer aan zodat het overeenkomt met die van jou. Als u klaar bent met het configuratiebestand, compileert en uploadt u de code!

Installeer en configureer ROS

Zodra je deze stap hebt bereikt, zijn de instructies precies dezelfde als die in de uitstekende TurtleBot3-handleiding, die je nauwgezet moet volgen

goed gedaan TurtleBot 3 is nu van jou en je kunt alle bestaande pakketten en tutorials met ROS uitvoeren.

Oké, maar wat is ROS?

ROS staat voor Robots Operating System, het lijkt op het eerste gezicht misschien vrij ingewikkeld, maar dat is het niet, stel je eens een manier van communicatie voor tussen hardware (sensoren en actuatoren) en software (algoritmen voor navigatie, besturing, computervisie…). U kunt bijvoorbeeld uw huidige LIDAR eenvoudig omwisselen met een ander model zonder uw setup te verbreken, omdat elke LIDAR hetzelfde LaserScan-bericht publiceert. ROS wordt veel gebruikt in robotica, Voer je eerste voorbeeld uit

Het 'hallo wereld'-equivalent voor ROS bestaat uit het op afstand bedienen van uw robot via de externe computer. Wat je wilt doen is snelheidscommando's sturen om de motoren te laten draaien, de commando's volgen deze pijp:

  • een turtlebot_teleop node, draaiend op de externe computer, publiceer een "/cmd_vel" onderwerp inclusief een Twist bericht
  • dit bericht wordt doorgestuurd via het ROS-berichtennetwerk naar de SBC
  • een serieel knooppunt zorgt ervoor dat de "/cmd_vel" op de Arduino kan worden ontvangen
  • de Arduino leest het bericht en stelt de hoeksnelheid op elke motor in om overeen te komen met de gewenste lineaire en hoeksnelheid van de robot

Deze bewerking is eenvoudig en kan worden bereikt door de hierboven genoemde opdrachtregels uit te voeren! Als je meer gedetailleerde informatie wilt, bekijk dan de video.

[SBC]

roscore

[SBC]

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

[Computer op afstand]

exporteren TURTLEBOT3_MODEL=${TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Om verder te gaan

Je moet nog een laatste ding weten voordat je alle officiële voorbeelden in de handleiding probeert, elke keer dat je deze opdracht tegenkomt:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

je moet in plaats daarvan deze opdracht op je SBC uitvoeren:

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

En als je een LIDAR hebt, voer dan de bijbehorende opdracht uit op je SBC, in mijn geval voer ik een LDS01 uit met de onderstaande regel:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

En dat is alles, je hebt definitief je eigen turtlebot gebouwd:) Je bent klaar om de fantastische mogelijkheden van ROS te ontdekken en om vision- en machine learning-algoritmen te coderen.

Aanbevolen: