Einführung
Vor kurzem, während ich an meiner Diplomarbeit arbeitete, stand ich vor der Notwendigkeit, ein Ubuntu-Image für einen Einplatinencomputer mit bereits installiertem ROS zu erstellen (Robot Operating System – das Betriebssystem für Roboter). Kurz gesagt, meine Diplomarbeit widmet sich der Steuerung einer Gruppe von Robotern. Die Roboter sind mit zwei Rädern und drei Abstandssensoren ausgestattet. Alles wird aus ROS gesteuert, das auf der ODROID-C2-Platine läuft.

Roboter Ladybug. Entschuldigung für die schlechte Fotoqualität
Es gab weder Zeit noch Lust, ROS auf jedem Robotermodell separat zu installieren, weshalb die Notwendigkeit für ein System-Image mit bereits installierter ROS entstand. Nach einer Recherche im Internet fand ich einige Ansätze, wie man dies umsetzen könnte.
Insgesamt lassen sich alle gefundenen Lösungen in folgende Gruppen einteilen.
- Programme, die ein Image von einem fertig konfigurierten System erstellen (, , , systemback usw.)
- Projekte, die es ermöglichen, sein eigenes Image zu erstellen (, )
- Das manuelle Erstellen eines Images ( und , plus )
Die Verwendung von Lösungen der ersten Gruppe schien die einfachste und attraktivste Option zu sein, doch gelang es mir nicht, ein Live-System für ODROID zu erstellen. Auch die Lösungen der zweiten Gruppe waren aufgrund des relativ hohen Einstiegsniveaus nicht passend. Das Zusammenbauen nach vorhandenen Tutorials funktionierte ebenfalls nicht, da in meinem Image kein komprimiertes Dateisystem vorhanden war.
Letztendlich stieß ich auf ein Video über chroot (chroot — change root, Link zum Video am Ende des Beitrags) und dessen Möglichkeiten, weshalb ich mich entschloss, es zu verwenden. Im Folgenden werde ich meinen speziellen Fall der Anpassung von Ubuntu für Entwickler in der Robotik beschreiben.
Eckdaten:
- Der gesamte Modifikationsprozess des Images (außer dem Schreiben auf die SD-Karte mit balenaEtcher) fand in der Betriebssystemversion Ubuntu 18.04 statt.
- Das Betriebssystem, dessen Build ich modifiziert habe - Ubuntu 18.04.3 MATE-Desktop-Version.
- Die Maschine, auf der das erstellte System laufen soll - ODROID-C2.
Image-Vorbereitung
Laden Sie das Ubuntu-Image für ODROID von
Entpacken des Archivs
unxz -kvEin Verzeichnis erstellen, in dem wir das Image einhängen werden
mkdir mntWir bestimmen die Partition, auf der sich das Dateisystem befindet
DateiWir suchen nach einer Partition mit einem Dateisystem im ext2-, ext3- oder ext4-Format. Wir benötigen die Adresse des Partitionierungsstarts (rot markiert im Screenshot):

Hinweis. Die Position des Dateisystems kann auch mithilfe des Tools parted.Wir mounten das Image
sudo mount -o loop,offset=$((264192*512)) mnt/Die benötigte Partition beginnt mit Block 264192 (die Zahlen können bei Ihnen abweichen), die Größe eines Blocks beträgt 512 Byte, multiplizieren Sie diese, um den Offset in Bytes zu erhalten.
Wechseln Sie in den Ordner mit dem gemounteten System und chrooten Sie dort.
cd mnt/ sudo chroot ~/livecd/mnt/ bin/sh~/livecd/mnt — vollständiger Pfad zum Verzeichnis des gemounteten Systems
bin/sh — Shell (kann auch durch bin/bash)
Jetzt können wir mit der Installation der notwendigen Pakete und Anwendungen beginnen.
Installation von ROS
Ich habe die neueste Version von ROS (ROS Melodic) gemäß dem .
Aktualisieren Sie die Paketliste
sudo apt-get updateHier hatte ich einen Fehler:
Err:6 http://deb.odroid.in/c2 bionic InRelease Die folgenden Signaturen sind ungültig: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)Dies hängt damit zusammen, dass die Gültigkeit des Schlüssels zum Signieren der Pakete abgelaufen ist. Um die Schlüssel zu aktualisieren, geben Sie ein:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AB19BAC9Wir bereiten das System für die Installation von ROS vor
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 updateWir installieren ROS
Leider konnte ich die Desktop-Version von ROS nicht installieren, deshalb habe ich nur die Basis-Pakete installiert:sudo apt install ros-melodic-ros-base apt search ros-melodicHinweis 1. Während der Installation trat manchmal der folgende Fehler auf:
dpkg: Fehler: konnten keinen Statusdatenbankeintrag zu 'iputils-ping' in '/var/lib/dpkg/status' schreiben: Keine Speicherplätze mehr verfügbarDieser konnte durch das Leeren des apt-Caches behoben werden:
sudo apt-get clean; sudo apt-get autocleanHinweis 2. Nach der Installation muss mit dem Befehl gesourced werden:
source /opt/ros/melodic/setup.bashdas ist nicht möglich, da wir bash nicht gestartet haben, daher sollte dieser Befehl NICHT im Terminal eingegeben werden.
Wir installieren notwendige Abhängigkeiten
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateWir konfigurieren die Zugriffsrechte
Da wir uns als root-Nutzer angemeldet haben und alle Aktionen im Namen des Systems ausführen, wird auch ROS nur mit Superuser-Rechten gestartet.
Beim Versuch, roscore ohne sudo zu starten, tritt folgender Fehler auf:Fehlerprotokoll (letzter Aufruf zuletzt): Datei "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", Zeile 230, in main write_pid_file(options.pid_fn, options.core, options.port) Datei "/opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/__init__.py", Zeile 106, in write_pid_file mit open(pid_fn, "w") als f: IOError: [Errno 13] Zugriff verweigert: '/home/user/.ros/roscore-11311.pid'Um den Fehler zu vermeiden, ändern wir rekursiv die Zugriffsrechte für das Home-Verzeichnis des ROS-Benutzers. Dazu geben wir ein:
sudo rosdep fix-permissionsWir installieren die Pakete rviz und rqt nach:
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Letzte Anpassungen
- Verlassen Sie chroot:
exit - Das Image aushängen
cd .. sudo umount mnt/ - Wir packen das Systemimage in ein Archiv
xz –ckv1
Fertig! Jetzt können Sie mit das Systemimage auf die SD-Karte schreiben, in den ODROID-C2 einsetzen, und Sie haben Ubuntu mit installiertem ROS!
Links:
- Für das Chrooten in Linux und den Zweck hat dieses Video sehr geholfen:

Quelle: habr.com

