Installation von ROS im IMG-Format von Ubuntu für Einplatinencomputer

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.

Installation von ROS im IMG-Format von Ubuntu für Einplatinencomputer
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.

  1. Programme, die ein Image von einem fertig konfigurierten System erstellen (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback usw.)
  2. Projekte, die es ermöglichen, sein eigenes Image zu erstellen (yocto, linux from scratch)
  3. Das manuelle Erstellen eines Images (liveCD-Anpassung und deutsche Entsprechung, plus Artikel auf Habré)

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

  1. Laden Sie das Ubuntu-Image für ODROID von der offiziellen Webseite

  2. Entpacken des Archivs

    unxz -kv

  3. Ein Verzeichnis erstellen, in dem wir das Image einhängen werden

    mkdir mnt

  4. Wir bestimmen die Partition, auf der sich das Dateisystem befindet

    Datei

    Wir suchen nach einer Partition mit einem Dateisystem im ext2-, ext3- oder ext4-Format. Wir benötigen die Adresse des Partitionierungsstarts (rot markiert im Screenshot):

    Installation von ROS im IMG-Format von Ubuntu für Einplatinencomputer

    Hinweis. Die Position des Dateisystems kann auch mithilfe des Tools parted.

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

  6. 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 offiziellen Tutorial.

  1. Aktualisieren Sie die Paketliste

    sudo apt-get update

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

  2. Wir 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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

    sudo apt update

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

    Hinweis 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ügbar

    Dieser konnte durch das Leeren des apt-Caches behoben werden:

    sudo apt-get clean; sudo apt-get autoclean

    Hinweis 2. Nach der Installation muss mit dem Befehl gesourced werden:

    source /opt/ros/melodic/setup.bash

    das ist nicht möglich, da wir bash nicht gestartet haben, daher sollte dieser Befehl NICHT im Terminal eingegeben werden.

  4. Wir installieren notwendige Abhängigkeiten

    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. Wir 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-permissions

  6. Wir installieren die Pakete rviz und rqt nach:

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

Letzte Anpassungen

  1. Verlassen Sie chroot:
    exit
  2. Das Image aushängen
    cd ..
    sudo umount mnt/
  3. Wir packen das Systemimage in ein Archiv
    xz –ckv1

Fertig! Jetzt können Sie mit balenaEtcher 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:

Video abspielen


Quelle: habr.com
Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster