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.

Instalowanie ROS w obrazie IMG Ubuntu dla jednej płyty
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.

  1. Programy tworzące obraz z gotowego i skonfigurowanego systemu (Dystrybucja Ubuntu Imager, zestaw na żywo z Linuksem, Linux odpowiada, powrót systemu itp.)
  2. Projekty, które pozwalają na kreację własnego wizerunku (Yocto, Linuksa od zera)
  3. Samodzielne składanie obrazu (personalizacja CD na żywo и Rosyjski odpowiednik, plus artykuł o Habré)

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.

Przygotowanie obrazu

  1. Pobierz obraz Ubuntu dla ODROID z Oficjalna strona

  2. Rozpakowywanie archiwum

    unxz –kv <файл архива с образом>

  3. Utwórz katalog, w którym zamontujemy obraz

    mkdir mnt

  4. 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):

    Instalowanie ROS w obrazie IMG Ubuntu dla jednej płyty

    Uwaga. Za pomocą tego narzędzia można również wyświetlić lokalizację systemu plików rozstał się.

  5. 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.

  6. 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.

  1. 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:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9

  2. Przygotowanie systemu do instalacji ROS

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

    sudo apt update

  3. Instalacja ROSa
    Niestety nie udało mi się zainstalować desktopowej wersji ROS-a, więc zainstalowałem tylko podstawowe pakiety:

    sudo apt install ros-melodic-ros-base
    apt search ros-melodic

    Uwaga 1. Podczas procesu instalacji czasami pojawiał się błąd:

    dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on device

    Zostało to naprawione poprzez wyczyszczenie pamięci podręcznej za pomocą narzędzia apt:

    sudo apt-get clean; sudo apt-get autoclean

    Uwaga 2. Po instalacji pobierz źródło za pomocą polecenia:

    source /opt/ros/melodic/setup.bash

    to nie zadziała, bo Nie uruchomiliśmy basha, więc NIE trzeba go wpisywać w terminalu.

  4. Instalowanie niezbędnych zależności

    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

    sudo apt install python-rosdep

    sudo rosdep init
    rosdep update

  5. 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:

    sudo rosdep fix-permissions

  6. Dodatkowa instalacja pakietów rviz i rqt

    sudo apt-get install ros-melodic-rqt ros-melodic-rviz

Ostatnie poprawki

  1. Wyjdź z chroota:
    exit
  2. Odmontuj obraz
    cd ..
    sudo umount mnt/
  3. Spakujmy obraz systemu do archiwum
    xz –ckv1 <файл образа>

Wszystko! Teraz z pomocą balenaetcher możesz nagrać obraz systemu na kartę SD, włożyć go do ODROID-C2 i będziesz mieć zainstalowany Ubuntu z ROS!

Linki:

  • Ten film bardzo pomógł w tym, jak oszukiwać w systemie Linux i dlaczego jest to potrzebne:



Źródło: www.habr.com

Dodaj komentarz