Spisu treści:

Zbuduj własnego robota-żółwiaka!: 7 kroków
Zbuduj własnego robota-żółwiaka!: 7 kroków

Wideo: Zbuduj własnego robota-żółwiaka!: 7 kroków

Wideo: Zbuduj własnego robota-żółwiaka!: 7 kroków
Wideo: Zbuduj własnego Optimusa Prime'a 2024, Lipiec
Anonim
Zbuduj własnego robota-turtlebota!
Zbuduj własnego robota-turtlebota!
Zbuduj własnego robota-turtlebota!
Zbuduj własnego robota-turtlebota!
Zbuduj własnego robota-turtlebota!
Zbuduj własnego robota-turtlebota!

EDYTOWAĆ:

Dalsze informacje dotyczące oprogramowania i sterowania są dostępne pod tym linkiem:

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

Bezpośredni link do kodu to:

github.com/MattMgn/foxbot_core

Dlaczego ten projekt?

Turtlebot 3 to idealna platforma do zagłębienia się w elektronikę, robotykę, a nawet sztuczną inteligencję! Proponuję Ci zbudowanie własnego turtlebota krok po kroku z niedrogimi komponentami bez poświęcania funkcji i wydajności. Mając jedno na uwadze: zachowanie tego, co najlepsze z początkowego robota, jego modułowości, prostoty i ogromnej liczby pakietów do autonomicznej nawigacji i sztucznej inteligencji od społeczności open-source.

Projekt ten jest szansą dla początkujących na przyswojenie sobie pojęć elektroniki, mechaniki i informatyki, a dla bardziej doświadczonych na zdobycie potężnej platformy do testowania i rozwijania algorytmów sztucznej inteligencji.

Co odkryjesz w tym projekcie?

Za chwilę odkryjesz, które istotne części mechaniczne i elektroniczne muszą być przechowywane z dala od oryginalnego bota, aby zagwarantować pełną kompatybilność.

Cały proces budowy będzie szczegółowy: od drukowania części 3D, montażu i kilku komponentów, lutowania i integracji elektroniki, aż po kompilację kodu na Arduino. Ta instrukcja zakończy się przykładem „hello world”, aby zapoznać Cię z ROS. Jeśli coś wydaje się niejasne, zadaj pytanie!

Kieszonkowe dzieci

Elektronika:

1 x komputer jednopłytkowy do obsługi ROS, może to być na przykład Raspberry Pi lub Jetson Nano

1 x Arduino DUE, możesz również użyć UNO lub MEGA

1 x płytka Proto pasująca do pinów Arduino DUE dostępna tutaj

Silniki 2 x 12 V DC z enkoderami (opcja 100 obr./min)

1 x sterownik silnika L298N

2x5V regulator

1 x bateria (na przykład bateria 3S/4S LiPo)

2 x włączniki/wyłączniki

2 x LED

Rezystory 2 x 470 kOhm

3 x 4-pinowe złącza JST

1 x kabel USB (przynajmniej jeden między SBC a Arduino)

Czujniki:

1 x czujnik prądu (opcjonalnie)

1 x 9 stopni swobody IMU (opcjonalnie)

1 x LIDAR (opcjonalnie)

Podwozie:

16 x modułowych płyt Turtlebot (które można również wydrukować w 3D)

2 x koła o średnicy 65 mm (opcja 6 mm szerokości)

4 x nylonowe dystanse 30mm (opcjonalnie)

20 x wkładki M3 (opcjonalnie)

Inni:

Przewody

Śruby i wkładki M2,5 i M3

Drukarka 3D lub ktoś, kto może wydrukować dla Ciebie części

Wiertarka ręczna z zestawem wierteł takich jak ta

Krok 1: Opis

Opis
Opis
Opis
Opis

Ten robot jest prostym napędem różnicowym, który wykorzystuje 2 koła zamontowane bezpośrednio na silniku i kółko samonastawne, które jest umieszczone z tyłu, aby zapobiec przewróceniu się robota. Robot podzielony jest na dwie warstwy:

warstwa dolna: z grupą napędową (akumulator, sterownik silnika i silniki) oraz elektroniką „niskiego poziomu”: mikrokontroler Arduino, regulator napięcia, przełączniki…

górna warstwa: z elektroniką „wysokiego poziomu”, czyli komputerem jednopłytkowym i LIDAR

Warstwy te są połączone drukowanymi częściami i śrubami, aby zapewnić solidność konstrukcji.

Schemat elektroniczny

Schemat może wydawać się nieco nieuporządkowany. Jest to schematyczny rysunek i nie przedstawia wszystkich przewodów, złączy i płytki prototypowej, ale można go odczytać w następujący sposób:

Akumulator litowo-jonowo-polimerowy 3S o pojemności 3000 mAh zasila pierwszy obwód, zasila zarówno płytkę sterownika silnika (L298N), jak i pierwszy regulator 5 V dla enkoderów silnika i Arduino. Obwód ten jest włączany za pomocą przełącznika z diodą LED, która wskazuje jego stan ON/OFF.

Ta sama bateria zasila drugi obwód, napięcie wejściowe jest przekształcane na 5 V w celu zasilania komputera jednopłytkowego. Tutaj również obwód jest włączany za pomocą przełącznika i diody LED.

Dodatkowe czujniki, takie jak LIDAR lub kamera, można następnie dodać bezpośrednio do Raspberry Pi przez USB lub port CSI.

Konstrukcja mechaniczna

Rama robota składa się z 16 identycznych części, które utworzyły 2 kwadratowe warstwy (szerokość 28 cm). Wiele otworów pozwala na zamontowanie dodatkowych części w dowolnym miejscu i oferuje pełną modułową konstrukcję. Do tego projektu zdecydowałem się zdobyć oryginalne płytki TurtleBot3, ale można je również wydrukować w 3D, ponieważ ich projekt jest open source.

Krok 2: Montaż bloku silnika

Zespół bloku silnika
Zespół bloku silnika
Zespół bloku silnika
Zespół bloku silnika
Zespół bloku silnika
Zespół bloku silnika

Przygotowanie silnika

Pierwszym krokiem jest dodanie taśmy piankowej o grubości 1 mm wokół każdego silnika, aby zapobiec wibracjom i hałasowi podczas obracania się silnika.

Części drukowane

Uchwyt silnika daje dwie części, które chwytają silnik jak imadło. 4 śruby uzyskane do dokręcenia silnika w uchwycie.

Każdy uchwyt składa się z kilku otworów, w których znajdują się wkładki M3, które należy zamontować na konstrukcji. Jest więcej otworów niż jest to faktycznie potrzebne, dodatkowe otwory mogą w końcu zostać wykorzystane do zamontowania dodatkowej części.

Ustawienia drukarki 3D: wszystkie części są drukowane z następującymi parametrami

  • Dysza o średnicy 0,4 mm
  • 15% wypełnienia materiałowego
  • Warstwa o wysokości 0,2 mm

Koło

Wybrane koła są pokryte gumą, aby zmaksymalizować przyczepność i zapewnić bezpoślizgowe toczenie. Śruba zaciskowa podtrzymuje koło zamontowane na wale silnika. Średnica koła powinna być na tyle duża, aby pokonywać niewielkie uskoki i nierówności terenu (te koła mają średnicę 65 mm).

Fiksacja

Kiedy skończysz z jednym blokiem silnika, powtórz poprzednie czynności, a następnie po prostu przymocuj je do warstwy za pomocą śrub M3.

Krok 3: Przełączniki i przygotowanie kabli

Przełączniki i przygotowanie kabli
Przełączniki i przygotowanie kabli
Przełączniki i przygotowanie kabli
Przełączniki i przygotowanie kabli
Przełączniki i przygotowanie kabli
Przełączniki i przygotowanie kabli

Przygotowanie kabla silnika

Zazwyczaj enkoder silnika jest dostarczany z kablem zawierającym z jednej strony 6-stykowe złącze, które łączy tył płytki PCB enkodera, a nieosłonięte przewody z drugiej strony.

Masz możliwość bezpośredniego lutowania ich na płytce prototypowej lub nawet na swoim Arduino, ale zamiast tego zalecam użycie żeńskich nagłówków pinów i złączy JST-XH. W ten sposób możesz podłączyć/odłączyć je na swojej płycie prototypowej i ułatwić montaż.

Wskazówki: możesz dodać rozszerzalny oplot koszulki wokół przewodów i kawałków rurki termokurczliwej w pobliżu złączy, dzięki czemu uzyskasz „czysty” kabel.

Przełącznik i dioda LED

Aby włączyć dwa obwody zasilania, przygotuj 2 kable LED i przełączników: najpierw przylutuj rezystor 470kOhm na jednym z pinów LED, a następnie przylutuj LED na jednym z pinów przełącznika. Tutaj również możesz użyć kawałka rurki termokurczliwej, aby ukryć rezystor w środku. Uważaj, aby przylutować diodę LED we właściwym kierunku! Powtórz tę operację, aby uzyskać dwa kable przełącznika/led.

montaż

Zamontuj wcześniej wykonane kable na odpowiedniej drukowanej części 3D. Użyj nakrętki do konserwacji przełącznika, diody LED nie wymagają kleju, wystarczy na tyle siły, aby zmieściły się w otworze.

Krok 4: Okablowanie płytek elektronicznych

Okablowanie płytek elektronicznych
Okablowanie płytek elektronicznych
Okablowanie płytek elektronicznych
Okablowanie płytek elektronicznych
Okablowanie płytek elektronicznych
Okablowanie płytek elektronicznych

Układ tablic

Płytka prototypowa pasująca do układu płytki Arduino służy do zmniejszenia liczby przewodów. W górnej części płyty prototypowej L298N jest wyposażony w żeńskie nagłówki Dupont (Dupont są nagłówkami podobnymi do Arduino).

Przygotowanie L298N

Oryginalnie płyta L298N nie jest dostarczana z odpowiednim męskim nagłówkiem Dupont, musisz dodać 9-pinowy rząd poniżej płyty. Musisz wykonać 9 otworów wiertłem o średnicy 1 mm równolegle do istniejących otworów, jak widać na zdjęciu. Następnie połącz odpowiednie piny 2 rzędów materiałami lutowniczymi i krótkimi przewodami.

Wyprowadzenie pinów L298N

L298N składa się z 2 kanałów umożliwiających sterowanie prędkością i kierunkiem:

kierunek przez 2 wyjścia cyfrowe, nazwane IN1, IN2 dla pierwszego kanału oraz IN3 i IN4 dla drugiego

prędkość przez 1 wyjścia cyfrowe, zwane ENA dla pierwszego kanału i ENB dla drugiego

Z Arduino wybrałem następujący pin-out:

lewy silnik: IN1 na pinie 3, IN2 na pinie 4, ENA na pinie 2

prawy silnik: IN3 na pinie 5, IN4 na pinie 6, ENB na pinie 7

Regulator 5V

Nawet jeśli l298N jest normalnie w stanie dostarczyć 5V, nadal dodaję mały regulator. Zasila Arduino przez port VIN i 2 enkodery na silnikach. Możesz pominąć ten krok bezpośrednio za pomocą wbudowanego regulatora L298N 5V.

Złącza JST i wyprowadzenie enkodera

Użyj 4-pinowych żeńskich adapterów złącza JST-XH, każde złącze jest następnie połączone z:

  • 5V z regulatora
  • Ziemia
  • dwa cyfrowe porty wejściowe (np. 34 i 38 dla prawego enkodera oraz 26 i 30 dla lewego)

Dodatkowe I2C

Jak mogłeś zauważyć, na płycie prototypowej znajduje się dodatkowe 4-pinowe złącze JST. Służy do podłączenia urządzenia I2C jak IMU, możesz zrobić to samo, a nawet dodać własny port.

Krok 5: Grupa silników i Arduino na dolnej warstwie

Grupa silników i Arduino na dolnej warstwie
Grupa silników i Arduino na dolnej warstwie
Grupa silników i Arduino na dolnej warstwie
Grupa silników i Arduino na dolnej warstwie
Grupa silników i Arduino na dolnej warstwie
Grupa silników i Arduino na dolnej warstwie

Mocowanie bloków silnika

Gdy dolna warstwa zostanie zmontowana z 8 płytkami Turtlebot, po prostu użyj 4 śrub M3 bezpośrednio we wkładkach, aby utrzymać bloki silnika. Następnie można podłączyć przewody zasilania silnika do wyjść L298N, a wykonane wcześniej przewody do złącz JST na płytce proto-board.

Dystrybucja mocy

Dystrybucja mocy jest po prostu realizowana za pomocą listwy zaciskowej bariery. Z jednej strony bariery przykręcony jest kabel z wtykiem żeńskim XT60 do podłączenia do akumulatora LiPo. Z drugiej strony nasze dwa wcześniej przylutowane kable LED/switch są przykręcone. W ten sposób każdy obwód (silnik i Arduino) można było włączyć za pomocą własnego przełącznika i odpowiedniej zielonej diody LED.

Zarządzanie kablami

Szybko będziesz musiał uporać się z wieloma kablami! Aby zredukować bałagan, możesz użyć „stołu”, który został wcześniej wydrukowany w 3D. Na stole utrzymuj swoje płytki elektroniczne taśmą dwustronną, a pod stołem pozwól przewodom swobodnie płynąć.

Utrzymanie baterii

Aby uniknąć wysuwania baterii podczas jazdy robotem, możesz po prostu użyć gumki do włosów.

Kółko rolkowe

To nie jest rolka, ale prosta półkula przymocowana 4 śrubami na dolnej warstwie. Wystarczy zapewnić robotowi stabilność.

Krok 6: Komputer jednopłytkowy i czujniki w górnej warstwie

Komputer jednopłytkowy i czujniki w górnej warstwie
Komputer jednopłytkowy i czujniki w górnej warstwie
Komputer jednopłytkowy i czujniki w górnej warstwie
Komputer jednopłytkowy i czujniki w górnej warstwie
Komputer jednopłytkowy i czujniki w górnej warstwie
Komputer jednopłytkowy i czujniki w górnej warstwie

Który komputer jednopłytkowy wybrać?

Nie muszę przedstawiać Wam słynnego Raspberry Pi, jego liczba przypadków użycia znacznie przekracza dziedzinę robotyki. Ale dla Raspberry Pi istnieje znacznie potężniejszy pretendent, którego możesz zignorować. Rzeczywiście, Jetson Nano firmy Nvidia zawiera oprócz procesora potężną 128-rdzeniową kartę graficzną. Ta konkretna karta graficzna została opracowana w celu przyspieszenia kosztownych zadań obliczeniowych, takich jak przetwarzanie obrazu lub wnioskowanie o sieciach neuronowych.

Do tego projektu wybrałem Jetson Nano i możesz znaleźć odpowiednią część 3D wśród załączonych plików, ale jeśli chcesz użyć Raspberry Pi, jest tutaj wiele przypadków do druku.

Regulator 5V

Niezależnie od tego, jaką płytkę zdecydowałeś się umieścić w swoim robocie, potrzebujesz regulatora 5V. Najnowszy Raspberry Pi 4 wymaga maks. 1,25 A, ale Jetson Nano wymaga do 3 A na stres, więc zdecydowałem się na Pololu 5 V 6 A, aby mieć rezerwę mocy dla przyszłych komponentów (czujniki, światła, steppery…), ale każdy tani 5 V 2 A powinien wystarczyć Praca. Jetson używa lufy DC 5,5 mm, a Pi micro USB, chwyć odpowiedni kabel i przylutuj go do wyjścia regulatora.

Układ LIDAR

Zastosowany tutaj LIDAR to LDS-01, istnieje wiele innych LIDARów 2D, których można użyć, takich jak RPLidar A1/A2/A3, YDLidar X4/G4, a nawet LIDARY Hokuyo. Jedynym wymaganiem jest to, że musi być podłączony przez USB i umieszczony pośrodku nad konstrukcją. Rzeczywiście, jeśli LIDAR nie jest dobrze wyśrodkowany, mapa stworzona przez algorytm SLAM może przesunąć oszacowane położenie ścian i przeszkód od ich rzeczywistego położenia. Również jeśli jakiekolwiek przeszkody z robota przecinają wiązkę lasera, zmniejszy to zasięg i pole widzenia.

Montaż LIDAR

LIDAR jest montowany na części drukowanej 3D, która podąża za jej kształtem, sama część jest trzymana na prostokątnej płycie (na zdjęciu w rzeczywistości w sklejce, ale może być również wydrukowana w 3D). Następnie część adaptera umożliwia zamocowanie zespołu na górnej płycie żółwia za pomocą nylonowych przekładek.

Kamera jako dodatkowy czujnik lub zamiennik LIDAR

Jeśli nie chcesz wydawać zbyt dużo pieniędzy na LIDAR (który kosztuje około 100 $), wybierz kamerę: istnieją też algorytmy SLAM, które działają tylko z jednookularową kamerą RGB. Oba SBC akceptują kamerę USB lub CSI.

Ponadto kamera pozwoli Ci uruchomić skrypty komputerowej wizji i wykrywania obiektów!

montaż

Przed zamknięciem robota przeprowadź kable przez większe otwory w górnej płycie:

  • odpowiedni kabel od regulatora 5V do SBC
  • kabel USB z portu programowania Arduino DUE (najbliżej beczki DC) do portu USB twojego SBC

Następnie przytrzymuj górną płytę na miejscu za pomocą kilkunastu śrub. Twój robot jest teraz gotowy do zaprogramowania, DOBRA ZROBIONA!

Krok 7: Niech się ruszy

Skompiluj Arduino

Otwórz swoje ulubione Arduino IDE i zaimportuj folder projektu o nazwie own_turtlebot_core, a następnie wybierz swoją płytę i odpowiedni port, możesz zapoznać się z tym doskonałym samouczkiem.

Dostosuj ustawienia podstawowe

Projekt składa się z dwóch plików, z których jeden musi być dostosowany do Twojego robota. Otwórzmy więc own_turtlebot_config.h i odkryjmy, które linie wymagają naszej uwagi:

