Instalowanie ROS w obrazie IMG Ubuntu dla jednej płyty
Wprowadzenie
Któregoś dnia podczas pracy nad pracą dyplomową stanąłem przed koniecznością stworzenia obrazu Ubuntu dla platformy jednopłytowej z zainstalowanym już ROS-em (System operacyjny robota – system operacyjny robota). Krótko mówiąc, dyplom poświęcony jest zarządzaniu grupą robotów. Roboty są wyposażone w dwa koła i trzy dalmierze. Całość sterowana jest z poziomu ROS-a, który działa na płycie ODROID-C2.
Robotyczna Biedronka. Przepraszamy za słabą jakość zdjęcia
Nie było czasu ani chęci na instalowanie ROS-u na każdym robocie z osobna, w związku z czym zaistniała potrzeba stworzenia obrazu systemu z już zainstalowanym ROS-em. Przeglądając Internet, znalazłem kilka sposobów, jak można to zrobić.
Ogólnie rzecz biorąc, wszystkie znalezione rozwiązania można podzielić na następujące grupy.
Korzystanie z rozwiązań z pierwszej grupy wydawało się najprostszą i najbardziej atrakcyjną opcją, jednak nigdy nie udało mi się stworzyć obrazu systemu na żywo dla ODROID. Rozwiązania z drugiej grupy również mi nie odpowiadały ze względu na dość wysoki próg wejścia. Ręczny montaż według dostępnych poradników też się nie nadawał, bo... Mój obraz nie miał skompresowanego systemu plików.
W rezultacie natknąłem się na film o chroot (chroot - zmień root, link do filmu na końcu wpisu) i jego możliwości, postanowiono z niego skorzystać. Następnie opiszę mój konkretny przypadek dostosowywania Ubuntu dla programistów robotyki.
Linia bazowa:
Cały proces modyfikacji obrazu (poza zapisem na kartę SD za pomocą balenaEtcher) został wykonany na systemie operacyjnym Ubuntu 18.04.
System operacyjny, którego zestaw zmodyfikowałem, to wersja komputerowa Ubuntu 18.04.3 mate.
Maszyna na której powinien pracować zmontowany system to ODROID-C2.
Określ partycję, na której znajduje się system plików
file <файл образа>
Poszukujemy partycji z systemem plików w formacie ext2, ext3 lub ext4. Potrzebujemy adresu początku sekcji (zaznaczony na ekranie na czerwono):
Uwaga. Za pomocą tego narzędzia można również wyświetlić lokalizację systemu plików rozstał się.
Montaż obrazu
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Sekcja, której potrzebujemy, zaczyna się od bloku 264192 (twoje liczby mogą się różnić), rozmiar jednego bloku wynosi 512 bajtów, pomnóż je, aby otrzymać wcięcie w bajtach.
Przejdź do folderu z zamontowanym systemem i spędzaj w nim czas
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — pełna ścieżka do katalogu z zamontowanym systemem kosz/sz - powłoka (można również zastąpić bin/bash)
Teraz możesz rozpocząć instalację niezbędnych pakietów i aplikacji.
Instalacja ROSa
Zainstalowałem najnowszą wersję ROS (ROS Melodic) wg oficjalny poradnik.
Aktualizacja listy pakietów
sudo apt-get update
Tutaj pojawił się błąd:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Wynika to z faktu, że klucz do podpisywania pakietu wygasł. Aby zaktualizować klucze, wpisz:
Konfigurowanie praw dostępu
Ponieważ jesteśmy zalogowani i tak naprawdę wykonujemy wszystkie czynności w imieniu roota montowanego systemu, ROS zostanie uruchomiony tylko z uprawnieniami superużytkownika.
Podczas próby uruchomienia roscore bez sudo pojawia się błąd:
Traceback (most recent call last): File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 230, in main write_pid_file(options.pid_fn, options.core, options.port) File "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", line 106, in write_pid_file with open(pid_fn, "w") as f: IOError: [Errno 13] Permission denied: '/home/user/.ros/roscore-11311.pid'
Aby zapobiec wystąpieniu błędu, zmieńmy rekurencyjnie prawa dostępu do katalogu domowego użytkownika ROS. W tym celu wpisujemy: