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.

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.
- Programok, amelyek képet készítenek egy kész és beállított rendszerből (, , , systemback és mások)
- Projekteket, amelyek lehetővé teszik a saját kép elkészítését (, )
- Kézi összeszerelése a saját kép elkészítése ( és , plusz )
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
Töltsük le az Ubuntu képet az ODROID számára a
Bontsuk ki a ZIP fájlt
unxz –kvHozzunk létre egy könyvtárat, amelybe a képet fogjuk csatolni
mkdir mntHatározzuk meg a partíciót, ahol a fájlrendszer található
fileKeressü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):

Megjegyzés. A fájlrendszer elhelyezkedését a utility segítségével is megnézhetjük parted.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.
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 .
Frissítjük a csomaglistát
sudo apt-get updateItt 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 AB19BAC9Felké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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo apt updateTelepí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-melodicMegjegyzé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 deviceEzt a cache törlésével javítottam:
sudo apt-get clean; sudo apt-get autocleanMegjegyzés 2. A telepítés után forrásolni kell (source) a következő paranccsal:
source /opt/ros/melodic/setup.bashnem fog működni, mivel nem futtattuk a bash-t, ezért ezt NE írjuk be a terminálba.
Telepítjük a szükséges függőségeket
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateBeá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-permissionsTelepítsük a rviz és rqt csomagokat
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Befejezési simítások
- Lépjünk ki a chroot-ból:
exit - Montsuk le a képet
cd .. sudo umount mnt/ - Csomagoljuk a rendszer képét archívumba
xz –ckv1
Minden kész! Most a 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ó:

Forrás: habr.com

