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.

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.
- Programe care creează o imagine de sistem gata configurat (, , , systemback și altele)
- Proiecte care permit construirea propriei imagini (, )
- Construirea imaginii manual ( și , plus )
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
Descărcăm imaginea Ubuntu pentru ODROID de la
Dezarhivăm arhiva
unxz –kvCreăm un director în care vom monta imaginea
mkdir mntDefinim partiția pe care se află sistemul de fișiere
fileCă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ă):

Notă. Locația sistemului de fișiere poate fi de asemenea vizualizată cu ajutorul utilitarului parted.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.
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 .
Actualizăm lista de pachete
sudo apt-get updateAici 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 AB19BAC9Pregă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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo apt updateInstală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-melodicNotă 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 deviceA fost rezolvată prin curățarea cache-ului utilitarului apt:
sudo apt-get clean; sudo apt-get autocleanNotă 2. După instalare, trebuie să facem sourcing (source) cu comanda:
source /opt/ros/melodic/setup.bashnu se va putea realiza, deoarece nu am lansat bash, așa că nu trebuie să o tastăm în terminal.
Instalăm dependențele necesare
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateConfigură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-permissionsInstalăm pachetele rviz și rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Retușuri finale
- Ieșim din chroot:
exit - Dezmontăm imaginea
cd .. sudo umount mnt/ - Împachetăm imaginea sistemului într-un arhivă
xz –ckv1
Totul! Acum, cu ajutorul 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:

Sursa: habr.com

