Installation de ROS dans une image IMG d'Ubuntu pour une carte unique

Introduction

Récemment, en travaillant sur mon mémoire, j'ai constaté la nécessité de créer une image d'Ubuntu pour un ordinateur monocarte avec ROS déjà installé (Robot Operating System – système d'exploitation pour robots). En résumé, le mémoire est consacré à la gestion d'un groupe de robots. Les robots sont équipés de deux roues et de trois télémètres. Le tout est contrôlé via ROS, qui tourne sur la carte ODROID-C2.

Installation de ROS dans une image IMG d'Ubuntu pour une carte unique
Robot Ladybug. Désolé pour la mauvaise qualité de la photo

Il n'y avait ni le temps ni l'envie d'installer ROS sur chaque robot individuellement, ce qui a entraîné le besoin d'une image système déjà configurée avec ROS. En parcourant Internet, j'ai trouvé plusieurs approches sur la façon de le faire.
En général, toutes les solutions trouvées peuvent être classées en plusieurs groupes.

  1. Programmes qui créent une image d'un système prêt à l'emploi et configuré (Distroshare Ubuntu Imager, linux live kit, linux respin, systemback, etc.)
  2. Projets permettant de créer votre propre image (yocto, linux from scratch)
  3. Création manuelle d'une image (liveCD customization et analogue russe, plus un article sur Habré)

L'utilisation des solutions du premier groupe semblait être l'option la plus simple et attrayante, cependant, je n'ai pas réussi à créer une image de système live pour ODROID. Les solutions du deuxième groupe ne m'ont également pas convenu à cause de la barrière d'entrée assez élevée. La création manuelle selon les tutoriels disponibles ne convenait pas non plus à cause de l'absence d'un système de fichiers compressé dans mon image.
Finalement, en tombant sur une vidéo sur chroot (chroot — change root, lien vers la vidéo à la fin du post) et ses possibilités, j'ai décidé de l'utiliser. Je vais maintenant décrire mon cas particulier de personnalisation d'Ubuntu pour les développeurs de robotique.

Données d'origine :

  • Tout le processus de modification de l'image (à l'exception de l'écriture sur la carte SD avec balenaEtcher) a été effectué sous le système d'exploitation Ubuntu 18.04.
  • Le système d'exploitation dont j'ai modifié la version – Ubuntu 18.04.3 version de bureau MATE.
  • La machine sur laquelle le système assemblé doit fonctionner – ODROID-C2.

Préparation de l'image

  1. Téléchargez l'image d'Ubuntu pour ODROID depuis le site officiel

  2. Décompressez l'archive

    unxz –kv

  3. Créez un répertoire dans lequel nous allons monter l'image

    mkdir mnt

  4. Déterminez la partition sur laquelle se trouve le système de fichiers

    file

    Cherchez la partition avec un système de fichiers au format ext2, ext3 ou ext4. Nous avons besoin de l'adresse du début de la partition (souligné en rouge sur la capture d'écran) :

    Installation de ROS dans une image IMG d'Ubuntu pour une carte unique

    Remarque. L'emplacement du système de fichiers peut également être consulté à l'aide de l'utilitaire parted.

  5. Monter l'image

    sudo mount -o loop,offset=$((264192*512))  mnt/

    La partition dont nous avons besoin commence au bloc 264192 (vos chiffres peuvent varier), la taille d'un bloc est de 512 octets, nous les multiplions pour obtenir le décalage en octets.

  6. Nous allons dans le dossier du système monté et nous chrootons dedans

    cd mnt/
    sudo chroot ~/livecd/mnt/ bin/sh

    ~/livecd/mnt — chemin complet vers le répertoire du système monté
    bin/sh — shell (peut également être remplacé par bin/bash)
    Maintenant, nous pouvons commencer à installer les paquets et applications nécessaires.

Installation de ROS

J'ai installé la dernière version de ROS (ROS Melodic) selon le tutoriel officiel.

  1. Mettre à jour la liste des paquets

    sudo apt-get update

    Voici où j'ai rencontré une erreur :

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    Les signatures suivantes étaient invalides : EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr)

    C'est lié au fait que la clé pour signer les paquets a expiré. Pour mettre à jour les clés, entrez :

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

  2. Préparation du système pour l'installation 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. Installation de ROS
    Malheureusement, je n'ai pas pu installer la version desktop de ROS, donc j'ai installé uniquement les paquets de base :

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

    Note 1. Pendant le processus d'installation, une erreur s'est parfois produite :

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

    Ceci a été corrigé en nettoyant le cache de l'utilitaire apt :

    sudo apt-get clean; sudo apt-get autoclean

    Note 2. Après l'installation, il ne sera pas possible de se sourcer (source) avec la commande :

    source /opt/ros/melodic/setup.bash

    ce qui ne sera pas possible, car nous n'avons pas lancé bash, donc cela NE doit pas être saisi dans le terminal.

  4. Installation des dépendances nécessaires

    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. Configuration des droits d'accès
    Étant donné que nous sommes en chroot et effectuons en fait toutes les actions au nom de root du système en cours de construction, ROS ne sera exécuté qu'avec les droits de superutilisateur.
    Lors de la tentative de lancement de roscore sans sudo, une erreur se produit :

    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'

    Pour éviter l'erreur, modifions récursivement les permissions du répertoire personnel de l'utilisateur ROS. Pour cela, tapez :

    sudo rosdep fix-permissions

  6. Installons les packages rviz et rqt

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

Dernières retouches

  1. Sortons de chroot :
    exit
  2. Démonter l'image
    cd ..
    sudo umount mnt/
  3. Nous allons empaqueter l'image du système dans une archive
    xz –ckv1

Voilà! Désormais, grâce à balenaEtcher , vous pouvez écrire l'image système sur la carte SD, l'insérer dans l'ODROID-C2, et vous aurez Ubuntu avec ROS installé!

Liens :

  • Ce vidéo m'a beaucoup aidé à comprendre comment utiliser chroot sous Linux et à quoi cela sert :

Lire la vidéo


Source : habr.com
Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster