ROS telepítése Ubuntu IMG képen egy egylapos számítógéphez

Bevezetés

Néhány nappal ezelőtt, amikor a diplomamunkámon dolgoztam, szembesültem azzal a szükséggel, hogy létrehozzak egy Ubuntu képet egy olyan egylapos számítógéphez, amelyen már telepítve van a ROS (Robot Operating System – robotok operációs rendszere). Röviden szólva, a diplomamunka a robotok csoportjának kezelésére irányul. A robotok két kerékkel és három távolságmérővel vannak felszerelve. Minden ezt a ROS-ból irányítják, amely az ODROID-C2 panelen fut.

ROS telepítése Ubuntu IMG képen egy egylapos számítógéphez
Ladybug robot. Elnézést a rossz minőségű képért

Nem volt sem időm, sem vágyam arra, hogy minden robotra külön telepítsem a ROS-t, ezért szükségem támadt egy olyan rendszerkép létrehozására, amely már telepítve van a ROS-szal. Bár az interneten barangoltam, találtam néhány megoldást arra, hogyan lehetne ezt megtenni.
Összességében az összegyűjtött megoldásokat a következő csoportokba lehet sorolni.

  1. Programok, amelyek képet készítenek egy kész és beállított rendszerből (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback és mások)
  2. Projekteket, amelyek lehetővé teszik a saját kép elkészítését (yocto, linux from scratch)
  3. Kézi összeszerelése a saját kép elkészítése (liveCD testreszabás és orosz analógja, plusz cikk a habr-on)

Az első csoportból való megoldások használata a legegyszerűbb és legvonzóbb opciónak tűnt, azonban a live rendszerképet az ODROID számára nekem nem sikerült létrehoznom. A második csoport megoldásai szintén nem voltak megfelelőek számomra a kellően magas belépési küszöb miatt. A kézi összeszerelés a rendelkezésre álló útmutatók alapján sem volt megfelelő, mivel az én képemben nem volt tömörített fájlrendszer.
Végül, miután rábukkantam egy videóra a chroot (chroot — change root, a videóra mutató hivatkozás a bejegyzés végén) és annak lehetőségeivel kapcsolatban, úgy döntöttem, hogy ezt fogom használni. A következőkben leírom a saját esetemet az Ubuntu testreszabásáról a robotikai fejlesztők számára.

Bemeneti adatok:

  • A kép módosításának egész folyamata (kivéve az SD-kártyára való írást a balenaEtcher segítségével) az Ubuntu 18.04 operációs rendszerben zajlott.
  • Az operációs rendszer, amelynek összerakását módosítottam – Ubuntu 18.04.3 mate desktop verzió.
  • A gép, amelyen az összeszerelt rendszer működni fog – ODROID-C2.

A kép előkészítése

  1. Töltsük le az Ubuntu képet az ODROID számára a Microsoft. Mint mindig, a cég fokozatosan vezeti be az új frissítést. Ezért a hír írása idején a Windows frissítési központban nem biztos, hogy elérhető a Chromium-alapú Edge böngésző letöltési ajánlata. A telepítés után a rendszer újraindítást kér.

  2. Bontsuk ki a ZIP fájlt

    unxz –kv

  3. Hozzunk létre egy könyvtárat, amelybe a képet fogjuk csatolni

    mkdir mnt

  4. Határozzuk meg a partíciót, ahol a fájlrendszer található

    file

    Keressük meg a fájlrendszert ext2, ext3 vagy ext4 formátumban. Szükségünk van a partíció kezdő címére (pirossal kiemelve a képernyőn):

    ROS telepítése Ubuntu IMG képen egy egylapos számítógéphez

    Megjegyzés. A fájlrendszer elhelyezkedését a utility segítségével is megnézhetjük parted.

  5. Csatoljuk a képet

    sudo mount -o loop,offset=$((264192*512))  mnt/

    A szükséges partíció 264192 blokk kezdődik (a számok eltérhetnek), egy blokk mérete 512 bájt, szorozzuk meg őket, hogy megkapjuk a byte-ot méretet.

  6. Navigáljunk a csatolt rendszer mappájába és chroot-oljunk be.

    cd mnt/
    sudo chroot ~/livecd/mnt/ bin/sh

    ~/livecd/mnt — a teljes útvonal a csatolt rendszer könyvtárához
    bin/sh — a shell (ezt szintén helyettesíthetjük bin/bash)
    Most már telepíthetjük a szükséges csomagokat és alkalmazásokat.

ROS telepítése

Én az utolsó verziójú ROS-t (ROS Melodic) telepítettem a hivatalos útmutató alapján.

  1. Frissítjük a csomaglistát

    sudo apt-get update

    Itt hibával találkoztam:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    A következő aláírások érvénytelenek voltak: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)

    Ez a csomagok aláíró kulcsának lejáratával kapcsolatos. A kulcsok frissítéséhez írjuk be:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9

  2. Felkészítjük a rendszert a ROS telepítésére

    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. Telepítjük a ROS-t
    Sajnos nem sikerült a ROS asztali verzióját telepítenem, ezért csak az alap csomagokat telepítettem:

    sudo apt install ros-melodic-ros-base
    apt search ros-melodic

    Megjegyzés 1. A telepítés során néha hiba lépett fel:

    dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on device

    Ezt a cache törlésével javítottam:

    sudo apt-get clean; sudo apt-get autoclean

    Megjegyzés 2. A telepítés után forrásolni kell (source) a következő paranccsal:

    source /opt/ros/melodic/setup.bash

    nem fog működni, mivel nem futtattuk a bash-t, ezért ezt NE írjuk be a terminálba.

  4. Telepítjük a szükséges függőségeket

    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. Beállítjuk a hozzáférési jogokat
    Mivel chroot-oltunk, és gyakorlatilag minden műveletet root joggal végzünk a telepített rendszer nevében, ezért a ROS is csak szuperfelhasználó jogokkal fog futni.
    Ha megpróbálom elindítani a roscore-t sudo nélkül, a következő hiba jelentkezik:

    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'

    A hiba elkerülése érdekében rekurzívan módosítjuk a ROS felhasználó otthoni könyvtárának hozzáférési jogait. Ehhez írjunk be:

    sudo rosdep fix-permissions

  6. Telepítsük a rviz és rqt csomagokat

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

Befejezési simítások

  1. Lépjünk ki a chroot-ból:
    exit
  2. Montsuk le a képet
    cd ..
    sudo umount mnt/
  3. Csomagoljuk a rendszer képét archívumba
    xz –ckv1

Minden kész! Most a az előkészített kártyára való kiírásához. segítségével írhatjuk a rendszer képét az SD-kártyára, behelyezhetjük az ODROID-C2-be, és kész lesz az Ubuntu telepített ROS-szal!

Linkek:

  • A Linux-ban való chroot-olásról és annak hasznáról sokat segített ez a videó:

Videó lejátszása


Forrás: habr.com
Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster