Instalace ROS do obrazu Ubuntu IMG pro jednu desku
úvod
Onehdy jsem při práci na své diplomové práci stál před potřebou vytvořit image Ubuntu pro platformu s jednou deskou s již nainstalovaným ROS (Robot Operating System - operační systém robota). Stručně řečeno, diplom je věnován řízení skupiny robotů. Roboti jsou vybaveni dvěma koly a třemi dálkoměry. Celé je to řízeno z ROS, který běží na desce ODROID-C2.
Robot Beruška. Omlouváme se za špatnou kvalitu fotografie
Nebyl čas ani chuť instalovat ROS na každého robota jednotlivě, a proto byla potřeba obraz systému s již nainstalovaným ROS. Po procházení internetu jsem našel několik přístupů, jak by se to dalo udělat.
Obecně lze všechna nalezená řešení rozdělit do následujících skupin.
Použití řešení z první skupiny se zdálo být nejjednodušší a nejatraktivnější možností, ale nikdy se mi nepodařilo vytvořit živý obraz systému pro ODROID. Řešení druhé skupiny mi také nevyhovovalo kvůli dost vysokému vstupnímu prahu. Ruční montáž podle dostupných návodů také nebyla vhodná, protože... Můj obrázek neměl komprimovaný systém souborů.
V důsledku toho jsem narazil na video o chrootu (chroot - změna kořene, odkaz na video na konci příspěvku) a jeho možnostech, bylo rozhodnuto jej použít. Dále popíšu svůj konkrétní případ přizpůsobení Ubuntu pro vývojáře robotiky.
Zdrojová data:
Celý proces úpravy obrazu (kromě zápisu na SD kartu pomocí balenaEtcher) byl proveden na operačním systému Ubuntu 18.04.
Operační systém, jehož sestavu jsem upravil, je verze Ubuntu 18.04.3 mate pro stolní počítače.
Stroj, na kterém by měl sestavený systém fungovat, je ODROID-C2.
Vytvořte adresář, do kterého budeme obraz připojovat
mkdir mnt
Určete oddíl, na kterém je umístěn systém souborů
file <файл образа>
Hledáme oddíl se souborovým systémem ve formátu ext2, ext3 nebo ext4. Potřebujeme adresu začátku sekce (na obrazovce zvýrazněnou červeně):
Poznámka. Umístění systému souborů lze také zobrazit pomocí nástroje rozdělil se.
Montáž obrazu
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
Sekce, kterou potřebujeme, začíná blokem 264192 (vaše čísla se mohou lišit), velikost jednoho bloku je 512 bajtů, vynásobte je, abyste získali odsazení v bajtech.
Přejděte do složky s připojeným systémem a pověste se v ní
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — úplná cesta k adresáři s připojeným systémem bin/sh - shell (lze také nahradit bin/bash)
Nyní můžete začít instalovat potřebné balíčky a aplikace.
Instalace ROS
Nainstaloval jsem nejnovější verzi ROS (ROS Melodic) podle oficiální návod.
Aktualizace seznamu balíčků
sudo apt-get update
Tady jsem dostal chybu:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Důvodem je skutečnost, že platnost podpisového klíče balíčku vypršela. Chcete-li aktualizovat klíče, zadejte:
Nastavení přístupových práv
Protože jsme přihlášeni a ve skutečnosti provádíme všechny akce jménem root sestavovaného systému, bude ROS spuštěn pouze s právy superuživatele.
Při pokusu o spuštění roscore bez sudo dojde 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 k chybě nedošlo, změňme rekurzivně přístupová práva k domovskému adresáři uživatele ROS. K tomu zadáme: