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.

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.
- Programmes qui créent une image d'un système prêt à l'emploi et configuré (, , , systemback, etc.)
- Projets permettant de créer votre propre image (, )
- Création manuelle d'une image ( et , plus )
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
Téléchargez l'image d'Ubuntu pour ODROID depuis
Décompressez l'archive
unxz –kvCréez un répertoire dans lequel nous allons monter l'image
mkdir mntDéterminez la partition sur laquelle se trouve le système de fichiers
fileCherchez 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) :

Remarque. L'emplacement du système de fichiers peut également être consulté à l'aide de l'utilitaire parted.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.
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 .
Mettre à jour la liste des paquets
sudo apt-get updateVoici 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 AB19BAC9Pré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 C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654sudo apt updateInstallation 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-melodicNote 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 deviceCeci a été corrigé en nettoyant le cache de l'utilitaire apt :
sudo apt-get clean; sudo apt-get autocleanNote 2. Après l'installation, il ne sera pas possible de se sourcer (source) avec la commande :
source /opt/ros/melodic/setup.bashce qui ne sera pas possible, car nous n'avons pas lancé bash, donc cela NE doit pas être saisi dans le terminal.
Installation des dépendances nécessaires
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essentialsudo apt install python-rosdepsudo rosdep init rosdep updateConfiguration 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-permissionsInstallons les packages rviz et rqt
sudo apt-get install ros-melodic-rqt ros-melodic-rviz
Dernières retouches
- Sortons de chroot :
exit - Démonter l'image
cd .. sudo umount mnt/ - Nous allons empaqueter l'image du système dans une archive
xz –ckv1
Voilà! Désormais, grâce à , 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 :

Source : habr.com

