Instalación de ROS en una imagen IMG de Ubuntu para placa única
introducción
El otro día, mientras trabajaba en mi tesis, me enfrenté a la necesidad de crear una imagen de Ubuntu para una plataforma de placa única con ROS ya instalado (Sistema operativo del robot - sistema operativo del robot). En definitiva, el diploma está dedicado a la gestión de un grupo de robots. Los robots están equipados con dos ruedas y tres telémetros. Todo se controla desde ROS, que se ejecuta en la placa ODROID-C2.
Mariquita robot. Perdón por la mala calidad de la foto.
No había tiempo ni ganas de instalar ROS en cada robot individualmente y, por lo tanto, era necesaria una imagen del sistema con ROS ya instalado. Después de navegar por Internet, encontré varios enfoques sobre cómo se podría hacer esto.
En general, todas las soluciones encontradas se pueden dividir en los siguientes grupos.
Usar soluciones del primer grupo parecía ser la opción más sencilla y atractiva, pero nunca pude crear una imagen del sistema en vivo para ODROID. Las soluciones del segundo grupo tampoco me convenían debido al umbral de entrada bastante alto. El montaje manual según los tutoriales disponibles tampoco era adecuado, porque... Mi imagen no tenía un sistema de archivos comprimido.
Como resultado, encontré un video sobre chroot (chroot - cambiar raíz, enlace al vídeo al final del post) y sus capacidades, se decidió utilizarlo. A continuación describiré mi caso particular de personalización de Ubuntu para desarrolladores de robótica.
Antecedentes:
Todo el proceso de modificación de la imagen (excepto la escritura en la tarjeta SD usando balenaEtcher) se realizó en el sistema operativo Ubuntu 18.04.
El sistema operativo cuyo ensamblaje modifiqué es Ubuntu 18.04.3 versión de escritorio mate.
La máquina en la que debería funcionar el sistema ensamblado es ODROID-C2.
Crea un directorio en el que montaremos la imagen.
mkdir mnt
Determinar la partición en la que se encuentra el sistema de archivos.
file <файл образа>
Buscamos una partición con un sistema de archivos en formato ext2, ext3 o ext4. Necesitamos la dirección del inicio de la sección (resaltada en rojo en la pantalla):
Nota. La ubicación del sistema de archivos también se puede ver usando la utilidad separado.
Montando la imagen
sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/
La sección que necesitamos comienza con el bloque 264192 (sus números pueden diferir), el tamaño de un bloque es 512 bytes, multiplíquelos para obtener la sangría en bytes.
Vaya a la carpeta con el sistema montado y quédese en ella.
cd mnt/
sudo chroot ~/livecd/mnt/ bin/sh
~/livecd/mnt — ruta completa al directorio con el sistema montado papelera/sh - carcasa (también se puede sustituir por papelera/golpe)
Ahora puede comenzar a instalar los paquetes y aplicaciones necesarios.
Instalación de ROS
Instalé la última versión de ROS (ROS Melodic) de acuerdo con tutorial oficial.
Actualizando la lista de paquetes
sudo apt-get update
Aquí es donde recibí el error:
Err:6 http://deb.odroid.in/c2 bionic InRelease
The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>
Esto se debe al hecho de que la clave de firma del paquete ha caducado. Para actualizar las claves, escriba:
Configurar derechos de acceso
Dado que iniciamos sesión y, de hecho, realizamos todas las acciones en nombre de la raíz del sistema que se está ensamblando, ROS solo se iniciará con derechos de superusuario.
Al intentar ejecutar roscore sin sudo, se produce 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'
Para evitar que ocurra el error, cambiemos recursivamente los derechos de acceso al directorio de inicio del usuario de ROS. Para ello escribimos:
¡Todo! ahora con la ayuda grabador balena puedes grabar la imagen del sistema en una tarjeta SD, insertarla en ODROID-C2 y tendrás Ubuntu con ROS instalado.
Enlaces:
Este video ayudó mucho sobre cómo hacer trampa en Linux y por qué lo necesita: