Úvod
Nedávno, pri práci na diplomovke, som čelil potrebe vytvoriť obraz Ubuntu pre jednodeskový počítač už s nainštalovaným ROS (Robot Operating System – operačný systém pre roboti). Ak by som to mal zhrnúť, diplom sa zaoberá riadením skupiny robotov. Roboty sú vybavené dvoma kolesami a tromi ultrazvukovými senzormi. Všetko toto sa ovláda z ROS, ktorý beží na doske ODROID-C2.

Robot Ladybug. Prepáčte za zlú kvalitu fotografie
Nemal som čas ani chuť inštalovať ROS na každého robota osobitne, preto vznikla potreba systému s už nainštalovaným ROS. Po prechádzke po internete som našiel niekoľko prístupov, ako by to mohlo byť realizované.
Všeobecne možno všetky nájdené riešenia rozdeliť do nasledujúcich skupín.
- Programy, ktoré vytvárajú obraz z hotového a nastaveného systému (, , , systemback a ďalšie)
- Projekty, ktoré umožňujú vytvoriť svoj vlastný obraz (, )
- Vytvorenie obrazu vlastnoručne ( a , plus )
Použitie riešení z prvej skupiny sa zdalo byť najjednoduchšou a najpríťažlivejšou možnosťou, avšak vytvoriť obraz live-systému pre ODROID sa mi nakoniec nepodarilo. Riešenia druhej skupiny mi taktiež nevyhovovali kvôli dosť vysokému prahu vchodu. Spracovanie podľa dostupných tutoriálov tiež nevyhovovalo, pretože v mojom obraze nebola komprimovaná súborová sústava.
Nakoniec som narazil na video o chroot (chroot — change root, odkaz na video na konci príspevku) a jeho možnosti, rozhodlo sa ho využiť. Nižšie opíšem svoj špecifický prípad prispôsobenia Ubuntu pre vývojárov robotiky.
Základné údaje:
- Celý proces modifikácie obrazu (s výnimkou zápisu na SD kartu pomocou balenaEtcher) sa vykonával v operačnom systéme Ubuntu 18.04.
- Operačný systém, ktorý som modifikoval – Ubuntu 18.04.3 verzia mate desktop.
- Stroj, na ktorom má fungovať zostavený systém – ODROID-C2.
Príprava obrazu
Stiahneme obraz Ubuntu pre ODROID z
Rozbaľujeme archív
unxz –kvVytvárame adresár, do ktorého budeme montovať obraz
mkdir mntUrčíme oddiel, na ktorom sa nachádza súborový systém
fileHľadáme oddiel so súborovým systémom vo formáte ext2, ext3 alebo ext4. Potrebujeme adresu začiatku oddielu (vyznačené červenou na obrazovke):

Poznámka. Umiestnenie súborového systému si môžeme tiež pozrieť pomocou utilitky parted.Pripojíme obraz
sudo mount -o loop,offset=$((264192*512))mnt/Nám známy oddiel začína na bloku 264192 (u vás sa čísla môžu líšiť), veľkosť jedného bloku — 512 bajtov, vynásobíme ich, aby sme získali posun v bajtoch.
Prejdeme do priečinka s pripojeným systémom a chrootujeme sa do neho
cd mnt/ sudo chroot ~/livecd/mnt/ bin/sh~/livecd/mnt — úplná cesta do adresára s pripojeným systémom
bin/sh — shell (môžeme tiež nahradiť na bin/bash)
Teraz sa môžeme už zaoberať inštaláciou potrebných balíkov a aplikácií.
Inštalácia ROS
Inštaloval som ROS poslednej verzie (ROS Melodic) podľa .
Aktualizujeme zoznam balíkov
sudo apt-get updateTu sa mi vyskytla chyba:
Err:6 http://deb.odroid.in/c2 bionic InRelease Nasledujúce podpisy boli neplatné: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)Súvisí to s tým, že platnosť kľúča pre podpis balíkov vypršala. Pre aktualizáciu kľúčov zadajte:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9Pripravujeme systém na inštaláciu 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 updateInštalujeme ROS
Bohužiaľ, nepodarilo sa mi nainštalovať desktop verziu ROS, takže som inštaloval iba základné balíky:sudo apt install ros-melodic-ros-base apt search ros-melodicPoznámka 1. Počas inštalácie sa občas vyskytla chyba:
dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on deviceOpravil som to pomocou vyčistenia cache utilitky apt:
sudo apt-get clean; sudo apt-get autocleanPoznámka 2. Po inštalácii spustíme (source) príkazom:
source /opt/ros/melodic/setup.bashnepôjde, pretože sme nespustili bash, takže ho NETREBA zadávať v termináli.
Inštalujeme potrebné závislosti
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateNastavujeme práva prístupu
Keďže sme chrootli a v podstate vykonávame všetky akcie menom root zbieranej sústavy, ROS sa bude spúšťať len s právami superužívateľa.
Pri pokuse o spustenie roscore bez sudo sa vyskytne chyba:Sledovať (posledný záznam bol): Súbor "\/opt\/ros\/melodic\/lib\/python2.7\/dist-packages\/roslaunch\/__init__.py", riadok 230, v main write_pid_file(options.pid_fn, options.core, options.port) Súbor "\/opt\/ros\/melodic\/lib\/python2.7\/dist-packages\/roslaunch\/__init__.py", riadok 106, v write_pid_file with open(pid_fn, "w") as f: IOError: [Errno 13] Oprávnenie zamietnuté: '\/home\/user\/.ros\/roscore-11311.pid'Aby táto chyba nevznikla, rekurzívne zmeníme práva prístupu k domácemu adresáru používateľa ROS. Na to napíšeme:
sudo rosdep fix-permissionsNainštalujeme balíky rviz a rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Finálne úpravy
- Vychádzame z chroot:
exit - Odmontujeme obraz
cd .. sudo umount mnt\/ - Zabalíme obraz systému do archívu
xz –ckv1
Všetko! Teraz pomocou môžete zapísať obraz systému na SD kartu, vložiť do ODROID-C2 a budete mať Ubuntu so nainštalovaným ROS!
Odkazy:
- S témou ako chrootovať v Linuxe a na čo to treba, veľmi pomohlo toto video:

Zdroj: habr.com

