Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

themin 19 Mar 2017 23:46
  • Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

    Cześć!

    Przedstawiony robot mobilny został wyposażony w system autonomicznej nawigacji działający w środowisku ROS i wykorzystujący sensor Microsoft Kinect oraz kilka innych czujników. Platforma posiada cztery niezależnie napędzane koła i jest stosunkowo niewielkich rozmiarów. Szerokość oraz długość nie przekraczają 35 cm, a wysokość wraz z sensorem Kinect wynosi około 50 cm.

    Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

    Pierwszą wersję robota, czyli platformę mobilną bez dodatkowego komputera i sensora Kinect przedstawiałem już wcześniej, w tym wpisie . Jest ona wyposażona w komputer Raspberry Pi, a ponadto umieszczono w jej wnętrzu  szereg sensorów i cztery silniki prądu stałego (DC) od firmy Pololu.

    Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

    Dla potrzeb systemu autonomicznej nawigacji platforma została rozbudowana o dodatkowy (tymczasowy) komputer (notebook, Intel Core i3, RAM 4GB), a także sensor Kinect wraz z odpowiednimi mocowaniami. Poniżej znajduje się diagram przedstawiający architekturę sprzętową robota, natomiast opis poszczególnych elementów można znaleźć w poprzednim wpisie dotyczącym pierwszej wersji robota.

    Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

    Architektura systemu sterowania

    Układ sterowania robota ma strukturę wielowarstwową i został zrealizowany z wykorzystaniem kilku jednostek obliczeniowych. Jednym z wymagań dla systemu sterowania niskopoziomowego jest realizacja zadań w czasie rzeczywistym. Spełnienie takich wymagań zrealizowano przez implementację algorytmów na mikrokontrolerze Kinetis. W przypadku sterowania wysokiego poziomu, kluczową kwestią nie było zapewnienie działania w czasie rzeczywistym. Zresztą w obecnej konfiguracji robota, warunek ten nie mógłby zostać spełniony, ze względu na zastosowanie niedeterministycznych interfejsów komunikacyjnych, jak: Ethernet, czy USB. Na poniższym diagramie przedstawiono architekturę systemu sterowania robota.

    Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

    Warstwa sterowania wysokiego poziomu zrealizowana została w środowisku ROS w wersji Indigo. Jego zaletą jest zapewnienie mechanizmów komunikacji dla tworzonego oprogramowania umożliwiających uruchamianie komponentów na wielu maszynach jednocześnie, praktycznie bez dodatkowych nakładów pracy. Z tego powodu część komponentów systemu, głównie związanych z obsługą sterowników niskopoziomowych uruchamiano na komputerze Raspberry Pi. Urządzenie to oparte jest na procesorze ARM i działa pod kontrolą systemu Raspbian. W przypadku drugiego komputera, system sterowania uruchamiano na Ubuntu 14.04 x64 LTS. Poszczególne komponenty systemu sterowania wysokiego poziomu zrealizowane zostały w postaci węzłów (ang. node). Węzły komunikują się ze sobą za pomocą mechanizmu zwanego tematami (ang. topics). 
     
    Opisy wybranych komponentów znajdują się poniżej, a po informacje odnośnie pozostałych odsyłam do źródeł (na końcu), które można znaleźć na mojej stronie.
     
    Hardware driver
    Komponent w postaci dedykowanego sterownika podzespołów robota. Realizowane przez komponent zadania są następujące:
    - przesyłanie komend sterujących z tematu /cmd_vel do sterownika niskiego poziomu, czyli modułu sterowania silnikami,
    - pobieranie danych odometrycznych, zawierających względną pozycję i prędkości robota, ze sterownika niskopoziomowego oraz publikowanie ich w temacie /wheels_odom,
    - pobieranie z modułu sensorów danych uzyskanych z czujników inercyjnych i magnetometru oraz publikowanie ich w tematach: /imu/raw_data/imu_mag.

    Komponent uruchamiany jest na komputerze Raspberry Pi, a komunikacja z modułami niskiego poziomu wykorzystuje magistralę I2C. Został on napisany w języku C++, przy czym do obsługi magistrali I2C wykorzystywana jest biblioteka bcm2835 , służąca do obsługi niektórych funkcji procesora Broadcom BCM 2835, w który wyposażony został Raspberry Pi.

    Laser scan from Kinect
    Oprogramowanie konwertuje mapę głębi otrzymywaną z sensora Kinect do postaci wiadomości sensor_msgs/LaserScan. Dodatkowo, umożliwia usuwanie podłoża z wynikowych danych oraz kompensację kąta pochylenia sensora. Komponent był rozwijany przeze mnie w ramach projektu ReMeDi i został udostępniony jako część pakietu depth_nav_tools na stronie ROS'a.

    Navigation
    Odpowiednio skonfigurowany, standardowy pakiet środowiska ROS, realizujący zadania nawigacji.

    Testy systemu autonomicznej nawigacji

    Poniżej znajdują się wycinki interfejsu graficznego wizualizującego robota i tworzoną mapę, a także utworzoną mapę pomieszczenia.

    Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS
    Czterokołowy robot mobilny z systemem autonomicznej nawigacji w środowisku ROS

    Przeprowadzone testy pokazały, że możliwe jest zarówno tworzenie map z wykorzystaniem sensora Kinect jak i autonomiczne poruszanie się robota po otoczeniu. Niestety, problemy sprawiają ograniczenia sensora Kinect takie jak: niewielkie kąty widzenia oraz niewielki zasięg. Powoduje to, że czasami robot ma problemy z odnalezieniem się na mapie.

    Źródła:
    - Michał Drwięga. Bezkolizyjna nawigacja w pomieszczeniu robotem mobilnym wyposażonym w czujnik Kinect. Praca magisterska, Politechnika Wrocławska, Wrocław, 2015

    - Michał Drwięga. Fuzja sygnałów sensorycznych dla potrzeb lokalizacji kołowego robota mobilnego. Praca inżynierska , Politechnika Wrocławska, Wrocław, 2013

    Więcej informacji można znaleźć na mojej stronie www.mdrwiega.com .

  • #2 20 Mar 2017 00:07
    szymon122
    Poziom 34  

    Gratuluję świetnego projektu!
    Ciekawi mnie fakt zastosowania dwóch komputerów. Co nie umożliwiło zrealizowanie tego na samym RPi?
    Chcąc zabrać się za podobny temat ale jako sensora użyć kamerki internetowej mam szansę "udźwignąć" to na raspberry pi zero? Nie mam pojęcia ile zasobów potrzebują algorytmy orientacji w przestrzeni, przetwarzanie danych z kamery itp.
    Czy twój robót oprócz zamieszczonych map potrafi tworzyć mapy 3D?

  • #3 21 Mar 2017 09:44
    themin
    Poziom 10  

    Dzięki. Jeżeli chodzi o RPi, to przy wersji 2B mocy obliczeniowej wystarcza na to, aby pobrać dane z Kinecta i ewentualnie zrobić jakieś proste przetwarzanie. Niestety, na uruchomienie algorytmu SLAM (np. gmapping), czy samej lokalizacji (AMCL) jest to znacznie za mało. Być może odpowiednia optymalizacja algorytmów trochę by pomogła, ale nie zagłębiałem się w to.

    Odnośnie kamery na RPi zero (który jest niewiele mocniejszy od RPi 1A), obawiam się, że będzie ciężko (chyba, że piszesz wszystko od zera i odpowiednio zoptymalizujesz). Oczywiście dużo zależy od tego, jakim algorytmem chcesz wykrywać cechy otoczenia i czy potrzebujesz, aby całość działała w czasie rzeczywistym (a może pozbierasz dane i uruchomisz algorytm offline?).

    Do tworzenia map 3d próbowałem używać algorytmu RGB-DSLAM, aczkolwiek przy większym otoczeniu nie działa za szybko.