Inštalácia ROS do obrazu Ubuntu IMG pre jednu dosku
Úvod
Minule som pri práci na svojej diplomovej práci čelil potrebe vytvoriť obraz Ubuntu pre platformu s jednou doskou s už nainštalovaným ROS (Robot Operating System - operačný systém robotov). Stručne povedané, diplom je venovaný riadeniu skupiny robotov. Roboty sú vybavené dvoma kolesami a tromi diaľkomermi. Celé je to riadené z ROS, ktorý beží na doske ODROID-C2.
Robot Lienka. Ospravedlňujeme sa za zlú kvalitu fotografie
Nebol čas ani chuť inštalovať ROS na každého robota jednotlivo, a preto bol potrebný obraz systému s už nainštalovaným ROS. Po prehliadaní internetu som našiel niekoľko prístupov, ako by sa to dalo urobiť.
Vo všeobecnosti možno všetky nájdené riešenia rozdeliť do nasledujúcich skupín.
Použitie riešení z prvej skupiny sa zdalo byť najjednoduchšou a najatraktívnejšou možnosťou, ale nikdy sa mi nepodarilo vytvoriť živý obraz systému pre ODROID. Riešenia druhej skupiny mi tiež nevyhovovali vzhľadom na dosť vysoký vstupný prah. Ručná montáž podľa dostupných návodov tiež nebola vhodná, pretože... Môj obrázok nemal komprimovaný súborový systém.
V dôsledku toho som narazil na video o chroot (chroot - zmena koreňa, odkaz na video na konci príspevku) a jeho schopnosti, bolo rozhodnuté ho použiť. Ďalej opíšem môj konkrétny prípad prispôsobenia Ubuntu pre vývojárov robotiky.
Počiatočné údaje:
Celý proces úpravy obrazu (okrem zápisu na SD kartu pomocou balenaEtcher) prebiehal na operačnom systéme Ubuntu 18.04.
Operačný systém, ktorého zostavu som upravil, je Ubuntu 18.04.3 mate desktop verzia.
Stroj, na ktorom by mal zostavený systém fungovať, je ODROID-C2.
Určite oblasť, na ktorej sa nachádza súborový systém
file <файл образа>
Hľadáme partíciu so súborovým systémom vo formáte ext2, ext3 alebo ext4. Potrebujeme adresu začiatku sekcie (zvýraznená červenou farbou na obrazovke):
Poznámka. Umiestnenie súborového systému je možné zobraziť aj pomocou pomôcky rozlúčili.
Montáž obrazu
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Časť, ktorú potrebujeme, začína blokom 264192 (vaše čísla sa môžu líšiť), veľkosť jedného bloku je 512 bajtov, vynásobte ich, aby ste získali odsadenie v bajtoch.
Prejdite do priečinka s namontovaným systémom a zaveste sa v ňom
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — úplná cesta k adresáru s pripojeným systémom bin/sh - škrupina (možno nahradiť aj za bin/bash)
Teraz môžete začať inštalovať potrebné balíky a aplikácie.
Inštalácia ROS
Nainštaloval som najnovšiu verziu ROS (ROS Melodic) podľa oficiálny návod.
Aktualizácia zoznamu balíkov
sudo apt-get update
Tu som dostal chybu:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Dôvodom je skutočnosť, že platnosť podpisového kľúča balíka vypršala. Ak chcete aktualizovať kľúče, zadajte:
Nastavenie prístupových práv
Keďže sme prihlásení a v skutočnosti vykonávame všetky akcie v mene koreňového adresára zostavovaného systému, ROS sa spustí iba s právami superužívateľa.
Pri pokuse o spustenie roscore bez sudo sa vyskytne chyba:
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 sa chyba nevyskytla, zmeňme rekurzívne prístupové práva do domovského adresára používateľa ROS. Za týmto účelom napíšeme: