Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Uniwersalny sterownik robota - RoboCORE

Ptolek 18 Lut 2015 21:30 8868 17
  • Uniwersalny sterownik robota - RoboCORE

    Cześć!
    Chciałbym przedstawić projekt, który powstawał przez ostatnie 1,5 roku. Na początku wspomnę, że nie tworzyłem go sam – zaczynaliśmy projekt w 2 osoby. Ale o tym napiszę dalej. Najpierw opowiem o samym projekcie.

    Pierwotne założenia
    Celem było stworzenie uniwersalnego sterownika do robotyki. Wraz z kolegą dobrze nam szło budowanie wszelkich konstrukcji, ponieważ nasze kompetencje uzupełniały się; ja zajmowałem się sprzętem, a on oprogramowaniem. W pewnym momencie postanowiliśmy zrobić osobny projekt, czyli uniwersalne „serce” dla robotów.

    1. Sterownik ma być kompatybilny z LEGO MINDSTORMS (NXT/EV3).
    2. Ma obsługiwać nieco więcej silników i sensorów, niż NXT/EV3.
    3. Ma mieć łączność z internetem, aby dało się sterować robotem z dowolnego miejsca na świecie.
    4. Aby dało się nim zdalnie sterować, to musi mieć też kamerę.
    5. Ma być kontrolowany przez system operacyjny czasu rzeczywistego, aby wszelkie algorytmy kontrolne mogły się wykonywać w czasie rzeczywistym.

    Próbowaliśmy spełnić te założenia na wiele sposobów, podglądając równocześnie rozwiązania innych.
    Pierwsza wersja sterownika o nazwie UGVC 0.8.0 (Unmanned Ground Vehicle Controller) i przykładowy robot wyglądały tak:
    Uniwersalny sterownik robota - RoboCORE Uniwersalny sterownik robota - RoboCORE Uniwersalny sterownik robota - RoboCORE

    Ostateczny projekt bardzo różni się od pierwszego :)
    Od razu wyjaśniam też, że pewnych szczegółów nie mogę podać, bo schemat elektryczny urządzenia jest na razie pod ochroną.

    Opis konstrukcji – Hardware
    Mózgiem sterownika jest 144-nóżkowy mikrokontroler STM32F4 z 1MB pamięci Flash i 196KB RAM. Wybraliśmy ten mikrokontroler z jednego powodu – nie znaleźliśmy na rynku innego mikrokontrolera, który miałby aż 6 sprzętowych interfejsów dla enkoderów kwadraturowych (dla niewtajemniczonych: Link). Poza tym jest to bardzo wydajny mikrokontroler z wieloma peryferiami, świetnie nadający się do automatyki i robotyki.





    Sterownik w kolejnej wersji – UGVC 0.8.1:

    Uniwersalny sterownik robota - RoboCORE

    Zasilanie
    Cały sterownik w pierwszych prototypach miał zakres napięć zasilania od 6 do 10V, co ograniczało możliwości jego wykorzystania w konstrukcjach zasilanych napięciem 12V, ale wystarczało do zapewnienia kompatybilności z LEGO. Ograniczeniem były scalone mostki H – po prostu wtedy nie udało nam się znaleźć odpowiednio małych i dobrych. Układy na bipolarnych tranzystorach typu L293 odpadły z urzędu. W końcu znaleźliśmy odpowiednie mostki i w kolejnych prototypach zakres napięć zasilających obejmuje 12V (maksymalnie 14V).
    Wejście sterownika ma 3 zabezpieczenia:
    - nadprądowe (resetowalny bezpiecznik polimerowy),
    - nadnapięciowe (odcina powyżej 14V),
    - przed odwrotną polaryzacją.
    Napięcie wejściowe bezpośrednio zasila mostki H oraz trafia na dodatkowe złącza rozszerzeń, dzięki czemu dodatkowe moduły mogą czerpać prąd z wydajnego źródła.
    Dalej napięcie trafia na przetwornicę step-down 5V 2,5A. Stąd czerpane jest m.in. zasilanie portów USB. Część cyfrowa jest zasilana napięciem 3,3V, które uzyskujemy ze stabilizatora liniowego.

    Sterownik w wersji 0.8.2:
    Uniwersalny sterownik robota - RoboCORE

    Silniki
    Jako drivery silników pracują scalone, podwójne mostki H o maksymalnym prądzie wyjściowym 1,3A (na jeden mostek) i napięciu zasilania 6-14V. Razem można podłączyć 6 silników z enkoderem lub bez. Alternatywnie można wykorzystać dwa mostki H do sterowania jednym silnikiem krokowym, czyli maksymalnie możemy użyć 3 silników krokowych. W każdym 6-pinowym złączu silnika są dwa wejścia dla enkoderów, wyjście mostka H i zasilanie 5V (dla enkoderów).

    Sensory
    Wejścia dla sensorów, podobnie jak porty silników, zostały zbudowane tak, aby były kompatybilne z sensorami LEGO. Każde złącze ma 6 pinów: GPIO/ADC/IRQ, GND, GND, +5V, GPIO1, GPIO2. Piny GPIO mają też sprzętowy interfejs UART lub I2C jako funkcję alternatywną.

    Złącza – kompatybilność z LEGO
    Jak pewnie wiedzą wszyscy użytkownicy zestawów LEGO MINDSTORMS, złącza użyte w tym zestawie są nietypowe. Są podobne do wtyków modularnych 6P6C (dla porównania - wtyki 6P2C używane są w telefonii stacjonarnej), ale mają niesymetrycznie umieszczony zatrzask:
    Uniwersalny sterownik robota - RoboCORE
    Zdecydowaliśmy, że złącza w naszym sterowniku będą typowe, ponieważ łatwo zrobić kabelki, które na jednym końcu mają standardową wtyczkę 6P6C, a z drugiej kompatybilną z LEGO:
    Uniwersalny sterownik robota - RoboCORE
    Jednocześnie, jeśli ktoś nie chce korzystać z podzespołów LEGO, to zaciskarki typowych wtyków 6P6C i same wtyki są łatwo dostępne.

    Sterownik w wersji 0.9.0 (sterownik od tej wersji miał budowę kanapkową):
    Uniwersalny sterownik robota - RoboCORE Uniwersalny sterownik robota - RoboCORE Uniwersalny sterownik robota - RoboCORE

    Kamera
    Początkowo byliśmy skuszeni interfejsem DCMI, jaki posiada STM32F4 i pierwsze prototypy używały kamery MTD9D111, która na 8-bitowym wyjściu równoległym przekazywała ramki ciągłego obrazu w formacie JPEG. Doszliśmy jednak do wniosku, że kamera ta nie jest tania, jest mało popularna i nie ma też za bardzo alternatyw. Dlatego w najnowszej wersji postanowiliśmy podejść do tematu kamery w inny sposób.

    Po pierwsze, większość smartfonów/tabletów posiada kamerę i Wi-Fi gratis. Dlaczego by tego nie wykorzystać? Owszem, są jeszcze droższe niż osobna kamera, ale za to często leżą nieużywane, bo wyszedł nowszy model itp. Podłączamy taki smartfon do naszego sterownika przez USB i za jednym zamachem załatwiamy łączność z internetem, widok z kamery i dodatkowo mamy wyświetlacz. Gdybyśmy próbowali te 3 rzeczy kupować oddzielnie to tak naprawdę wyszłoby jeszcze drożej.

    Po drugie, do sterownika w wersji 0.9.5 można podłączyć moduł Intel Edison. Jest to coś podobnego do RaspberryPi, ale dużo mniejsze i nie ma wyprowadzonych żadnych złącz, ma tylko jeden 70-pinowy interfejs. Za to można do niego podłączyć kamerę na USB i wykorzystując pokładowego Linuxa przesyłać obraz za pośrednictwem wbudowanego Wi-Fi.

    Po trzecie i ostatnie – możemy po prostu podłączyć RaspberryPi przez port USB.

    W każdym z tych rozwiązań dodatkowe urządzenie realizuje funkcje komunikacyjne, a nasz sterownik realizuje całą automatykę w czasie rzeczywistym. Korzystając z modułu Intel Edison praktycznie nie zwiększają się rozmiary sterownika.

    Wi-Fi
    Zanim doszliśmy do wniosku, żeby modułu Wi-Fi w ogóle nie montować w wersji bazowej ze względu na inne możliwości, testowaliśmy dwa moduły Wi-Fi. Jeden z nich to moduł firmy Redpine Signals RS9110-N-11-02. Sprawował się bardzo dobrze, jednak jest to już przestarzały i drogi moduł. Potem trafiliśmy na Bluegiga WF121A – tańszy i nowocześniejszy. Pewnie byśmy przy nim pozostali, gdyby nie zmiana koncepcji. No to tyle o Wi-Fi :)

    Sterownik w wersji 0.9.1:
    Uniwersalny sterownik robota - RoboCORE

    PCB
    Wszystkie obwody drukowane projektowałem w Eagle. Niestety, nie mogę udostępnić dokładnego schematu ani wzoru PCB, ale opiszę parę faktów.
    Wszystkie prototypy zamawialiśmy w firmie Eurocircuits (www.eurocircuits.com). Bardzo polecam szczególnie ze względu na funkcję „PCB Visualizer” czyli podgląd gerberów online. Można też bezpośrednio załadować projekt z Eagle. I nie jest drożej niż w Polsce przy porównywalnej technologii. Jedyne, co wychodzi im moim zdaniem słabo, to warstwa opisowa. Jest trwała, ale odwzorowanie szczegółów słabe – lepiej wypadła pod tym względem firma Hatron z Krakowa, w której zamawialiśmy obwody do sterownika serwomechanizmów (moduł dodatkowy).
    Obwód drukowany jest 4-warstwowy, z czego jedna warstwa to płaszczyzna masy. Najwęższe ścieżki mają 8 milsów, przelotki 0,3mm. Wszystkie prototypy do tej pory lutowane były ręcznie, ale najnowsza będzie przystosowana do montażu automatycznego.
    Poniżej animacja przedstawiająca etapy projektowania PCB (jako ciekawostka) - trzeba kliknąć, miniaturka nie jest animowana.
    Uniwersalny sterownik robota - RoboCORE

    Najnowsza wersja – 0.9.5
    Podsumuję teraz wersja najnowsza co ma na pokładzie:
    - 32-bitowy mikrokontroler STM32F4,
    - 6 mostków H dla silników DC z enkoderami (kompatybilne z LEGO),
    - 5 portów z interfejsami I2C, UART, ADC - do łączenia z sensorami (kompatybilne z LEGO),
    - dwa uniwersalne złącza rozszerzeń hExt (zawierają 9x GPIO, ADC, SPI, I2C, UART),
    - dwa złącza USB – host i device,
    - slot na kartę microSD,
    - port CAN,
    - złącze SWD do debuggowania,
    - złącze dla modułu Intel Edison (więcej informacji: http://www.intel.pl/content/www/pl/pl/do-it-yourself/edison.html ).

    Łączność z naszą chmurą może być realizowana na przynajmniej 3 sposoby:
    - za pośrednictwem smartfona/tabletu, który łączy się ze sterownikiem przez port USB – wtedy gratis mamy też kamerę i wyświetlacz,
    - z wykorzystaniem modułu Intel Edison – dzięki temu mamy na pokładzie komputer z Linuxem, Wi-Fi, Bluetooth i dodatkowym portem USB,
    - za pośrednictwem dowolnego komputera jednopłytkowego, np. RaspberryPi (podłączany kablem USB).

    A tak wygląda najnowszy prototyp (RoboCORE 0.9.5):
    Uniwersalny sterownik robota - RoboCORE Uniwersalny sterownik robota - RoboCORE Uniwersalny sterownik robota - RoboCORE

    Software
    Od samego początku biblioteki do niskopoziomowej obsługi peryferiów pisane są w C oraz C++. Wykorzystaliśmy system operacyjny czasu rzeczywistego FreeRTOS, który zapewnia realizację algorytmów sterujących w ścisłych ramach czasowych. Największe wyzwania w czasie rozwoju oprogramowania:
    1. Obsługa kamery MJPEG z interfejsem DCMI i przesyłanie obrazu do modułu Wi-Fi w czasie rzeczywistym z wykorzystaniem DMA. Udało się osiągnąć kilkanaście klatek na sekundę i wyświetlać je w oknie przeglądarki:
    Uniwersalny sterownik robota - RoboCORE
    2. Napisanie bibliotek do obsługi dwóch modułów Wi-Fi, przy czym ostatecznie i tak z nich zrezygnowaliśmy. Wspomnę tutaj o problemie z modułem Bluegiga WF121, który niby ma interfejsy SPI oraz UART. Na początku planowaliśmy korzystać z SPI, po czym okazało się, że działa zbyt wolno i czasem coś gubi po drodze. Potem użyliśmy UART-a z wykorzystaniem linii RTS/CTS i działało to dużo lepiej, ale wymagało przeprojektowania PCB i przemapowania wyprowadzeń procesora w inny sposób (a piny mieliśmy wszystkie wykorzystane).
    3. Oprogramowanie robotów demonstracyjnych, w tym dwóch robotów balansujących. Roboty mogłyby być tematem na osobny projekt, ale nie chcę tu mieszać.
    4. Stworzenie prostych w użyciu bibliotek w C++. Poniżej przykład kodu, który wystarcza do oprogramowania najprostszego robota do teleobecności* :

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    * - Robot do teleobecności (telepresence) jest to w najprostszej wersji Skype na kółkach. Cała idea telepresence opiera się o wykorzystania zdobyczy technologii do stworzenia wrażenia zdalnej obecności człowieka, począwszy od możliwości poruszania się robotem z kamerą i wyświetlaczem w dowolnym miejscu na ziemi, skończywszy na możliwościach ingerencji w otoczenie i jak najlepsze odwzorowanie „funkcji” i zmysłów człowieka.

    Podsumowanie
    Teraz parę słów wyjaśnienia dlaczego nie mogę udostępnić schematów. Projekt zaczynaliśmy tworzyć zupełnie prywatnie, ale w międzyczasie udało nam się zainteresować nim inwestora, a po pewnym okresie dalszego rozwoju projekt pokazaliśmy na Kickstarterze:
    https://www.kickstarter.com/projects/1992634922/robocore-the-heart-of-your-personal-robot
    O ile kod do naszego robotycznego frameworku na mikrokontroler STM32 będzie otwarty (po zakończonej sukcesem kampanii na Kickstarterze), to jeszcze nie wiemy czy i w jakim stopniu projekt będzie „open hardware” – na razie nie jest.

    Prośba do moderatorów:
    Nie traktujcie tego jak reklamę. Co prawda jednym z celów tego tematu jest to, aby dotarł do większej liczby osób i liczymy na to, że ktoś może nas dodatkowo wesprzeć. W zamian jednak pokazuję przykład pokazujący drogę od hobbystycznego projektu do próby jego skomercjalizowania. Dodatkowo część zdjęć i informacji, które tu podałem, nie była jeszcze nigdzie publikowana.


    Prawdę mówiąc, chciałbym w przyszłości ujrzeć na Elektrodzie (i nie tylko) więcej tego typu tematów, bo wierzę, że są na swój sposób wartościowe. Dla mnie myśl o tym, że inni rodacy też próbują i będą próbować skomercjalizować swoje pomysły i projekty (również hardware-owe) jest optymistyczna :).


    Fajne!
  • #2 18 Lut 2015 21:46
    Urgon
    Poziom 36  

    AVE...

    Ja mam takie głupie pytanie: dlaczego ta płytka ma taki nietypowy kształt? Czy to wymóg kompatybilności z LEGO?

  • #3 18 Lut 2015 22:48
    Hoptymista
    Poziom 13  

    Z opisu zrozumiałem, że płytka ma przypominać serce.

  • #5 19 Lut 2015 13:59
    Daniel_dan
    Poziom 14  

    Witam, proponuje się zainteresować siecią li-fi, według mnie byłaby dobra alternatywa dla fal elektromagnetycznych, a przy tym nie ma zakłóceń i dość nowoczesne rozwiązanie, tzn. nawet 30 robotów w jednej hali...

  • #6 19 Lut 2015 15:33
    LOTR2
    Poziom 11  

    Chciałbym przypomnieś, że światło to też rodziaj fali elektromagnetycznej. Zakłócenia też mogą występować i wydaje się, że wi-fi daje większą swobode co do pozycji nadajnik-odbiornik.

    A co do porjektu to bardzo mi się podoba. Widac, że dużo pracy zostało włożone w rozwój. Dość ciekawe jest też to, iż sprzęt posiada obudowe i opracowany został od razu zestaw bibliotek i framework do rozwoju oprogramowania.

  • #7 20 Lut 2015 07:24
    Ptolek
    Poziom 36  

    Dzięki za opinie.
    Kształt płytki faktycznie ma przypominać biologiczne serce. Gdyby chodziło tylko o względy techniczne, to faktycznie, pewnie byłaby prostokątna albo prawie prostokątna. Choć taki kształt ma tę zaletę, że kiedy antenę modułu Edison umieści się w wycięciu, to długość krawędzi dostępnej do "obsadzenia" różnymi złączami jest stosunkowo duża przy tej powierzchni PCB. A płytka mogłaby być bez problemu mniejsza, ale złącza dyktują taki a nie inny jej rozmiar.
    Jest też okrojona wersja sterownika - wersja mini, o kwadratowym kształcie. Ma nieco mniej portów, ale za to ma wbudowany sterownik dla 6-ciu serwomechanizmów.

  • #8 21 Lut 2015 22:46
    treker
    Poziom 25  

    Projekt ciekawy, ale przyznam szczerze, że nie rozumiem dlaczego płytka zawiera potężny STM32 + Intel Edison. Czytałem wszystkie opisy, ale już trochę się gubię. Mógłbyś w skrócie podsumować za co odpowiadają poszczególne układy? Który z układów programowana jest przez użytkownika?

  • #9 22 Lut 2015 12:29
    Ptolek
    Poziom 36  

    Intel Edison (a na nim system Linux) odpowiada za komunikację przez Wi-Fi lub Bluetooth oraz za funkcje multimedialne (kamera na USB, dźwięk). Zamiast Intel Edisona RoboCORE może współpracować z telefonem komórkowym lub tabletem, który będzie pełnił te same funkcje.

    STM32F4 zawiera system operacyjny czasu rzeczywistego FreeRTOS. Opdowiada za wszystkie funkcje mechaniczne (sterowanie silnikami), sygnały z sensorów, komunikację po sieci CAN, odczyt/zapis na kartę SD, komunikację z modułami rozszerzeń, kontrolę nad systemem, zasilaniem i za wszystko, co musi być kontrolowane w czasie rzeczywistym. Pamięć FLASH mikrokontrolera STM32F4 może być przeprogramowywana za pośrednictwem modułu Intel Edison, telefonu komórkowego lub przez sprzętowy debugger (interfejs SWD).

    Takie połączenie zapewnia bezkompromisowe sterowanie całym robotem w czasie rzeczywistym (wszystko, co dzieje się autonomicznie). W STM-ie wykonują się m.in. funkcje regulatorów PID dla każdego silnika. Intel Edison przejmuje funkcje, które zbytnio obciążałyby STM-a, a dzięki Linuksowi (i masie dostępnego oprogramowania) ma duże możliwości.

  • #10 22 Lut 2015 13:28
    treker
    Poziom 25  

    Dzięki za wyjaśnienie. Robiliście jakieś praktyczne testy, z których wynikało, że F4 nie poradzi sobie równolegle z Bluetoothem i WiFi?

  • #11 22 Lut 2015 15:35
    Ptolek
    Poziom 36  

    Radził sobie bez większych problemów z przesyłaniem obrazu z kamery przez Wi-Fi, ale zrezygnowaliśmy z tego z kilku przyczyn:
    - interfejs kamery DCMI blokował trochę fajnych interfejsów procesora,
    - takie kamery nie są powszechnie dostępne, a szczególnie ciężko o taką, która przesyłałaby bardziej skompresowany obraz (przesyłanie MJPEG-a nie jest najlepszym rozwiązaniem),
    - i tak nastawiliśmy się na wykorzystywanie smartfona/tabletu/zewnętrznego komputerka z Linuksem - czy to Edison czy RaspberryPi,
    - resztę już wyjaśniłem wcześniej lub są to jakieś drobne powody :)

  • #12 13 Mar 2015 08:21
    Ptolek
    Poziom 36  

    No, to udało się przekroczyć próg!
    https://www.kickstarter.com/projects/1992634922/robocore-the-heart-of-your-personal-robot

    Uwagi w dalszym ciągu są mile widziane :) Choć elektronika już jest w końcowej fazie projektowania, to wszelkie sugestie mogą być pomocne. Chcemy stworzyć jak najlepszy produkt a do tego niezbędne jest "sprzężenie zwrotne".

  • #14 13 Mar 2015 13:25
    treker
    Poziom 25  

    Obserwowałem kampanie regularnie, powolutku, powolutku, ale udało się dojść do celu, chociaż miałem wątpliwości na początku, bo nie było zbyt dużego zainteresowania. Gratulacje :)

  • #15 16 Mar 2015 11:35
    papas
    Poziom 2  

    Widziałem Was na jednym z programów TV i to jest dobry strzał bo dzieci od razu pytały czy mogę im takiego "robotcika" kupić. Moim zdaniem ruch w kierunku "fajnych zabawek" jest trafiony i musi być bardziej nagłośniony by trafić z tym pod "strzechy" i by mieć środki przekształcać go w bardzo poważne projekty. Tylko obawiam się o niektóre lobby czy dacie radę się przebić przez koncerny...
    Gratulacje i Serdeczne pozdrowienia

  • #16 30 Mar 2015 14:20
    henxa
    Poziom 9  

    A kiedy można będzie sobie już kupić to urządzenie do testów. Mam nadzieje że osiągnie taki sam lub większy sukces jak raspberry pi.

  • #17 31 Mar 2015 22:07
    Ptolek
    Poziom 36  

    Kupić można już w przedsprzedaży, ale nie mogę w tym dziale dać linka do odpowiedniej strony ;)
    W tym momencie szykujemy kilkanaście egzemplarzy, na których będą prowadzone laboratoria na jednej z uczelni :) myślę, że to będzie niezły test dla wczesnej wersji, na razie z jednostkowej produkcji. Opracowujemy półautomatyczny tester (jeszcze nie ICT) do dużego i małego RoboCORE, rozwijamy software, prowadzimy rozmowy z dostawcami, podpisujemy umowy z firmami i szukamy inwestora dla przyspiszenia rozwoju.
    Jak już wszystko się uda, to więcej tematów pojawi się gdy rzeczywiście ludzie zaczną tego używać. Do tej pory staraliśmy się przede wszystkim zebrać opinie i sprzężenie zwrotne. Kampania na Kickstarterze też była dobrą lekcją, bo w komentarzach dowiedzieliśmy się dużo o tym do czego ludzie chcieliby wykorzystać RoboCORE'a. Zadawane przez nich pytania pozwoliły nam m.in. stwierdzić jakie akcesoria byłyby najbardziej pożądane.

  • #18 01 Kwi 2015 07:37
    henxa
    Poziom 9  

    Zamówiłem już sobie ale szkoda że dostawa dopiero w wrześniu. :(
    Pozdrawiam! :)

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo