Innehållsförteckning:

Bygg din egen Turtlebot -robot !: 7 steg
Bygg din egen Turtlebot -robot !: 7 steg

Video: Bygg din egen Turtlebot -robot !: 7 steg

Video: Bygg din egen Turtlebot -robot !: 7 steg
Video: Bygg din egen carport 2024, Juli
Anonim
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!
Bygg din egen Turtlebot -robot!

REDIGERA:

Ytterligare information om programvara och kontroll finns på denna länk:

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

Direktlänken till koden är:

github.com/MattMgn/foxbot_core

Varför detta projekt?

Turtlebot 3 är den perfekta plattformen för att fördjupa sig i elektronik, robotik och till och med AI! Jag föreslår att du bygger din egen turtlebot steg för steg med prisvärda komponenter utan att göra avkall på funktioner och prestanda. Med en sak i åtanke: att hålla det bästa från den ursprungliga roboten, dess modularitet, enkelhet och det enorma antalet paket för autonom navigering och AI från open source-gemenskapen.

Detta projekt är ett tillfälle för nybörjare att skaffa sig idéer om elektronik, mekanik och datavetenskap, och för de mer erfarna att få en kraftfull plattform för att testa och utveckla algoritmer för artificiell intelligens.

Vad kommer du att upptäcka i det här projektet?

Du är på väg att upptäcka vilka viktiga mekaniska och elektroniska delar som måste hållas från den ursprungliga boten för att garantera fullständig kompatibilitet.

Hela byggprocessen kommer att vara detaljerad: från 3D -utskrift, montering och flera komponenter, lödning och integrering av elektronik till slutligen kodkompilering på Arduino. Denna instruerbara kommer att avsluta med ett "hej värld" -exempel för att bekanta dig med ROS. Om något verkar oklart, ställ gärna en fråga!

Tillbehör

Elektronik:

1 x Single Board -dator för att köra ROS, kan vara en Raspberry Pi eller en Jetson Nano till exempel

1 x Arduino DUE, du kan också använda en UNO eller en MEGA

1 x Proto-kort som passar Arduino DUE pin-out finns här

2 x 12V likströmsmotorer med pulsgivare (100 RPM -tillval)

1 x L298N motorförare

2 x 5V regulator

1 x batteri (3S/4S LiPo -batteri till exempel)

2 x ON/OFF -omkopplare

2 x LED

2 x 470 kOhm motstånd

3 x 4 stift JST -kontakter

1 x USB -kabel (minst en mellan SBC och Arduino)

Sensorer:

1 x Strömgivare (tillval)

1 x 9 frihetsgrader IMU (tillval)

1 x LIDAR (tillval)

Chassi:

16 x Turtlebot modulplattor (som också kan 3D -skrivas ut)

2 x hjul 65 mm diameter (6 mm bredd)

4 x Nylon distanser 30 mm (tillval)

20 x M3 -skär (tillval)

Andra:

Trådar

M2.5 och M3 skruvar och skär

3D -skrivare eller någon som kan skriva ut delarna åt dig

En handborr med ett set en borrkrona som denna

Steg 1: Beskrivning

Beskrivning
Beskrivning
Beskrivning
Beskrivning

Denna robot är en enkel differentialdrift som använder två hjul direkt monterade på deras motor och en rullbana som är placerad på baksidan för att förhindra att roboten ramlar omkull. Roboten är uppdelad i två lager:

bottenlagret: med framdrivningsgruppen (batteri, motorstyrenhet och motorer) och elektroniken på "låg nivå": Arduino -mikrokontroller, spänningsregulator, switchar …

det övre skiktet: med elektroniken "på hög nivå", nämligen enkelkortdatorn och LIDAR

Dessa lager är kopplade med tryckta delar och skruvar för att säkerställa konstruktionens robusthet.

Elektronisk schematisk

Schemat kan verka lite rörigt. Det är en schematisk ritning och den representerar inte alla ledningar, kontakter och proto-kortet, men den kan läsas enligt följande:

Ett 3S Litihum -jonpolymerbatteri med 3000mAh kapacitet driver den första kretsen, den driver både motorstyrkortet (L298N) och en första 5V -regulator för motorkodare och Arduino. Denna krets aktiveras via en strömbrytare med en lysdiod som indikerar dess PÅ/AV -läge.

Samma batteri driver en andra krets, ingångsspänningen omvandlas till 5V för att driva Single Board -datorn. Även här aktiveras kretsen genom en omkopplare och en lysdiod.

Ytterligare sensorer som en LIDAR eller en kamera kan sedan läggas till direkt på Raspberry Pi via USB eller CSI -porten.

Mekanisk design

Robotramen består av 16 identiska delar som bildade 2 kvadratiska lager (28 cm bredd). De många hålen gör det möjligt att montera ytterligare delar var du än behöver det och erbjuder en komplett modulär design. För det här projektet bestämde jag mig för att skaffa originalen TurtleBot3 -plattor men du kan också 3D -skriva ut dem eftersom deras design är öppen källkod.

Steg 2: Motorblockmontering

Motorblockmontering
Motorblockmontering
Motorblockmontering
Motorblockmontering
Motorblockmontering
Motorblockmontering

Motorförberedelse

Det första steget är att lägga till 1 mm tjockt skumtejp runt varje motor för att förhindra vibrationer och buller när motorn snurrar.

Tryckta delar

Motorhållaren resulterar i två delar som griper motorn som ett skruvstycke. 4 skruvar för att dra åt motorn i hållaren.

Varje hållare består av flera hål som är värd för M3 -skär som ska monteras på strukturen. Det finns fler hål än vad som faktiskt behövs, de extra hålen kan så småningom användas för att montera extra del.

3D -skrivarinställningar: alla delar skrivs ut med följande parametrar

  • Munstycke med en diameter på 0,4 mm
  • 15% materialpåfyllning
  • 0,2 mm höjd lager

Hjul

De valda hjulen är täckta med gummi för att maximera vidhäftningen och säkerställa glidfritt rullande skick. En klämskruv håller hjulet monterat på motoraxeln. Hjulets diameter bör vara tillräckligt stor för att korsa mindre steg och mark oegentligheter (dessa hjul är 65 mm i diameter).

Fixering

När du har gjort med ett motorblock, upprepa de föregående operationerna och fixa dem helt enkelt i lagret med M3 -skruvar.

Steg 3: Brytare och kabelförberedelse

Brytare och kabelförberedelse
Brytare och kabelförberedelse
Brytare och kabelförberedelse
Brytare och kabelförberedelse
Brytare och kabelförberedelse
Brytare och kabelförberedelse

Motorkabelförberedelse

I allmänhet levereras motorkodaren med en kabel, inklusive på ena sidan en 6-stifts kontakt som ansluter baksidan av kodarens kretskort och nakna ledningar på andra sidan.

Du har möjlighet att löda dem direkt på din proto-board eller till och med din Arduino, men jag rekommenderar dig att använda kvinnliga stifthuvuden och JST-XH-kontakter istället. Således kan du ansluta/koppla ur dem på din proto-board och göra din montering enklare.

Tips: du kan lägga till en expanderbar ärmfläta runt dina trådar och bitar av krymprör nära kontakter, så får du en "ren" kabel.

Strömbrytare och LED

För att aktivera de två strömkretsarna, förbered 2 LED- och switchkablar: först löd ett 470 kOhm -motstånd på en av LED -stiften, sedan löd LED -lampan på en switch -pin. Även här kan du använda en bit krympslang för att dölja motståndet inuti. Var noga med att löda lysdioden i rätt riktning! Upprepa denna åtgärd för att få två switch/led -kablar.

hopsättning

Montera de tidigare tillverkade kablarna på motsvarande 3D -utskrivna del. Använd en mutter för att behålla omkopplaren, lysdioderna behöver inte lim, bara kraft nog för att passa den i hålet.

Steg 4: Ledningar för elektroniska kort

Ledningar för elektroniska kort
Ledningar för elektroniska kort
Ledningar för elektroniska kort
Ledningar för elektroniska kort
Ledningar för elektroniska kort
Ledningar för elektroniska kort

Brädor layout

Ett protokoll som passar Arduino-skivlayouten används för att minska antalet ledningar. På toppen av proto-kortet är L298N staplad med Dupont kvinnlig header (Dupont är 'Arduino-liknande' rubriker).

L298N -beredning

Ursprungligen kommer L298N -kortet inte med motsvarande manlig Dupont -rubrik, du måste lägga till en rad med 9 stift under kortet. Du måste förverkliga 9 hål med 1 mm diameter borr parallellt med de befintliga hålen som du kan se på bilden. Länka sedan motsvarande stift på de 2 raderna med lödmaterial och korta trådar.

L298N pin-out

L298N består av 2 kanaler som möjliggör hastighets- och riktningskontroll:

riktning genom 2 digitala utgångar, kallade IN1, IN2 för den första kanalen och IN3 och IN4 för den andra

hastighet genom 1 digitala utgångar, kallad ENA för den första kanalen och ENB för den andra

Jag valde följande pin-out med Arduino:

vänster motor: IN1 på stift 3, IN2 på stift 4, ENA på stift 2

höger motor: IN3 på stift 5, IN4 på stift 6, ENB på stift 7

5V regulator

Även om l298N normalt kan leverera 5V, lägger jag fortfarande till en liten regulator. Den driver Arduino genom VIN -porten och de två kodarna på motorerna. Du kan hoppa över det här steget genom att direkt använda den inbyggda L298N 5V-regulatorn.

JST-kontakter och kodare pin-out

Använd 4-stifts kvinnliga JST-XH-kontaktdon, varje kontakt kopplas sedan till:

  • 5V från regulatorn
  • en mark
  • två digitala ingångar (till exempel: 34 och 38 för den högra kodaren och 26 och 30 för den vänstra)

Extra I2C

Som du kanske har märkt finns det en extra 4-stifts JST-kontakt på proto-kortet. Den används för att ansluta I2C -enhet som en IMU, du kan göra samma sak och till och med lägga till din egen port.

Steg 5: Motor Group och Arduino på bottenskiktet

Motor Group och Arduino på bottenskiktet
Motor Group och Arduino på bottenskiktet
Motor Group och Arduino på bottenskiktet
Motor Group och Arduino på bottenskiktet
Motor Group och Arduino på bottenskiktet
Motor Group och Arduino på bottenskiktet

Motorblock fixering

När bottenlagret är monterat med de 8 Turtlebot -plattorna använder du bara 4 M3 -skruvar direkt i insatserna för att underhålla motorblocken. Sedan kan du ansluta motorkraftledningar till L298N-utgångarna och de tidigare gjorda kablarna till proto-board JST-kontakterna.

Kraftfördelning

Kraftfördelning realiseras helt enkelt med ett spärrplint. På ena sidan av barriären skruvas en kabel med en XT60 honkontakt för att ansluta till LiPo -batteri. På andra sidan är våra två LED/switch -kablar som tidigare lödts skruvade. Således kunde varje krets (motor och Arduino) aktiveras med sin egen omkopplare och motsvarande gröna lysdiod.

Kabelhantering

Snabbt måste du hantera många kablar! För att minska den röriga aspekten kan du använda "bordet" som tidigare skrivits ut i 3D. På bordet, underhåll dina elektroniska brädor med dubbelsidig tejp, och under bordet låt ledningarna fritt flöda.

Batteribehållande

För att undvika utmatning av batteriet när du kör din robot kan du helt enkelt använda ett hårelastiskt band.

Roller caster

Inte riktigt en berg -och dalbana utan en enkel halvkula fixerad med 4 skruvar på bottenlagret. Det är tillräckligt för att säkerställa roboten stabilitet.

Steg 6: Enkelkortsdator och sensorer på det övre lagret

Enkel dator och sensorer på det övre skiktet
Enkel dator och sensorer på det övre skiktet
Enkelkortsdator och sensorer på det övre skiktet
Enkelkortsdator och sensorer på det övre skiktet
Enkel dator och sensorer på det övre skiktet
Enkel dator och sensorer på det övre skiktet

Vilken Single Board -dator att välja?

Jag behöver inte presentera den berömda Raspberry Pi, dess antal användningsfall överstiger till stor del robotikområdet. Men det finns en mycket kraftfullare utmanare för Raspberry Pi som du kan ignorera. Jetson Nano från Nvidia har faktiskt ett kraftfullt grafikkort med 128 kärnor utöver dess processor. Detta speciella grafiska kort har utvecklats för att påskynda beräkningsbara dyra uppgifter som bildbehandling eller neurala nätverksinferens.

För detta projekt valde jag Jetson Nano och du kan hitta motsvarande 3D -del bland de bifogade filerna, men om du vill gå med Raspberry Pi finns det många utskrivbara fall här.

5V regulator

Oavsett vilken bräda du bestämde dig för att ta med din robot behöver du en 5V regulator. Den senaste Raspberry Pi 4 kräver max 1.25A men Jetson Nano kräver upp till 3A på stress så jag valde att Pololu 5V 6A skulle ha en effektreserv för framtida komponenter (sensorer, lampor, stegmaskiner …), men alla billiga 5V 2A borde göra jobbet. Jetson använder ett 5,5 mm DC -fat och Pi ett mikro -USB, ta tag i motsvarande kabel och löd den till regulatorutgången.

LIDAR -layout

LIDAR som används här är LDS-01, det finns olika andra 2D LIDAR som kan användas som RPLidar A1/A2/A3, YDLidar X4/G4 eller till och med Hokuyo LIDAR. Det enda kravet är att den måste anslutas via USB och placeras centrerad ovanför strukturen. Om LIDAR inte är väl centrerad kan kartan som skapats av SLAM -algoritmen förskjuta den uppskattade positionen för väggar och hinder från deras verkliga position. Även om några hinder från roboten passerar laserstrålen kommer det att minska räckvidd och synfält.

LIDAR -montering

LIDAR är monterad på en 3D -tryckt del som följer dess form, själva delen hålls på en rektangulär platta (faktiskt i plywood på bilden men kan också vara 3D -utskriven). Sedan tillåter en adapterdel att ensemblen fixeras på den övre sköldpaddsplattan med nylonstycken.

Kamera som extra sensor eller LIDAR -ersättning

Om du inte vill lägga för mycket pengar på en LIDAR (som kostar cirka 100 $), gå till en kamera: det finns också SLAM -algoritmer som bara körs med en monokulär RGB -kamera. Båda SBC accepterar USB- eller CSI -kamera.

Dessutom låter kameran dig köra datorsyn och objektdetekteringsskript!

hopsättning

Innan du stänger roboten, för kablar genom de större hålen i den övre plattan:

  • motsvarande kabel från 5V -regulatorn till din SBC
  • USB -kabeln från programmeringsporten på Arduino DUE (närmast DC -fatet) till en USB -port på din SBC

Håll sedan den övre plattan på plats med ett dussin skruvar. Din robot är nu redo att programmeras, VÄLDIGT!

Steg 7: Få det att röra på sig

Kompilera Arduino

Öppna din favorit Arduino IDE och importera projektmappen som heter own_turtlebot_core, välj sedan ditt kort och motsvarande port, du kan hänvisa till denna utmärkta handledning.

Justera kärninställningarna

Projektet består av två filer, och en måste anpassas till din robot. Så låt oss öppna own_turtlebot_config.h och upptäck vilka rader som kräver vår uppmärksamhet:

#define ARDUINO_DUE // ** KOMMENTERA DENNA LINJE OM DU INTE ANVÄNDER EN FORSKRIFT **

Bör endast användas med Arduino DUE, om inte kommentera raden.

#define RATE_CONTROLLER_KP 130.0 // ** TUNE THIS VALUE **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** TUNE THIS VALUE ** #define RATE_CONTROLLER_KI 0.00005 // ** TUNE THIS VALUE **

Dessa 3 parametrar motsvarar de hastighetsregulatorförstärkningar som används av PID för att bibehålla önskad hastighet. Beroende på batterispänning, robotens massa, hjuldiameter och motorns mekaniska växel måste du anpassa deras värden. PID är en klassisk styrenhet och du kommer inte att beskrivas detaljerat här, men den här länken bör ge dig tillräckligt med ingångar för att ställa in din egen.

/ * Definiera stift */

// motor A (höger) const byte motorRightEncoderPinA = 38; // ** ÄNDRA MED DIN PIN OBS ** const byte motorRightEncoderPinB = 34; // ** ÄNDRA MED DIN PIN OBS ** const byte enMotorRight = 2; // ** ÄNDRA MED DIN PIN OBS ** const byte in1MotorRight = 4; // ** ÄNDRA MED DIN PIN OBS ** const byte in2MotorRight = 3; // ** ÄNDRA MED DIN PIN -kod OBS ** // motor B (vänster) const byte motorLeftEncoderPinA = 26; // ** ÄNDRA MED DIN PIN OBS ** const byte motorLeftEncoderPinB = 30; // ** ÄNDRA MED DIN PIN OBS ** const byte enMotorLeft = 7; // ** ÄNDRA MED DIN PIN OBS ** const byte in1MotorLeft = 6; // ** ÄNDRA MED DIN PIN OBS ** const byte in2MotorLeft = 5; // ** ÄNDRA MED DIN PIN OBS **

Detta block definierar pinout mellan L298N och Arduino, helt enkelt ändra pin -numret för att matcha ditt. När du har gjort med konfigurationsfilen, kompilera och ladda upp koden!

Installera och konfigurera ROS

När du har nått detta steg är instruktionerna exakt desamma som beskrivs i den utmärkta TurtleBot3 -handboken, du måste noggrant följa

bra gjort TurtleBot 3 är nu ditt och du kan köra alla befintliga paket och självstudier med ROS.

Ok men vad är ROS?

ROS står för Robots Operating System, det kan tyckas ganska komplext till en början men det är inte, tänk bara på ett sätt att kommunicera mellan hårdvara (sensorer och ställdon) och programvara (algoritmer för navigering, kontroll, datorsyn …). Till exempel kan du enkelt byta din nuvarande LIDAR med en annan modell utan att bryta din inställning, eftersom varje LIDAR publicerar samma LaserScan -meddelande. ROS används ofta är robotik, Kör ditt första exempel

"Hej världen" -ekvivalenten för ROS består i att teleopera din robot genom fjärrdatorn. Vad du vill göra är att skicka hastighetskommandon för att få motorerna att snurra, kommandona följer detta rör:

  • en turtlebot_teleop -nod, som körs på fjärrdatorn, publicerar ett "/cmd_vel" -ämne inklusive ett Twist -meddelande
  • detta meddelande vidarebefordras via ROS -meddelandenätverket till SBC
  • en seriell nod tillåter att "/cmd_vel" tas emot på Arduino
  • Arduino läser meddelandet och ställer in vinkelhastigheten på varje motor för att matcha robotens önskade linjära och vinkelhastighet

Denna operation är enkel och kan uppnås genom att köra kommandoraderna som anges ovan! Om du vill ha mer detaljerad information är det bara att titta på videon.

[SBC]

roscore

[SBC]

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

[Fjärrdator]

exportera TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Att gå längre

Du måste veta en sista sak innan du försöker alla de officiella exemplen, i manualen varje gång du möter detta kommando:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

du måste köra detta kommando på din SBC istället:

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

Och om du har en LIDAR kör det tillhörande kommandot på din SBC, i mitt fall kör jag en LDS01 med raden nedan:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Och det är allt, du har definitivt byggt din egen turtlebot:) Du är redo att upptäcka de fantastiska möjligheterna hos ROS och att koda vision och algoritmer för maskininlärning.

Rekommenderad: