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.
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.
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.
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):
Nota. La posizione del file system può essere visualizzata anche utilizzando l'utilità parted.
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.
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.
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:
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:
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: