Installazione di ROS in un'immagine Ubuntu IMG per scheda singola

Introduzione

L'altro giorno, mentre lavoravo alla mia tesi, mi sono trovato di fronte alla necessità di creare un'immagine Ubuntu per una piattaforma a scheda singola con ROS già installato (Sistema operativo del robot: sistema operativo del robot). In breve, il diploma è dedicato alla gestione di un gruppo di robot. I robot sono dotati di due ruote e tre telemetri. Il tutto è controllato da ROS, che gira sulla scheda ODROID-C2.

Installazione di ROS in un'immagine Ubuntu IMG per scheda singola
Coccinella robot. Ci scusiamo per la scarsa qualità della foto

Non c'era né tempo né voglia di installare ROS su ciascun robot individualmente, e quindi era necessaria un'immagine di sistema con ROS già installato. Dopo aver esplorato Internet, ho trovato diversi approcci su come eseguire questa operazione.
In generale, tutte le soluzioni trovate possono essere suddivise nei seguenti gruppi.

  1. Programmi che creano un'immagine da un sistema già pronto e configurato (Distrosha Ubuntu Imager, kit live di Linux, respin di Linux, systemback, ecc.)
  2. Progetti che ti permettono di creare la tua immagine (Yocto, Linux da zero)
  3. Assemblare l'immagine da soli (personalizzazione del CD live и Equivalente russo, un vantaggio articolo su Habré)

L'utilizzo delle soluzioni del primo gruppo sembrava essere l'opzione più semplice e interessante, ma non sono mai riuscito a creare un'immagine del sistema live per ODROID. Anche le soluzioni del secondo gruppo non mi andavano bene a causa della soglia di ingresso piuttosto alta. Anche il montaggio manuale secondo i tutorial disponibili non era adatto, perché... La mia immagine non aveva un file system compresso.
Di conseguenza, mi sono imbattuto in un video su chroot (chroot: cambia radice, link al video a fine post) e le sue capacità, si è deciso di utilizzarlo. Successivamente descriverò il mio caso particolare di personalizzazione di Ubuntu per gli sviluppatori di robotica.

Contesto:

  • L'intero processo di modifica dell'immagine (ad eccezione della scrittura sulla scheda SD utilizzando balenaEtcher) è stato eseguito sul sistema operativo Ubuntu 18.04.
  • Il sistema operativo di cui ho modificato l'assembly è Ubuntu 18.04.3 mate versione desktop.
  • La macchina su cui dovrebbe funzionare il sistema assemblato è ODROID-C2.

Preparazione dell'immagine

  1. Scarica l'immagine Ubuntu per ODROID da sito ufficiale

  2. Disimballaggio dell'archivio

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

  3. Crea una directory in cui monteremo l'immagine

    mkdir mnt

  4. Determinare la partizione su cui si trova il file system

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

    Cerchiamo una partizione con un file system in formato ext2, ext3 o ext4. Abbiamo bisogno dell'indirizzo di inizio sezione (evidenziato in rosso sullo schermo):

    Installazione di ROS in un'immagine Ubuntu IMG per scheda singola

    Nota. La posizione del file system può essere visualizzata anche utilizzando l'utilità parted.

  5. Montaggio dell'immagine

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

    La sezione di cui abbiamo bisogno inizia con il blocco 264192 (i tuoi numeri potrebbero differire), la dimensione di un blocco è 512 byte, moltiplicali per ottenere il rientro in byte.

  6. Vai alla cartella con il sistema montato e esci al suo interno

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

    ~/livecd/mnt — percorso completo della directory con il sistema montato
    bidone/sh - shell (può anche essere sostituito con cestino/bash)
    Ora puoi iniziare a installare i pacchetti e le applicazioni necessari.

Installazione di ROS

Ho installato l'ultima versione di ROS (ROS Melodic) secondo tutorial ufficiale.

  1. Aggiornamento dell'elenco dei pacchetti

    sudo apt-get update

    Qui è dove ho ricevuto l'errore:

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

    Ciò è dovuto al fatto che la chiave di firma del pacchetto è scaduta. Per aggiornare le chiavi, digitare:

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

  2. Preparazione del sistema per l'installazione di 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. Installazione di ROS
    Purtroppo non sono riuscito ad installare la versione desktop di ROS, quindi ho installato solo i pacchetti base:

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

    Nota 1 Durante il processo di installazione a volte si verificava un errore:

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

    Il problema è stato risolto svuotando la cache utilizzando l'utilità apt:

    sudo apt-get clean; sudo apt-get autoclean

    Nota 2 Dopo l'installazione, esegui il source utilizzando il comando:

    source /opt/ros/melodic/setup.bash

    non funzionerà, perché Non abbiamo eseguito bash, quindi NON è necessario digitarlo nel terminale.

  4. Installazione delle dipendenze necessarie

    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. Impostazione dei diritti di accesso
    Poiché abbiamo effettuato l'accesso e, di fatto, eseguiamo tutte le azioni per conto della root del sistema in fase di assemblaggio, ROS verrà avviato solo con diritti di superutente.
    Quando si tenta di eseguire roscore senza sudo, si verifica un errore:

    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'

    Per evitare che si verifichi l'errore, modifichiamo ricorsivamente i diritti di accesso alla directory home dell'utente ROS. Per fare ciò digitiamo:

    sudo rosdep fix-permissions

  6. Installazione aggiuntiva dei pacchetti rviz e rqt

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

Tocchi finali

  1. Esci da chroot:
    exit
  2. Smonta l'immagine
    cd ..
    sudo umount mnt/
  3. Comprimiamo l'immagine di sistema in un archivio
    xz –ckv1 <файл образа>

Tutto! Ora con l'aiuto balena incisore puoi masterizzare l'immagine del sistema su una scheda SD, inserirla in ODROID-C2 e avrai Ubuntu con ROS installato!

Links:

  • Questo video ti ha aiutato molto su come imbrogliare in Linux e perché ne hai bisogno:



Fonte: habr.com

Aggiungi un commento