Lab00-Wprowadzenie
Nowoczesne Sensory w Robotyce
Politechnika Poznańska, Instytut Robotyki i Inteligencji Maszynowej
Laboratorium 0: Wprowadzenie
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:
- Kamera RGB
- Kamera RGB-D
- AHRS
- Skaner laserowy LiDAR 3D
- GPS, DGPS
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):
lsmkdirtouchcdpwdcatsudosudo apt install ...ifconfignano / vimgrepwget--help
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:
source /opt/ros/humble/setup.bashsource ~/ros2_ws/install/setup.bashros2 launchros2 topic listros2 topic echoros2 topic inforos2 node listros2 node info -vros2 bag recordros2 bag playrviz2colcon build --symlink-install
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
docker build -t <image_name> .- budowa obrazu z Dockerfiledocker cp path/to/file/on/host <CONTAINER NAME>:path/to/file/in/container- kopiowanie plików między hostem a konteneremdocker rm ...- usunięcie zatrzymanego konteneradocker rmi ...- usunięcie obrazu
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.