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.

Instal·lació de ROS en una imatge IMG d'Ubuntu per a una sola placa
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.

  1. Programes que creen una imatge a partir d'un sistema ja fet i configurat (Distroshare Ubuntu Imager, kit en directe de Linux, Linux respin, Systemback, etc.)
  2. Projectes que et permeten crear la teva pròpia imatge (yocto, Linux des de zero)
  3. Muntant la imatge tu mateix (personalització de CD en directe и equivalent rusmés article sobre Habré)

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

  1. Baixeu la imatge d'Ubuntu per a ODROID des de El lloc oficial

  2. Descomprimint l'arxiu

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

  3. Creeu un directori en el qual muntarem la imatge

    mkdir mnt

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

    Instal·lació de ROS en una imatge IMG d'Ubuntu per a una sola placa

    Nota. La ubicació del sistema de fitxers també es pot veure mitjançant la utilitat separat.

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

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

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

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

  2. Preparació del sistema per instal·lar 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. Instal·lació de ROS
    Malauradament, no vaig poder instal·lar la versió d'escriptori de ROS, així que només vaig instal·lar els paquets bàsics:

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

    Nota 1. Durant el procés d'instal·lació de vegades es va produir un error:

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

    Es va solucionar esborrant la memòria cau amb la utilitat apt:

    sudo apt-get clean; sudo apt-get autoclean

    Nota 2. Després de la instal·lació, feu servir l'ordre:

    source /opt/ros/melodic/setup.bash

    no funcionarà, perquè No hem executat bash, de manera que NO cal que s'escrigui al terminal.

  4. Instal·lació de les dependències necessàries

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

    sudo rosdep fix-permissions

  6. Instal·lació addicional dels paquets rviz i rqt

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

Tocs finals

  1. Sortir de chroot:
    exit
  2. Desmuntar la imatge
    cd ..
    sudo umount mnt/
  3. Empaquetem la imatge del sistema en un arxiu
    xz –ckv1 <файл образа>

Tot! Ara amb l'ajuda balenaEtcher podeu gravar la imatge del sistema a una targeta SD, inserir-la a ODROID-C2 i tindreu Ubuntu amb ROS instal·lat!

Enllaços:

  • Aquest vídeo us va ajudar molt sobre com fer trampes a Linux i per què ho necessiteu:



Font: www.habr.com

Afegeix comentari