#define ARDUINO_DUE // ** SKOMENTUJ TEN WIERS, JEŚLI NIE UŻYWASZ DUE **

Powinien być używany tylko z Arduino DUE, jeśli nie komentuje linii.

#define RATE_CONTROLLER_KP 130.0 // ** DOSTOSUJ TĘ WARTOŚĆ **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** DOSTOSUJ TĘ WARTOŚĆ ** #define RATE_CONTROLLER_KI 0,00005 // ** DOSTOSUJ TĄ WARTOŚĆ **

Te 3 parametry odpowiadają wzmocnieniom regulatora prędkości wykorzystywanym przez PID do utrzymania pożądanej prędkości. W zależności od napięcia akumulatora, masy robota, średnicy koła i przekładni mechanicznej silnika, będziesz musiał dostosować ich wartości. PID jest klasycznym kontrolerem i nie będziesz tutaj szczegółowo opisywany, ale ten link powinien dać ci wystarczającą ilość danych wejściowych do dostrojenia własnego.

/* Zdefiniuj szpilki */

// motor A (prawy) const byte motorRightEncoderPinA = 38; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte motorRightEncoderPinB = 34; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte enMotorRight = 2; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte in1MotorRight = 4; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte in2MotorRight = 3; // ** MODYFIKUJ SWOJEGO PINU NB ** // motor B (lewy) const byte motorLeftEncoderPinA = 26; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte motorLeftEncoderPinB = 30; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte enMotorLeft = 7; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte in1MotorLeft = 6; // ** MODYFIKUJ SWOJEGO PINU NB ** const byte in2MotorLeft = 5; // ** MODYFIKUJ SWOJEGO PINU NB **

Ten blok definiuje pinout między L298N a Arduino, po prostu zmodyfikuj numer pinu, aby pasował do twojego. Kiedy skończysz z plikiem konfiguracyjnym, skompiluj i prześlij kod!

Zainstaluj i skonfiguruj ROS

Po osiągnięciu tego kroku instrukcje są dokładnie takie same, jak te wyszczególnione w doskonałej instrukcji TurtleBot3, musisz skrupulatnie przestrzegać

dobrze zrobione TurtleBot 3 jest teraz Twój i możesz uruchamiać wszystkie istniejące pakiety i samouczki za pomocą ROS.

Ok, ale co to jest ROS?

ROS to skrót od Robots Operating System, na pierwszy rzut oka może się wydawać dość skomplikowany, ale tak nie jest, wystarczy wyobrazić sobie sposób komunikacji między sprzętem (czujniki i siłowniki) a oprogramowaniem (algorytmy nawigacji, sterowania, wizji komputerowej…). Na przykład, możesz łatwo zamienić aktualny LIDAR na inny model bez przerywania konfiguracji, ponieważ każdy LIDAR publikuje ten sam komunikat LaserScan. ROS jest szeroko stosowany w robotyce, Uruchom swój pierwszy przykład

Odpowiednik "hello world" dla ROS polega na zdalnej obsłudze robota przez zdalny komputer. To, co chcesz zrobić, to wysłać polecenia prędkości, aby uruchomić silniki, polecenia podążają za tym potoku:

  • węzeł turtlebot_teleop, działający na zdalnym komputerze, publikuje temat "/cmd_vel" zawierający wiadomość Twist
  • ta wiadomość jest przekazywana przez sieć wiadomości ROS do SBC
  • węzeł szeregowy umożliwia odbiór "/cmd_vel" na Arduino
  • Arduino odczytuje wiadomość i ustawia prędkość kątową na każdym silniku, aby dopasować żądaną prędkość liniową i kątową robota

Ta operacja jest prosta i można ją wykonać, uruchamiając wymienione powyżej wiersze poleceń! Jeśli chcesz uzyskać bardziej szczegółowe informacje, po prostu obejrzyj wideo.

[SBC]

roscore

[SBC]

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

[Komputer zdalny]

eksportuj TURTLEBOT3_MODEL=${TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Iść dalej

Musisz wiedzieć ostatnią rzecz przed wypróbowaniem wszystkich oficjalnych przykładów w instrukcji za każdym razem, gdy napotkasz to polecenie:

roslaunch turtlebot3_bringup turtlebot3_robot.launch

zamiast tego musisz uruchomić to polecenie na swoim SBC:

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

A jeśli masz LIDAR, uruchom powiązane polecenie na swoim SBC, w moim przypadku uruchamiam LDS01 z poniższą linią:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

I to wszystko, definitywnie zbudowałeś własnego turtlebota:) Jesteś gotowy do odkrycia fantastycznych możliwości ROS oraz do kodowania wizji i algorytmów uczenia maszynowego.

Zalecana: