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.

Instalando ROS nunha imaxe IMG de Ubuntu para placa única
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.

  1. Programas que crean unha imaxe a partir dun sistema listo e configurado (Distroshare Ubuntu Imager, kit en vivo de linux, linux respin, Systemback, etc.)
  2. Proxectos que che permiten crear a túa propia imaxe (yocto, linux desde cero)
  3. Montando a imaxe vostede mesmo (personalización de CD en directo и equivalente ruso, un plus artigo sobre Habré)

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

  1. Descarga a imaxe de Ubuntu para ODROID desde web oficial

  2. Descomprimindo o arquivo

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

  3. Crea un directorio no que montaremos a imaxe

    mkdir mnt

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

    Instalando ROS nunha imaxe IMG de Ubuntu para placa única

    Nota. A localización do sistema de ficheiros tamén se pode ver mediante a utilidade separouse.

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

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

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

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

  2. Preparación do sistema para a instalación de 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, non puiden instalar a versión de escritorio de ROS, polo que instalei só os paquetes básicos:

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

    Nota 1. Durante o proceso de instalación, ás veces ocorreu un erro:

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

    Solucionouse borrando a caché usando a utilidade apt:

    sudo apt-get clean; sudo apt-get autoclean

    Nota 2. Despois da instalación, fonte usando o comando:

    source /opt/ros/melodic/setup.bash

    non funcionará, porque Non executamos bash, polo que NON é necesario escribir no terminal.

  4. Instalación das 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 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:

    sudo rosdep fix-permissions

  6. Instalación adicional dos paquetes rviz e rqt

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

Últimos retoques

  1. Saír do chroot:
    exit
  2. Desmontar a imaxe
    cd ..
    sudo umount mnt/
  3. Empaquetemos a imaxe do sistema nun arquivo
    xz –ckv1 <файл образа>

Todo! Agora coa axuda balena Etcher podes gravar a imaxe do sistema nunha tarxeta SD, inserila en ODROID-C2 e terás Ubuntu con ROS instalado!

Referencias:

  • Este vídeo axudou moito sobre como facer trampas en Linux e por que o necesitas:



Fonte: www.habr.com

Engadir un comentario