Installazione di ROS in un'immagine IMG di Ubuntu per schede a singolo chip

Introduzione

Recentemente, mentre lavoravo alla tesi, mi sono trovato di fronte alla necessità di creare un'immagine di Ubuntu per un single-board computer già dotato di ROS (Robot Operating System – sistema operativo per robot). In breve, la tesi è dedicata alla gestione di un gruppo di robot. I robot sono dotati di due ruote e di tre sensori di distanza. Tutto questo è controllato tramite ROS, che gira sulla scheda ODROID-C2.

Installazione di ROS in un'immagine IMG di Ubuntu per schede a singolo chip
Robot Ladybug. Scusa per la bassa qualità della foto

Non avevo né il tempo né la voglia di installare ROS su ogni singolo robot, pertanto è emersa la necessità di un'immagine di sistema con ROS già installato. Dopo aver navigato tra le risorse di internet, ho trovato diversi approcci su come potesse essere fatto.
In generale, tutte le soluzioni trovate possono essere suddivise nelle seguenti categorie.

  1. Programmi che creano un'immagine da un sistema pronto e configurato (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback e altri.)
  2. Progetti che consentono di creare la propria immagine (yocto, linux from scratch)
  3. Creazione manuale dell'immagine (liveCD customization e equivalente russo, in aggiunta a articolo su habra)

L'uso di soluzioni della prima categoria sembrava l'opzione più semplice e allettante, tuttavia non sono riuscito a creare un'immagine live del sistema per ODROID. Le soluzioni della seconda categoria non erano adatte a me a causa della soglia di accesso piuttosto elevata. Anche la creazione manuale seguendo i tutorial disponibili non era fattibile, poiché nella mia immagine non c'era un filesystem compresso.
Alla fine, dopo aver scoperto un video su chroot (chroot — change root, link al video alla fine del post) e le sue funzionalità, ho deciso di utilizzarlo. Di seguito descriverò il mio caso specifico di personalizzazione di Ubuntu per sviluppatori di robotica.

Dati di origine:

  • L'intero processo di modifica dell'immagine (eccetto la scrittura sulla scheda SD utilizzando balenaEtcher) è stato eseguito sul sistema operativo Ubuntu 18.04.
  • Il sistema operativo che ho modificato è – Ubuntu 18.04.3 versione desktop mate.
  • La macchina su cui deve funzionare il sistema assemblato è – ODROID-C2.

Preparazione dell'immagine

  1. Scarichiamo l'immagine di Ubuntu per ODROID da sito ufficiale

  2. Estraiamo l'archivio

    unxz –kv

  3. Creiamo una directory in cui monteremo l'immagine

    mkdir mnt

  4. Identifichiamo la partizione su cui si trova il filesystem

    file

    Cerchiamo la partizione con il filesystem in formato ext2, ext3 o ext4. Abbiamo bisogno dell'indirizzo dell'inizio della partizione (evidenziato in rosso nello screenshot):

    Installazione di ROS in un'immagine IMG di Ubuntu per schede a singolo chip

    Nota. La posizione del filesystem può essere vista anche tramite l'utilità parted.

  5. Montiamo l'immagine

    sudo mount -o loop,offset=$((264192*512))  mnt/

    La partizione di cui abbiamo bisogno inizia con il blocco 264192 (potresti avere numeri diversi), la dimensione di un blocco è di 512 byte, moltiplichiamo per ottenere l'offset in byte.

  6. Andiamo nella cartella con il sistema montato e ci chrootiamo.

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

    ~/livecd/mnt — percorso completo della directory con il sistema montato
    bin/sh — shell (può essere sostituita anche con bin/bash)
    Ora possiamo iniziare a installare i pacchetti e le applicazioni necessarie.

Installazione di ROS

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

  1. Aggiorniamo l'elenco dei pacchetti

    sudo apt-get update

    Qui ho riscontrato un errore:

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    Le seguenti firme non erano valide: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)

    È legato al fatto che la chiave per la firma dei pacchetti è scaduta. Per aggiornare le chiavi digitiamo:

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

  2. Prepariamo il 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. Installiamo ROS
    Sfortunatamente, non sono riuscito a installare la versione desktop di ROS, quindi ho installato solo i pacchetti di base:

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

    Nota 1. Durante l'installazione è emerso occasionalmente un errore:

    dpkg: errore: impossibile scrivere il record della database di stato riguardo 'iputils-ping' in '/var/lib/dpkg/status': Spazio esaurito sul dispositivo

    Si risolve pulendo la cache dell'utilità apt:

    sudo apt-get clean; sudo apt-get autoclean

    Nota 2. Dopo l'installazione, dobbiamo sorgere (source) con il comando:

    source /opt/ros/melodic/setup.bash

    non sarà possibile, poiché non abbiamo avviato bash, quindi NON dobbiamo digitarlo nel terminale.

  4. Installiamo le 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. Configurazione dei permessi
    Poiché ci siamo chrootati e, di fatto, stiamo eseguendo tutte le operazioni con i privilegi di root del sistema raccolto, anche ROS verrà eseguito solo con i privilegi di superutente.
    Nel tentativo di avviare roscore senza sudo si verifica il seguente 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] Permesso negato: '/home/user/.ros/roscore-11311.pid'

    Per evitare che l'errore si verifichi, cambiamo ricorsivamente i permessi della cartella home dell'utente ROS. Per fare ciò digitiamo:

    sudo rosdep fix-permissions

  6. Installiamo i pacchetti rviz e rqt

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

Finiture finali

  1. Uscire da chroot:
    exit
  2. Smontiamo l'immagine
    cd ..
    sudo umount mnt/
  3. Imballiamo l'immagine del sistema in un archivio
    xz –ckv1

Tutto! Ora con balenaEtcher puoi scrivere l'immagine del sistema su scheda SD, inserirla in ODROID-C2, e avrai Ubuntu con ROS installato!

Link:

  • Il video che parla di come chrootarsi in linux e perché è utile è stato molto utile:

Guarda il video


Fonte: habr.com
Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster