Installieren von ROS in einem Ubuntu IMG-Image für ein einzelnes Board

Einführung

Als ich neulich an meiner Abschlussarbeit arbeitete, stand ich vor der Notwendigkeit, ein Ubuntu-Image für eine Single-Board-Plattform mit bereits installiertem ROS zu erstellen (Roboter-Betriebssystem – Roboter-Betriebssystem). Kurz gesagt, das Diplom ist der Führung einer Gruppe von Robotern gewidmet. Die Roboter sind mit zwei Rädern und drei Entfernungsmessern ausgestattet. Gesteuert wird das Ganze über ROS, das auf dem ODROID-C2-Board läuft.

Installieren von ROS in einem Ubuntu IMG-Image für ein einzelnes Board
Roboter-Marienkäfer. Entschuldigung für die schlechte Fotoqualität

Es bestand weder Zeit noch Lust, ROS auf jedem Roboter einzeln zu installieren, und daher bestand Bedarf an einem System-Image mit bereits installiertem ROS. Nachdem ich im Internet gestöbert hatte, fand ich mehrere Ansätze, wie dies bewerkstelligt werden könnte.
Generell lassen sich alle gefundenen Lösungen in die folgenden Gruppen einteilen.

  1. Programme, die ein Image aus einem vorgefertigten und konfigurierten System erstellen (Distroshare Ubuntu Imager, Linux-Live-Kit, Linux Respin, Systemback usw.)
  2. Projekte, mit denen Sie Ihr eigenes Bild erstellen können (yocto, Linux von Grund auf)
  3. Bild selbst zusammenstellen (Live-CD-Anpassung и Russisches Äquivalentplus Artikel über Habré)

Die Verwendung von Lösungen aus der ersten Gruppe schien die einfachste und attraktivste Option zu sein, aber ich war nie in der Lage, ein Live-System-Image für ODROID zu erstellen. Auch die Lösungen der zweiten Gruppe gefielen mir aufgrund der recht hohen Einstiegshürde nicht. Auch die manuelle Montage nach den verfügbaren Tutorials war nicht geeignet, weil... Mein Image hatte kein komprimiertes Dateisystem.
Als Ergebnis stieß ich auf ein Video über Chroot (chroot – Root ändern, Link zum Video am Ende des Beitrags) und seine Möglichkeiten, wurde beschlossen, es zu verwenden. Als nächstes werde ich meinen speziellen Fall der Anpassung von Ubuntu für Robotikentwickler beschreiben.

Hintergrund:

  • Der gesamte Bildänderungsprozess (außer dem Schreiben auf die SD-Karte mit balenaEtcher) wurde auf dem Betriebssystem Ubuntu 18.04 durchgeführt.
  • Das Betriebssystem, dessen Assembly ich geändert habe, ist die Mate-Desktop-Version von Ubuntu 18.04.3.
  • Die Maschine, auf der das zusammengebaute System funktionieren soll, ist ODROID-C2.

Vorbereiten des Bildes

  1. Laden Sie das Ubuntu-Image für ODROID herunter von offizielle Seite

  2. Entpacken des Archivs

    unxz –kv <файл архива с образом>

  3. Erstellen Sie ein Verzeichnis, in dem wir das Image mounten

    mkdir mnt

  4. Bestimmen Sie die Partition, auf der sich das Dateisystem befindet

    file <файл образа>

    Wir suchen eine Partition mit einem Dateisystem im ext2-, ext3- oder ext4-Format. Wir benötigen die Adresse des Abschnittsanfangs (rot hervorgehoben auf dem Bildschirm):

    Installieren von ROS in einem Ubuntu IMG-Image für ein einzelnes Board

    Hinweis. Der Speicherort des Dateisystems kann auch mit dem Dienstprogramm angezeigt werden geteilt.

  5. Mounten des Bildes

    sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/

    Der von uns benötigte Abschnitt beginnt mit Block 264192 (Ihre Zahlen können abweichen). Die Größe eines Blocks beträgt 512 Bytes. Multiplizieren Sie diese, um die Einrückung in Bytes zu erhalten.

  6. Gehen Sie in den Ordner mit dem gemounteten System und bleiben Sie darin hängen

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

    ~/livecd/mnt — vollständiger Pfad zum Verzeichnis mit dem gemounteten System
    bin/sh - Schale (kann auch ersetzt werden durch bin/bash)
    Jetzt können Sie mit der Installation der erforderlichen Pakete und Anwendungen beginnen.

ROS installieren

Ich habe die neueste Version von ROS (ROS Melodic) installiert offizielles Tutorial.

  1. Aktualisierung der Paketliste

    sudo apt-get update

    Hier habe ich den Fehler erhalten:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>

    Dies liegt daran, dass der Paketsignaturschlüssel abgelaufen ist. Geben Sie Folgendes ein, um die Schlüssel zu aktualisieren:

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

  2. Vorbereiten des Systems für die Installation von 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. ROS installieren
    Leider konnte ich die Desktop-Version von ROS nicht installieren, daher habe ich nur die Basispakete installiert:

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

    Anmerkung 1. Während des Installationsvorgangs ist manchmal ein Fehler aufgetreten:

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

    Das Problem wurde behoben, indem der Cache mit dem Dienstprogramm apt geleert wurde:

    sudo apt-get clean; sudo apt-get autoclean

    Anmerkung 2. Nach der Installation verwenden Sie den folgenden Befehl:

    source /opt/ros/melodic/setup.bash

    es wird nicht funktionieren, weil Wir haben Bash nicht ausgeführt, daher muss es NICHT im Terminal eingegeben werden.

  4. Installieren der erforderlichen 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. Zugriffsrechte einrichten
    Da wir angemeldet sind und tatsächlich alle Aktionen im Namen des Stammverzeichnisses des zusammenzubauenden Systems ausführen, wird ROS nur mit Superuser-Rechten gestartet.
    Beim Versuch, Roscore ohne Sudo auszuführen, tritt ein Fehler auf:

    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'

    Um das Auftreten des Fehlers zu verhindern, ändern wir die Zugriffsrechte auf das Home-Verzeichnis des ROS-Benutzers rekursiv. Dazu geben wir Folgendes ein:

    sudo rosdep fix-permissions

  6. Zusätzliche Installation der Pakete rviz und rqt

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

Letzter Schliff

  1. Chroot beenden:
    exit
  2. Hängen Sie das Image aus
    cd ..
    sudo umount mnt/
  3. Packen wir das Systemabbild in ein Archiv
    xz –ckv1 <файл образа>

Alle! Jetzt mit der Hilfe balena Etcher Sie können das Systemabbild auf eine SD-Karte brennen, es in ODROID-C2 einlegen und schon haben Sie Ubuntu mit ROS installiert!

Links:

  • Dieses Video hat mir sehr dabei geholfen, wie man unter Linux betrügt und warum man es braucht:



Source: habr.com

Kommentar hinzufügen