Lab00-Wprowadzenie

Nowoczesne Sensory w Robotyce

Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej

Laboratorium 0: Wprowadzenie

Powrót do wyboru zajęć

Kontakt

Laboratoria: Stanisław Kuczma mail: stanislaw.kuczma@put.poznan.pl

| Dzień tygodnia | Godziny konsultacji |
| -------------- | ------------------- |
| Poniedziałek   | 11:30 - 12:30       |
| Czwartek       | 12:00 - 13:30       |

Tematyka zajęć

Podczas zajęć w tym semestrze będziemy omawiać, uruchamiać i pracować na danych z następujących sensorów:

Zaliczenie

Zaliczenie będzie składową zadań wykonywanych w trakcie semestru oraz testu końcowego.

Linux 🐧

Źródło: Wikipedia

Linux to wielozadaniowy system operacyjny o otwartym kodzie źródłowym, stanowiący fundament nowoczesnej architektury serwerowej i chmurowej. Dzięki swojej modułowości oraz wysokiej stabilności jest dominującym środowiskiem w profesjonalnych rozwiązaniach IT, systemach wbudowanych oraz superkomputerach.

Przydane polecenia command line interface (CLI):

ROS 2 🦾

Źródło: ROS Media and Visual Assets

Robot Operating System (ROS) – otwartoźródłowa platforma programistyczna do tworzenia oprogramowania sterowania robotów. Jest zbiorem wielu bibliotek pozwalających na sterowanie i symulację pracy robota. Źródło: Wikipedia

Najważniejsze polecenia ROS 2:

Zapoznaj się z dokumentacją ROS 2 dotyczącą podstaw pracy z topicami oraz RViz2.

Docker 🐳

Źródło: Wikipedia

Docker to narzędzie, które pozwala zamknąć Twoją aplikację wraz ze wszystkim, czego potrzebuje do działania (biblioteki, konkretna wersja Pythona, ustawienia systemowe), w jednym „pudełku” zwanym kontenerem. Dzięki temu masz pewność, że projekt uruchomi się tak samo na Twoim laptopie, komputerze w laboratorium uczelnianym czy na serwerze w chmurze.

Można rzucić okiem: Docker na 101

Najważniejsze polecenia Docker: - docker images - listowanie obrazów - docker ps -a - listowanie wszystkich kontenerów - docker exec -it <container_id> bash - wejście do powłoki bash działającego kontenera - docker stop ... - zatrzymanie działającego kontenera

Wiele terminali 🖥️

W praktyce przy pracy z robotami często korzysta się z wielu terminali jednocześnie. Poniżej kilka propozycji narzędzi do zarządzania wieloma terminalami:

ctrl + shift + T - otwiera nową kartę w terminalu Ja osobiscie korzystam z Terminator, który pozwala na podział okna terminala na wiele paneli

Można go zainstalować poleceniem: sudo apt install terminator

VS Code

Kolejnym przydatnym narzędziem jest Visual Studio Code (VS Code) – edytor kodu z wieloma rozszerzeniami do pracy z ROS 2 oraz Dockerem. Program powinien być już zainstalowany na komputerach w laboratorium. Można połączyć się z kontenerem Docker bezpośrednio z poziomu VS Code, co ułatwia edycję plików w środowisku kontenera.

Aby to zrobić, należy zainstalować rozszerzenie Remote - Containers w VS Code. Użyj skrótu Ctrl+P i wpisz:

ext install ms-vscode-remote.remote-containers

Następnie można użyć opcji “Attach to Running Container” z palety poleceń (Ctrl+Shift+P) i wybrać odpowiedni kontener Docker.

Zadania

Zadanie 1: Konfiguracja i uruchomienie kontenera Docker

Pobierz obraz Docker z osrf/ros: humble-desktop-full Uzupełnij poniższy skrypt run.sh, który uruchomi kontener Docker.

Użyj polecenia docker images, aby sprawdzić, czy obraz został pobrany poprawnie oraz uzupełnij zmienne IMAGE_NAME. Dla CONTAINER_NAME użyj swojego numeru indeksu w formie string (np. 123456).

IMAGE_NAME=""
CONTAINER_NAME=""

DOMAIN=${CONTAINER_NAME: -2}

xhost +local:root
XAUTH=/tmp/.docker.xauth
if [ ! -f $XAUTH ]
then
    xauth_list=$(xauth nlist :0 | sed -e 's/^..../ffff/')
    if [ ! -z "$xauth_list" ]
    then
        echo $xauth_list | xauth -f $XAUTH nmerge -
    else
        touch $XAUTH
    fi
    chmod a+r $XAUTH
fi
docker stop $CONTAINER_NAME || true && docker rm $CONTAINER_NAME || true
docker run -it \
    --env="DISPLAY=$DISPLAY" \
    --env="QT_X11_NO_MITSHM=1" \
    --env="ROS_DOMAIN_ID=$DOMAIN" \
    --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
    --env="XAUTHORITY=$XAUTH" \
    --volume="$XAUTH:$XAUTH" \
    --privileged \
    --network=host \
    --name="$CONTAINER_NAME" \
    $IMAGE_NAME \
    /bin/bash

Co się dzieje w tle? Skrypt automatycznie konfiguruje zmienną ROS_DOMAIN_ID. W ROS 2 (DDS) pozwala to na logiczną izolację sieci – dzięki temu będziesz “widzieć” tylko swoje tematy (topics) i węzły, mimo że wszyscy korzystamy z tej samej sieci fizycznej.

Zadanie 2

Wejdź do kontenera w trzech oknach terminala (użyj docker exec -it <container_id> bash). Id kontenera możesz sprawdzić poleceniem docker ps -a, zadziała CONTAINER ID lub NAMES.

W każdym nowo otwartym terminalu musisz załadować środowisko ROS 2: source /opt/ros/humble/setup.bash

Dlaczego trzeba zrobić source?: Każdy terminal to niezależny proces startujący jako „czysta karta”, który nie posiada domyślnej wiedzy o lokalizacji narzędzi ROS 2. Polecenie source konfiguruje niezbędne zmienne środowiskowe, dzięki którym system potrafi poprawnie zinterpretować komendy takie jak ros2 run. Taka izolacja pozwala na bezpieczne zarządzanie wieloma projektami na jednym komputerze bez ryzyka technicznych konfliktów między nimi.

Teraz możesz uruchomić pierwszy węzeł ROS 2: ros2 run turtlesim turtlesim_node

W drugim terminalu uruchom narzędzie do sterowania żółwiem: ros2 run turtlesim turtle_teleop_key

W trzecim terminalu uruchom nagrywanie danych: ros2 bag record -a -o my_first_bag

Teraz możesz sterować żółwiem za pomocą klawiszy strzałek w drugim terminalu.

Wykonaj żółwiem unikalny ruch!

Po zakończeniu naciśnij CTRL+C we wszystkich trzech terminalach, aby zatrzymać węzły i nagrywanie.

Teraz jeśli chcesz odtworzyć nagrane dane, uruchom ponownie ros2 run turtlesim turtlesim_node w jednym terminalu, a w drugim terminalu użyj polecenia:

ros2 bag play my_first_bag

W ten sposób możesz zobaczyć, jak żółw powtarza Twój unikalny ruch!

Proszę wgrać na platformę e-Kursy zrzut ekranu jak żółw wykonał unikalny wzór oraz wynik polecenia ros2 bag info my_first_bag.