Instalarea ROS în imaginea IMG a Ubuntu pentru placa unică

Introducere

Recent, lucrând la diplomă, m-am confruntat cu necesitatea de a crea o imagine Ubuntu pentru o placă unică cu ROS deja instalat (Robot Operating System – sistemul de operare al roboților). Pe scurt, diploma este dedicată gestionării unui grup de roboți. Roboții sunt echipați cu două roți și trei senzori de distanță. Toate acestea sunt controlate din ROS, care rulează pe placa ODROID-C2.

Instalarea ROS în imaginea IMG a Ubuntu pentru placa unică
Robotul Ladybug. Îmi pare rău pentru calitatea slabă a fotografiei

Nu am avut timp sau dorință să instalez ROS pe fiecare robot în parte, motiv pentru care am avut nevoie de o imagine a sistemului cu ROS deja instalat. După câteva cercetări pe internet, am găsit câteva abordări despre cum ar putea fi realizat acest lucru.
În general, toate soluțiile găsite pot fi împărțite în următoarele grupuri.

  1. Programe care creează o imagine de sistem gata configurat (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback și altele)
  2. Proiecte care permit construirea propriei imagini (yocto, linux from scratch)
  3. Construirea imaginii manual (personalizarea liveCD și analogul rusesc, plus articol pe Habr)

Utilizarea soluțiilor din primul grup părea cea mai simplă și atrăgătoare opțiune, cu toate acestea, nu am reușit să creez o imagine live pentru ODROID. Soluțiile din al doilea grup, de asemenea, nu mi s-au potrivit din cauza unei bariere de acces destul de ridicate. Construirea manual, conform tutorialelor disponibile, nu era de asemenea o opțiune viabilă, deoarece în imaginea mea nu exista un sistem de fișiere comprimat.
În rezultatul unei descoperiri a unui videoclip despre chroot (chroot – schimbă rădăcina, linkul către videoclip la sfârșitul postării) și posibilitățile sale, s-a decis utilizarea acestuia. Mai departe, voi descrie cazul meu specific de personalizare a Ubuntu pentru dezvoltatorii de robotică.

Datele inițiale:

  • Întregul proces de modificare a imaginii (cu excepția scrierii pe cardul SD folosind balenaEtcher) s-a desfășurat în sistemul de operare Ubuntu 18.04.
  • Sistemul de operare a cărui construcție am modificat – Ubuntu 18.04.3 versiunea desktop mate.
  • Mașina pe care ar trebui să funcționeze sistemul construit – ODROID-C2.

Pregătirea imaginii

  1. Descărcăm imaginea Ubuntu pentru ODROID de la site-ul oficial

  2. Dezarhivăm arhiva

    unxz –kv

  3. Creăm un director în care vom monta imaginea

    mkdir mnt

  4. Definim partiția pe care se află sistemul de fișiere

    file

    Căutăm partiția cu sistem de fișiere în format ext2, ext3 sau ext4. Avem nevoie de adresa de început a partiției (evidențiată în roșu în captură):

    Instalarea ROS în imaginea IMG a Ubuntu pentru placa unică

    Notă. Locația sistemului de fișiere poate fi de asemenea vizualizată cu ajutorul utilitarului parted.

  5. Montăm imaginea

    sudo mount -o loop,offset=$((264192*512))  mnt/

    Partiția de care avem nevoie începe de la blocul 264192 (numerele pot varia), dimensiunea unui bloc este de 512 octeți, le multiplicăm pentru a obține offset-ul în octeți.

  6. Trecem în folderul cu sistemul montat și ne schimbăm în el

    cd mnt/
    sudo chroot ~/livecd/mnt/ bin/sh

    ~/livecd/mnt — calea completă către directorul cu sistemul montat
    bin/sh — shell (poate fi înlocuit și cu bin/bash)
    Acum putem începe să instalăm pachetele și aplicațiile necesare.

Instalarea ROS

Am instalat ultima versiune ROS (ROS Melodic) conform tutorialului oficial.

  1. Actualizăm lista de pachete

    sudo apt-get update

    Aici am întâmpinat o eroare:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    Următoarele semnături au fost invalide: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)

    Aceasta este legată de expirarea cheii pentru semnarea pachetelor. Pentru a actualiza cheile, tastăm:

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

  2. Pregătim sistemul pentru instalarea 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. Instalăm ROS
    Din păcate, nu am reușit să instalez versiunea desktop a ROS, așa că am instalat doar pachetele de bază:

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

    Notă 1. În timpul instalării, uneori a apărut o eroare:

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

    A fost rezolvată prin curățarea cache-ului utilitarului apt:

    sudo apt-get clean; sudo apt-get autoclean

    Notă 2. După instalare, trebuie să facem sourcing (source) cu comanda:

    source /opt/ros/melodic/setup.bash

    nu se va putea realiza, deoarece nu am lansat bash, așa că nu trebuie să o tastăm în terminal.

  4. Instalăm dependențele necesare

    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. Configurăm permisiunile de acces
    Deoarece ne aflăm în chroot și, practic, executăm toate acțiunile în numele root-ului sistemului inițial, ROS va fi lansat doar cu privilegii de superutilizator.
    La încercarea de a lansa roscore fără sudo apare eroarea:

    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'

    Pentru a evita erorile, vom schimba recursiv permisiunile directorului personal al utilizatorului ROS. Pentru aceasta, tastăm:

    sudo rosdep fix-permissions

  6. Instalăm pachetele rviz și rqt

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

Retușuri finale

  1. Ieșim din chroot:
    exit
  2. Dezmontăm imaginea
    cd ..
    sudo umount mnt/
  3. Împachetăm imaginea sistemului într-un arhivă
    xz –ckv1

Totul! Acum, cu ajutorul balenaEtcher puteți scrie imaginea sistemului pe un card SD, să-l introduceți în ODROID-C2, iar voi veți avea Ubuntu cu ROS instalat!

Linkuri:

  • Ceea ce m-a ajutat foarte mult să înțeleg cum să fiu în chroot în Linux și pentru ce este necesar, este acest videoclip:

Redați video


Sursa: habr.com
Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster