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

introduction

L'autre jour, alors que je travaillais sur ma thèse, j'ai été confronté à la nécessité de créer une image Ubuntu pour une plateforme monocarte avec ROS déjà installé (Système d'exploitation du robot - système d'exploitation du robot). En bref, le diplôme 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é depuis ROS, qui fonctionne sur la carte ODROID-C2.

Installation de ROS dans une image Ubuntu IMG pour une carte unique
Coccinelle robot. Désolé pour la mauvaise qualité des photos

Il n'y avait ni le temps ni l'envie d'installer ROS sur chaque robot individuellement, et il était donc nécessaire de disposer d'une image système avec ROS déjà installé. Après avoir parcouru Internet, j’ai trouvé plusieurs approches pour y parvenir.
En général, toutes les solutions trouvées peuvent être divisées dans les groupes suivants.

  1. Programmes qui créent une image à partir d'un système prêt à l'emploi et configuré (Imageur Ubuntu Distroshare, kit live Linux, Linux réinitialisé, système de retour, etc.)
  2. Des projets qui vous permettent de créer votre propre image (Yocto, Linux à partir de zéro)
  3. Assembler l'image vous-même (personnalisation du CD live и équivalent russeplus article sur Habré)

Utiliser les solutions du premier groupe semblait être l'option la plus simple et la plus attrayante, mais je n'ai jamais pu créer une image système en direct pour ODROID. Les solutions du deuxième groupe ne me convenaient pas non plus en raison du seuil d'entrée assez élevé. Le montage manuel selon les tutoriels disponibles ne convenait pas non plus, car... Mon image n'avait pas de système de fichiers compressé.
Du coup, je suis tombé sur une vidéo sur chroot (chroot - changer la racine, lien vers la vidéo en fin d'article) et ses capacités, il a été décidé de l'utiliser. Ensuite, je décrirai mon cas particulier de personnalisation d'Ubuntu pour les développeurs de robotique.

Contexte:

  • L'ensemble du processus de modification de l'image (à l'exception de l'écriture sur la carte SD à l'aide de balenaEtcher) a été effectué sur le système d'exploitation Ubuntu 18.04.
  • Le système d'exploitation dont j'ai modifié l'assemblage est la version de bureau Ubuntu 18.04.3 mate.
  • La machine sur laquelle le système assemblé doit fonctionner est ODROID-C2.

Préparation de l'image

  1. Téléchargez l'image Ubuntu pour ODROID à partir de site officiel

  2. Déballage de l'archive

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

  3. Créer un répertoire dans lequel nous monterons l'image

    mkdir mnt

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

    file <файл образа>

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

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

    Note. L'emplacement du système de fichiers peut également être visualisé à l'aide de l'utilitaire séparé.

  5. Montage de l'image

    sudo mount -o loop,offset=$((264192*512)) <файл с образом> mnt/

    La section dont nous avons besoin commence par le bloc 264192 (vos numéros peuvent différer), la taille d'un bloc est de 512 octets, multipliez-les pour obtenir l'indentation en octets.

  6. Accédez au dossier contenant le système monté et traînez-y

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

    ~/livecd/mnt — chemin complet vers le répertoire avec le système monté
    poubelle/pêche - coque (peut également être remplacée par poubelle/bash)
    Vous pouvez maintenant commencer à installer les packages et applications nécessaires.

Installation de ROS

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

  1. Mettre à jour la liste des packages

    sudo apt-get update

    C'est là que j'ai eu l'erreur :

    Err:6 http://deb.odroid.in/c2 bionic InRelease
    The following signatures were invalid: EXPKEYSIG 5360FB9DAB19BAC9 Mauro Ribeiro (mdrjr) <[email protected]>

    Cela est dû au fait que la clé de signature du package a expiré. Pour mettre à jour les clés, tapez :

    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 de bureau de ROS, j'ai donc installé uniquement les packages de base :

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

    Notez 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

    Cela a été corrigé en vidant le cache à l'aide de l'utilitaire apt :

    sudo apt-get clean; sudo apt-get autoclean

    Notez 2. Après l'installation, sourcez à l'aide de la commande :

    source /opt/ros/melodic/setup.bash

    ça ne marchera pas, parce que Nous n'avons pas exécuté bash, il n'est donc PAS nécessaire de le saisir dans le terminal.

  4. Installer les 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. Paramétrage des droits d'accès
    Puisque nous sommes connectés et effectuons en fait toutes les actions au nom de la racine du système en cours d'assemblage, ROS ne sera lancé qu'avec les droits de superutilisateur.
    Lorsque vous essayez d'exécuter 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 que l'erreur ne se produise, modifions de manière récursive les droits d'accès au répertoire personnel de l'utilisateur ROS. Pour ce faire, nous tapons :

    sudo rosdep fix-permissions

  6. Installation supplémentaire des packages rviz et rqt

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

Touches finales

  1. Quitter le chroot :
    exit
  2. Démonter l'image
    cd ..
    sudo umount mnt/
  3. Emballons l'image système dans une archive
    xz –ckv1 <файл образа>

Tous! Maintenant, avec l'aide BalenaEtcher vous pouvez graver l'image système sur une carte SD, l'insérer dans ODROID-C2 et Ubuntu avec ROS sera installé !

Liens:

  • Cette vidéo a beaucoup aidé sur la façon de tricher sous Linux et pourquoi vous en avez besoin :



Source: habr.com

Ajouter un commentaire