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.
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.
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
Téléchargez l'image Ubuntu pour ODROID à partir de site officiel
Déballage de l'archive
unxz –kv <файл архива с образом>
Créer un répertoire dans lequel nous monterons l'image
mkdir mnt
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) :
Note. L'emplacement du système de fichiers peut également être visualisé à l'aide de l'utilitaire séparé.
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.
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.
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 :
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
Installation supplémentaire des packages rviz et rqt
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 :