Instal·lació de ROS en una imatge IMG d'Ubuntu per a una sola placa
Introducció
L'altre dia, mentre treballava en la meva tesi, em vaig enfrontar a la necessitat de crear una imatge Ubuntu per a una plataforma d'una sola placa amb ROS ja instal·lat (Sistema operatiu robot: sistema operatiu robot). En definitiva, el diploma està dedicat a la gestió d'un grup de robots. Els robots estan equipats amb dues rodes i tres telèmetres. Tot es controla des de ROS, que s'executa a la placa ODROID-C2.
Ladybug robot. Disculpeu la mala qualitat de la foto
No hi havia temps ni ganes d'instal·lar ROS a cada robot individualment i, per tant, calia una imatge del sistema amb ROS ja instal·lat. Després de navegar per Internet, vaig trobar diverses maneres de fer-ho.
En general, totes les solucions trobades es poden dividir en els grups següents.
L'ús de solucions del primer grup semblava ser l'opció més senzilla i atractiva, però mai no vaig poder crear una imatge de sistema en directe per a ODROID. Les solucions del segon grup tampoc no em van adequar a causa del llindar d'entrada força alt. El muntatge manual segons els tutorials disponibles tampoc era adequat, perquè... La meva imatge no tenia un sistema de fitxers comprimit.
Com a resultat, em vaig trobar amb un vídeo sobre chroot (chroot - canviar l'arrel, enllaç al vídeo al final de la publicació) i les seves capacitats, es va decidir utilitzar-lo. A continuació, descriuré el meu cas particular de personalització d'Ubuntu per a desenvolupadors de robòtica.
Dades d'origen:
Tot el procés de modificació de la imatge (excepte per escriure a la targeta SD mitjançant balenaEtcher) es va realitzar al sistema operatiu Ubuntu 18.04.
El sistema operatiu del qual he modificat el muntatge és Ubuntu 18.04.3 mate versió d'escriptori.
La màquina sobre la qual hauria de funcionar el sistema muntat és ODROID-C2.
Preparant la Imatge
Baixeu la imatge d'Ubuntu per a ODROID des de El lloc oficial
Descomprimint l'arxiu
unxz –kv <файл архива с образом>
Creeu un directori en el qual muntarem la imatge
mkdir mnt
Determineu la partició on es troba el sistema de fitxers
file <файл образа>
Estem buscant una partició amb un sistema de fitxers en format ext2, ext3 o ext4. Necessitem l'adreça de l'inici de la secció (resaltada en vermell a la pantalla):
Nota. La ubicació del sistema de fitxers també es pot veure mitjançant la utilitat separat.
Muntatge de la imatge
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
La secció que necessitem comença amb el bloc 264192 (els vostres números poden diferir), la mida d'un bloc és de 512 bytes, multipliqueu-los per obtenir el sagnat en bytes.
Aneu a la carpeta amb el sistema muntat i passeu-hi l'estona
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — camí complet al directori amb el sistema muntat bin/sh - carcassa (també es pot substituir per paperera/bash)
Ara podeu començar a instal·lar els paquets i aplicacions necessaris.
Instal·lació de ROS
Vaig instal·lar l'última versió de ROS (ROS Melodic) segons tutorial oficial.
Actualització de la llista de paquets
sudo apt-get update
Aquí és on vaig rebre l'error:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Això es deu al fet que la clau de signatura del paquet ha caducat. Per actualitzar les claus, escriviu:
Configuració dels drets d'accés
Com que estem connectats i, de fet, realitzem totes les accions en nom de l'arrel del sistema que s'està muntant, ROS només es llançarà amb drets de superusuari.
Quan intenteu executar roscore sense sudo, es produeix un error:
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 evitar que es produeixi l'error, canviem recursivament els drets d'accés al directori inicial de l'usuari de ROS. Per fer-ho escrivim: