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.

Instalación de ROS en una imagen IMG de Ubuntu para placa única
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.

  1. Programas que crean una imagen a partir de un sistema listo y configurado (Distroshare Ubuntu Imager, kit de linux en vivo, giro de linux, respaldo del sistema, etc.)
  2. Proyectos que te permiten crear tu propia imagen (yocto, linux desde cero)
  3. Armando la imagen usted mismo (personalización de CD en vivo и equivalente rusomás artículo sobre Habré)

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.

Preparando la imagen

  1. Descarga la imagen de Ubuntu para ODROID desde El sitio oficial

  2. Descomprimiendo el archivo

    unxz –kv <файл архива с образом>

  3. Crea un directorio en el que montaremos la imagen.

    mkdir mnt

  4. 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):

    Instalación de ROS en una imagen IMG de Ubuntu para placa única

    Nota. La ubicación del sistema de archivos también se puede ver usando la utilidad separado.

  5. 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.

  6. 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.

  1. 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:

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

  2. Preparando el sistema para instalar 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. Instalación de ROS
    Desafortunadamente, no pude instalar la versión de escritorio de ROS, así que instalé solo los paquetes básicos:

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

    Nota 1. Durante el proceso de instalación a veces ocurría un error:

    dpkg: error: failed to write status database record about 'iputils-ping' to '/var/lib/dpkg/status': No space left on device

    Se solucionó borrando el caché usando la utilidad apt:

    sudo apt-get clean; sudo apt-get autoclean

    Nota 2. Después de la instalación, obtenga la fuente usando el comando:

    source /opt/ros/melodic/setup.bash

    no funcionará, porque No ejecutamos bash, por lo que NO es necesario escribirlo en la terminal.

  4. Instalación de las dependencias necesarias.

    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. 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:

    sudo rosdep fix-permissions

  6. Instalación adicional de los paquetes rviz y rqt

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

Toques finales

  1. Salir de chroot:
    exit
  2. Desmontar la imagen
    cd ..
    sudo umount mnt/
  3. Empaquetamos la imagen del sistema en un archivo.
    xz –ckv1 <файл образа>

¡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:



Fuente: habr.com

Añadir un comentario