Úvod
Nedávno, když jsem pracoval na diplomce, jsem se setkal s potřebou vytvořit obraz Ubuntu pro jednodeskový počítač s již nainstalovaným ROS (Robot Operating System – operační systém pro roboty). Ve zkratce, diplomka se věnuje řízení skupiny robotů. Roboti jsou vybaveni dvěma koly a třemi ultrazvukovými snímači. Vše se řídí prostřednictvím ROS, který běží na desce ODROID-C2.

Robot Ladybug. Omlouvám se za špatnou kvalitu fotografie
Neměl jsem čas ani chuť instalovat ROS na každý robot zvlášť, a proto vznikla potřeba vytvořit systémový obraz s již nainstalovaným ROS. Po prozkoumání internetu jsem našel několik přístupů, jak to udělat.
Obecně lze všechna nalezená řešení rozdělit do následujících skupin.
- Programy, které vytvářejí obraz z hotového a nastaveného systému (, , , systemback a další)
- Projektů, které umožňují sestavit vlastní obraz (, )
- Ruční sestavení obrazu ( a , plus )
Použití řešení z první skupiny se zdálo jako nejjednodušší a nejatraktivnější varianta, nicméně vytvořit obraz live systému pro ODROID se mi nepodařilo. Řešení druhé skupiny mi také nevyhovovala kvůli poměrně vysoké obtížnosti. Ruční sestavení podle dostupných tutoriálů také nevyhovovalo, protože v mém obraze nebyl komprimovaný souborový systém.
Nakonec, když jsem narazil na video o chroot (chroot – change root, odkaz na video je na konci příspěvku) a jeho možnostech, bylo rozhodnuto jej použít. Dále popíši svůj konkrétní případ customizace Ubuntu pro vývojáře robotiky.
Výchozí údaje:
- Celý proces úpravy obrazu (kromě zápisu na SD kartu pomocí balenaEtcher) probíhal v operačním systému Ubuntu 18.04.
- Operační systém, jehož sestavení jsem modifikoval – Ubuntu 18.04.3 verze mate desktop.
- Stroj, na kterém má sestavený systém fungovat – ODROID-C2.
Příprava obrázku
Stáhněte si obraz Ubuntu pro ODROID z
Rozbalíme archiv
unxz –kvVytvořte adresář, do kterého budeme montovat obraz
mkdir mntUrčujeme oddíl, na kterém se nachází souborový systém
fileHledáme oddíl se souborovým systémem ve formátu ext2, ext3 nebo ext4. Potřebujeme adresu začátku oddílu (vyznačeno červeně na snímku):

Poznámka. Umístění souborového systému lze také zjistit pomocí utilitky parted.Připojujeme obraz
sudo mount -o loop,offset=$((264192*512)) mnt/Naše požadovaná část začíná na bloku 264192 (mohou se vám čísla lišit), velikost jednoho bloku je 512 bajtů, vynásobíme je, abychom získali posun v bajtech.
Přejdeme do složky se připojeným systémem a chrootneme se do ní.
cd mnt/ sudo chroot ~/livecd/mnt/ bin/sh~/livecd/mnt — úplná cesta k adresáři se připojeným systémem
bin/sh — shell (můžete také nahradit bin/bash)
Nyní se již můžeme věnovat instalaci potřebných balíčků a aplikací.
Instalace ROS
Instaloval jsem ROS poslední verze (ROS Melodic) podle .
Aktualizujeme seznam balíčků.
sudo apt-get updateZde jsem narazil na chybu:
Err:6 http://deb.odroid.in/c2 bionic InRelease Následující podpisy byly neplatné: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)Je to způsobeno tím, že platnost klíče pro podepisování balíčků vypršela. Pro obnovu klíčů zadáme:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9Připravujeme systém na instalaci 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 updateInstalujeme ROS
Bohužel se mi nepodařilo nainstalovat desktopovou verzi ROS, takže jsem instaloval pouze základní balíčky:sudo apt install ros-melodic-ros-base apt search ros-melodicPoznámka 1. Během instalace se občas vyskytla chyba:
dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on deviceOpraveno pomocí vyčištění cache nástroje apt:
sudo apt-get clean; sudo apt-get autocleanPoznámka 2. Po instalaci se prosí (source) příkazem:
source /opt/ros/melodic/setup.bashto nepůjde, protože jsme nespustili bash, takže ji NEDÁVEJTE do terminálu.
Instalujeme potřebné 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 přístupu
Protože jsme se chrootnuli a vlastně provádíme všechny akce pod jménem root vytvářené soustavy, tak ROS také poběží pouze s právy superuživatele.
Při pokusu spustit roscore bez sudo došlo k chybě: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 se chyba nevyskytovala, rekursivně změníme práva přístupu k domovskému adresáři uživatele ROS. Pro to zadáme:
sudo rosdep fix-permissionsNainstalujeme balíčky rviz a rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Finální úpravy
- Opouštíme chroot:
exit - Odmontujeme obraz
cd .. sudo umount mnt/ - Zabalíme obraz systému do archivu
xz –ckv1
Hotovo! Nyní s pomocí můžete napsat obraz systému na SD kartu, vložte ji do ODROID-C2 a budete mít Ubuntu s nainstalovaným ROS!
Odkazy:
- S tím, jak chrootovat v linuxu a k čemu to je, mi velmi pomohlo toto video:

Zdroj: habr.com

