Instalando ROS nunha imaxe IMG de Ubuntu para placa única
Introdución
O outro día, mentres traballaba na miña tese, atopeime coa necesidade de crear unha imaxe de Ubuntu para unha plataforma de placa única con ROS xa instalado (Sistema operativo robot - sistema operativo robot). En definitiva, o diploma dedícase á xestión dun grupo de robots. Os robots están equipados con dúas rodas e tres telémetros. Todo está controlado desde ROS, que se executa na placa ODROID-C2.
Maruxiña robot. Perdón pola mala calidade da foto
Non había nin tempo nin desexo de instalar ROS en cada robot individualmente e, polo tanto, facía falta unha imaxe do sistema con ROS xa instalado. Despois de navegar por Internet, atopei varias formas de facer isto.
En xeral, todas as solucións atopadas pódense dividir nos seguintes grupos.
Usar solucións do primeiro grupo parecía ser a opción máis sinxela e atractiva, pero nunca puiden crear unha imaxe de sistema en directo para ODROID. As solucións do segundo grupo tampouco me conviñan debido ao limiar de entrada bastante alto. A montaxe manual segundo os titoriais dispoñibles tampouco foi adecuada, porque... A miña imaxe non tiña un sistema de ficheiros comprimido.
Como resultado, atopeime cun vídeo sobre chroot (chroot - cambiar raíz, ligazón ao vídeo ao final da publicación) e as súas capacidades, decidiuse utilizalo. A continuación, describirei o meu caso particular de personalización de Ubuntu para desenvolvedores de robótica.
Datos iniciais:
Todo o proceso de modificación da imaxe (agás a escritura na tarxeta SD mediante balenaEtcher) realizouse no sistema operativo Ubuntu 18.04.
O sistema operativo cuxa montaxe modifiquei é a versión de escritorio Ubuntu 18.04.3 mate.
A máquina na que debería funcionar o sistema montado é ODROID-C2.
Preparando a imaxe
Descarga a imaxe de Ubuntu para ODROID desde web oficial
Descomprimindo o arquivo
unxz –kv <файл архива с образом>
Crea un directorio no que montaremos a imaxe
mkdir mnt
Determine a partición na que se atopa o sistema de ficheiros
file <файл образа>
Buscamos unha partición cun sistema de ficheiros en formato ext2, ext3 ou ext4. Necesitamos o enderezo do inicio da sección (resaltado en vermello na pantalla):
Nota. A localización do sistema de ficheiros tamén se pode ver mediante a utilidade separouse.
Montaxe da imaxe
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
A sección que necesitamos comeza co bloque 264192 (os teus números poden diferir), o tamaño dun bloque é de 512 bytes, multiplícaos para obter a sangría en bytes.
Vaia ao cartafol co sistema montado e colócase nel
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — ruta completa ao directorio co sistema montado bin/sh - shell (tamén se pode substituír por bin/bash)
Agora podes comezar a instalar os paquetes e aplicacións necesarios.
Instalación de ROS
Instalei a última versión de ROS (ROS Melodic) segundo tutorial oficial.
Actualizando a lista de paquetes
sudo apt-get update
Aquí é onde teño o erro:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Isto débese ao feito de que a clave de sinatura do paquete caducou. Para actualizar as claves, escriba:
Configurar dereitos de acceso
Xa que estamos iniciados sesión e, de feito, realizamos todas as accións en nome da raíz do sistema que se está a montar, ROS só se lanzará con dereitos de superusuario.
Ao tentar executar roscore sen sudo, ocorre un erro:
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'
Para evitar que se produza o erro, cambiemos recursivamente os dereitos de acceso ao directorio persoal do usuario de ROS. Para facelo escribimos: