UBR-1 sur ROS2 Humble – Robohub


Cela fait un moment que je n’ai pas posté sur le blog, mais dernièrement, j’ai de nouveau travaillé sur l’UBR-1 après une longue interruption. Au cas où vous auriez manqué les messages précédents de cette série :

ROS2 Humble

La dernière version de ROS2 est sortie il y a quelques semaines à peine. ROS2 Humble cible Ubuntu 22.04 et est également une version de support à long terme (LTS), ce qui signifie que le système d’exploitation Ubuntu sous-jacent et la version ROS2 bénéficient de 5 années complètes de support.

Étant donné que l’installation de systèmes d’exploitation sur des robots est souvent pénible, je n’utilise que les versions LTS et j’ai donc dû migrer depuis le LTS précédent, ROS2 Foxy (sur Ubuntu 20.04). Dans l’ensemble, il n’y a pas beaucoup de changements dans les API ROS2 de bas niveau car les choses deviennent plus stables et matures. Pour certains packages de niveau supérieur, tels que MoveIt2 et Navigation2, l’histoire est un peu différente.

Visualisation

L’un des avantages de la version ROS2 Foxy était qu’elle ciblait le même système d’exploitation que la version finale de ROS1, Noetic. Cela a permis aux utilisateurs d’avoir à la fois ROS1 et ROS2 installés côte à côte. Si vous développez encore dans ROS1, cela signifie que vous ne souhaitez probablement pas encore mettre à niveau tous vos ordinateurs. Alors que mon robot exécute maintenant Ubuntu 22.04, mon bureau exécute toujours 18.04.

Par conséquent, j’ai dû trouver un moyen de visualiser les données ROS2 sur un ordinateur sur lequel la dernière version de ROS2 n’était pas installée. Au départ, j’ai essayé Foxglove Studio, mais je n’ai pas eu de chance avec les choses se connectant réellement à l’aide de l’interface ROS2 native (l’interface basée sur rosbridge fonctionnait). Foxglove est certainement intéressant, mais jusqu’à présent, ce n’est pas vraiment un remplacement de RVIZ – ils semblent être plus axés sur la visualisation de données hors ligne.

Je suis ensuite passé à la course rviz2 dans un environnement docker – qui fonctionne bien lors de l’utilisation du outil à bascule:

sudo apt-get install python3-rocker
sudo rocker --net=host --x11 osrf/ros:humble-desktop rviz2

Si vous utilisez une carte NVIDIA, vous devrez ajouter --nvidia de même que --x11.

Afin de bien visualiser et interagir avec mon robot UBR-1, j’avais besoin d’ajouter le ubr1_description package à mon espace de travail afin d’obtenir les maillages et aussi mes configurations rviz. Pour ce faire, j’avais besoin de créer ma propre image docker. Je l’ai largement basé sur les images docker ROS sous-jacentes :

ARG WORKSPACE=/opt/workspace

DE osrf/ros:humble-desktop

# installer les outils de construction
COURS apt-obtenir la mise à jour && apt-get installer -q -y –no-install-recommande
python3-colcon-common-extensions
git-core
&& rm -rf /var/lib/apt/lists/*

# obtenir le code ubr
ARG ESPACE DE TRAVAIL
RÉP TRAVAIL $WORKSPACE/src
COURS git clone https://github.com/mikeferguson/ubr_reloaded.git
&& toucher ubr_reloaded/ubr1_bringup/COLCON_IGNORE
&& toucher ubr_reloaded/ubr1_calibration/COLCON_IGNORE
&& toucher ubr_reloaded/ubr1_gazebo/COLCON_IGNORE
&& toucher ubr_reloaded/ubr1_moveit/COLCON_IGNORE
&& toucher ubr_reloaded/ubr1_navigation/COLCON_IGNORE
&& toucher ubr_reloaded/ubr_msgs/COLCON_IGNORE
&& toucher ubr_reloaded/ubr_teleop/COLCON_IGNORE

# installer les dépendances
ARG ESPACE DE TRAVAIL
RÉP TRAVAIL $ESPACE DE TRAVAIL
COURS . /opt/ros/$ROS_DISTRO/setup.sh
&& apt-obtenir la mise à jour && rosdep installer -q -y
–from-chemins src
–ignore-src
&& rm -rf /var/lib/apt/lists/*

# construire le code ubr
ARG ESPACE DE TRAVAIL
RÉP TRAVAIL $ESPACE DE TRAVAIL
COURS . /opt/ros/$ROS_DISTRO/setup.sh
&& construire colcon

# configuration du point d’entrée
COPIE ./ros_entrypoint.sh /

POINT D’ACCÈS [« /ros_entrypoint.sh »]
CMD [« bash »]

L’image dérive de humble-desktop, puis ajoute les outils de construction et clone mon référentiel. J’ignore ensuite la majorité des packages, installe les dépendances, puis crée l’espace de travail. La ros_entrypoint.sh Le script gère le sourçage de la configuration de l’espace de travail.

#!/bin/bash
set -e

# configurer l’environnement ros2
la source « /opt/workspace/install/setup.bash »
exec « $@« 

Je pourrais ensuite créer l’image docker et exécuter rviz à l’intérieur :

docker build -t ubr:main
sudo rocker --net=host --x11 ubr:main rviz2

La source complète de ces configurations de docker se trouve dans le dossier docker de mon ubr_reloaded dépôt. REMARQUE : Le code mis à jour dans le référentiel ajoute également une modification de dernière minute pour utiliser CycloneDDS, car j’ai rencontré de nombreux problèmes de connectivité avec FastDDS que je n’ai pas pu déboguer.

Visualisation sur MacOSX

J’ai aussi souvent envie de pouvoir interagir avec mon robot depuis mon Macbook. Alors que j’avais auparavant installé ROS2 Foxy sur mon Macbook à processeur Intella situation a bien changé maintenant avec MacOSX rétrogradé au support de niveau 3 et le nouveau silicium Apple M1 (et divers autres mécanismes de verrouillage d’Apple) rendant de plus en plus difficile la configuration de ROS2 directement sur le Macbook.

Comme pour le bureau Linux, j’ai essayé Foxglove – mais c’est un peu limité sur Mac. L’environnement MacOSX ne permet pas d’ouvrir les ports requis, donc la diffusion directe de sujets ROS2 ne fonctionne pas et vous devez utiliser rosbridge. J’ai découvert que j’étais capable de visualiser certains sujets, mais que le passage d’un sujet à l’autre se brisait fréquemment.

À ce stade, j’étais sur le point d’abandonner, jusqu’à ce que je remarque qu’Ubuntu 22.04 arm64 est une plate-forme de niveau 1 pour ROS2 Humble. J’ai procédé à l’installation de la version arm64 d’Ubuntu dans Parallels (Remarque : j’étais bon marché et j’ai d’abord essayé d’utiliser l’aperçu de la technologie VMWare, mais je n’ai même pas réussi à faire démarrer le programme d’installation). Il y a quelques astuces ici car il n’y a pas d’installateur de bureau arm64, vous devez donc installer l’édition serveur, puis la mettre à niveau vers un bureau. Il y a un description détaillée de ce workflow sur askubuntu.com. Installation ros-humble-desktop de arm64 Debians était parfaitement facile.

rviz2 s’exécute relativement rapidement dans la machine virtuelle Parallels, mais dans l’ensemble, ce n’était pas aussi rapide ou stable que l’utilisation rocker sur Ubuntu. Cependant, c’est vraiment agréable de pouvoir faire du développement ROS2 lorsque je voyage avec seulement mon Macbook.

Remarques sur la migration

Remarque : chacun des liens de cette section renvoie à un commit ou à une PR qui implémente les modifications discutées.

Dans l’API ROS principale, il n’y a qu’une poignée de changements – et la plupart d’entre eux corrigent simplement des bogues potentiels. Les macros de journalisation ont été mises à jour pour des raisons de sécurité et nécessitent des c-strings comme les anciennes macros ROS1. De plus, les macros sont désormais plus efficaces pour détecter les chaînes de substitution non valides. Ament s’est également amélioré pour détecter les dépendances manquantes. Les mises à jour que j’ai apportées à contrôleurs_robots montrer combien de bogues ont été détectés par cette vérification plus stricte.

image_pipeline a eu quelques mises à jour mineures depuis Foxy, principalement pour améliorer la cohérence entre les plugins et j’avais donc besoin de mettre à jour certains remappages de sujets.

La navigation a le plus de mises à jour. amcl les noms de type de modèle ont été modifié puisque les modèles sont maintenant des plugins. L’API des couches costmap a considérablement changé, et donc un certain nombre de des mises à jour étaient nécessaires juste pour démarrer le système. J’ai ensuite parcouru plus en détail la documentation et trouvé quelques autres problèmes et améliorations avec ma configurationen particulier autour de la configuration de l’arbre de comportement.

J’ai aussi décidé de faire un bon port de contrôleur_gracieux vers ROS2, à partir du dernier code ROS1 car un certain nombre d’améliorations ont eu lieu au cours de l’année écoulée depuis que j’avais initialement porté vers ROS2.

Prochaines étapes

Il y a encore un certain nombre de nouvelles fonctionnalités à explorer avec Navigation2, mais mon objectif immédiat va se déplacer vers la configuration de MoveIt2 sur le robot, car je ne peux plus facilement basculer entre ROS1 et ROS2 après la mise à niveau du système d’exploitation.




Michel Ferguson