Instalace ROS do IMG obrazu Ubuntu pro jednodeskový počítač

Ú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.

Instalace ROS do IMG obrazu Ubuntu pro jednodeskový počítač
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.

  1. Programy, které vytvářejí obraz z hotového a nastaveného systému (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback a další)
  2. Projektů, které umožňují sestavit vlastní obraz (yocto, linux from scratch)
  3. Ruční sestavení obrazu (customizace liveCD a ruský ekvivalent, plus článek na habru)

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

  1. Stáhněte si obraz Ubuntu pro ODROID z oficiálního webu

  2. Rozbalíme archiv

    unxz –kv

  3. Vytvořte adresář, do kterého budeme montovat obraz

    mkdir mnt

  4. Určujeme oddíl, na kterém se nachází souborový systém

    file

    Hledá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):

    Instalace ROS do IMG obrazu Ubuntu pro jednodeskový počítač

    Poznámka. Umístění souborového systému lze také zjistit pomocí utilitky parted.

  5. 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.

  6. 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 oficiálního tutoriálu.

  1. Aktualizujeme seznam balíčků.

    sudo apt-get update

    Zde 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 AB19BAC9

  2. Př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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

    sudo apt update

  3. Instalujeme 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-melodic

    Pozná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 device

    Opraveno pomocí vyčištění cache nástroje apt:

    sudo apt-get clean; sudo apt-get autoclean

    Poznámka 2. Po instalaci se prosí (source) příkazem:

    source /opt/ros/melodic/setup.bash

    to nepůjde, protože jsme nespustili bash, takže ji NEDÁVEJTE do terminálu.

  4. Instalujeme potřebné závislosti

    sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

    sudo apt install python-rosdep

    sudo rosdep init
    rosdep update

  5. Nastavujeme 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-permissions

  6. Nainstalujeme balíčky rviz a rqt

    sudo apt-get install ros-melodic-rqt ros-melodic-rviz

Finální úpravy

  1. Opouštíme chroot:
    exit
  2. Odmontujeme obraz
    cd ..
    sudo umount mnt/
  3. Zabalíme obraz systému do archivu
    xz –ckv1

Hotovo! Nyní s pomocí balenaEtcher 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:

Přehrát video


Zdroj: habr.com
Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster