Dépannage de l’installation

Les techniques de dépannage pour l’installation sont triées selon les plates-formes auxquelles elles s’appliquent.

Général

Les techniques générales de dépannage s’appliquent à toutes les plates-formes.

Activer la multidiffusion

Afin de communiquer avec succès via DDS, l’interface réseau utilisée doit être compatible avec la multidiffusion. Nous avons vu dans des expériences passées que cela n’était pas nécessairement activé par défaut (sur Ubuntu ou OSX) lors de l’utilisation de l’adaptateur de bouclage. Voir le numéro original ou une conversation sur ros-answers. Vous pouvez vérifier que votre configuration actuelle autorise la multidiffusion avec l’outil ROS 2 :

Dans l’aérogare 1 :

ros2 multicast receive

Dans l’aérogare 2 :

ros2 multicast send

Si la première commande n’a pas renvoyé de réponse semblable à :

Received from xx.xxx.xxx.xx:43751: 'Hello World!'

vous devrez alors mettre à jour la configuration de votre pare-feu pour autoriser la multidiffusion à l’aide de ufw.

sudo ufw allow in proto udp to 224.0.0.0/4
sudo ufw allow in proto udp from 224.0.0.0/4

Vous pouvez vérifier si l’indicateur de multidiffusion est activé pour votre interface réseau à l’aide de l’outil ifconfig et en recherchant MULICTAST dans la section des indicateurs :

eno1: flags=4163<...,MULTICAST>
   ...

Échec de l’importation sans bibliothèque présente sur le système

Parfois, rclpy ne parvient pas à être importé car les bibliothèques d’extension C attendues ne sont pas trouvées. Si c’est le cas, comparez les bibliothèques présentes dans le répertoire avec celle mentionnée dans le message d’erreur. En supposant qu’un fichier avec un nom similaire existe (même préfixe comme _rclpy. et même suffixe comme .so mais une version/architecture Python différente), vous utilisez un interpréteur Python différent de celui qui a été utilisé pour construire le Rallonge C. Assurez-vous d’utiliser le même interpréteur Python que celui utilisé pour construire le binaire.

Par exemple, une telle inadéquation peut survenir après une mise à jour du système d’exploitation. Ensuite, la reconstruction de l’espace de travail peut résoudre le problème.

Linux

Erreur interne du compilateur

Si vous rencontrez un ICE lorsque vous essayez de compiler sur une plate-forme à mémoire limitée comme un Raspberry PI, vous voudrez peut-être construire un thread unique (préfixez l’invocation de construction avec MAKEFLAGS=-j1).

Mémoire insuffisante

Le ros1_bridge dans sa forme actuelle nécessite 4 Go de RAM libre pour compiler. Si vous n’avez pas cette quantité de RAM disponible, il est suggéré d’utiliser COLCON_IGNORE dans ce dossier et d’ignorer sa compilation.

Interférence de plusieurs hôtes

Si vous exécutez plusieurs instances sur le même réseau, vous risquez d’obtenir des interférences. Pour éviter cela, vous pouvez définir la variable d’environnement ROS_DOMAIN_ID sur un nombre entier différent, la valeur par défaut est zéro. Cela définira l’ID de domaine DDS pour votre système.

Configuration de source d’exception.bash

Si vous rencontrez des exceptions lorsque vous essayez de sourcer l’environnement après avoir compilé à partir des sources, essayez de mettre à jour les packages liés à colcon en utilisant

colcon version-check  # check if newer versions available
sudo apt install python3-colcon* --only-upgrade  # upgrade installed colcon packages to latest version

macOS

Erreur de segmentation lors de l’utilisation de pyenv

pyenv semble construire par défaut Python avec des fichiers .a, mais cela pose des problèmes avec rclpy, il est donc recommandé de construire Python avec Frameworks activé sur macOS lors de l’utilisation de pyenv :

https://github.com/pyenv/pyenv/wiki#how-to-build-cpython-with-framework-support-on-os-x

Bibliothèque non chargée ; image non trouvée

Si vous rencontrez des problèmes de chargement de bibliothèque au moment de l’exécution (soit en exécutant des tests, soit en exécutant des nœuds), tels que les suivants :

ImportError: dlopen(.../ros2_<distro>/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so, 2): Library not loaded: @rpath/librcl_interfaces__rosidl_typesupport_c.dylib
  Referenced from: .../ros2_<distro>/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so
  Reason: image not found

Dans ce cas, la protection de l’intégrité du système est probablement activée. Suivez ces instructions pour désactiver la protection de l’intégrité du système (SIP).

Erreur de construction Qt : nom de type inconnu 'Q_ENUM'

Si vous voyez des erreurs de construction liées à Qt, par exemple :

In file included from /usr/local/opt/qt/lib/QtGui.framework/Headers/qguiapplication.h:46:
/usr/local/opt/qt/lib/QtGui.framework/Headers/qinputmethod.h:87:5: error:
      unknown type name 'Q_ENUM'
    Q_ENUM(Action)
    ^

vous utilisez peut-être qt4 au lieu de qt5 : voir https://github.com/ros2/ros2/issues/441

Symbole manquant lorsque opencv (et donc libjpeg, libtiff et libpng) sont installés avec Homebrew

Si vous avez installé opencv, vous pourriez obtenir ceci :

dyld: Symbol not found: __cg_jpeg_resync_to_restart
  Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  Expected in: /usr/local/lib/libJPEG.dylib
 in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
/bin/sh: line 1: 25274 Trace/BPT trap: 5       /usr/local/bin/cmake

Si oui, pour construire, vous devrez faire ceci:

$ brew unlink libpng libtiff libjpeg

Mais cela cassera opencv, vous devrez donc également le mettre à jour pour continuer à travailler :

$ sudo install_name_tool -change /usr/local/lib/libjpeg.8.dylib /usr/local/opt/jpeg/lib/libjpeg.8.dylib /usr/local/lib/libopencv_highgui.2.4.dylib
$ sudo install_name_tool -change /usr/local/lib/libpng16.16.dylib /usr/local/opt/libpng/lib/libpng16.16.dylib /usr/local/lib/libopencv_highgui.2.4.dylib
$ sudo install_name_tool -change /usr/local/lib/libtiff.5.dylib /usr/local/opt/libtiff/lib/libtiff.5.dylib /usr/local/lib/libopencv_highgui.2.4.dylib
$ sudo install_name_tool -change /usr/local/lib/libjpeg.8.dylib /usr/local/opt/jpeg/lib/libjpeg.8.dylib /usr/local/Cellar/libtiff/4.0.4/lib/libtiff.5.dylib

La première commande est nécessaire pour éviter que les éléments construits sur le système libjpeg (etc.) n’obtiennent la version dans /usr/local/lib. Les autres mettent à jour des choses construites par Homebrew afin qu’ils puissent trouver la version de libjpeg (etc.) sans les avoir dans /usr/local/lib.

Erreur Xcode-select : l’outil xcodebuild nécessite Xcode, mais le répertoire de développement actif est une instance de ligne de commande

Si vous avez récemment installé Xcode, vous pouvez rencontrer cette erreur :

Xcode: xcode-select: error: tool 'xcodebuild' requires Xcode,
but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

Pour résoudre cette erreur, vous devrez :

  1. Vérifiez que l’outil de ligne de commande est installé :

$ xcode-select --install
  1. Acceptez les termes et conditions de Xcode en tapant dans le terminal :

$ sudo xcodebuild -license accept
  1. Assurez-vous que l’application Xcode se trouve dans le répertoire /Applications (PAS /Users/{user}/Applications)

  2. Pointez xcode-select sur le répertoire du développeur de l’application Xcode à l’aide de la commande suivante :

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

Erreur qt_gui_cpp : générateur de liaison SIP NON disponible

Lors de la construction de qt_gui_cpp, il peut y avoir des erreurs ressemblant à ce qui suit :

--- stderr: qt_gui_cpp

CMake Error at src/CMakeLists.txt:10 (message):
  No Python binding generator found.

---
Failed   <<< qt_gui_cpp [ Exited with code 1 ]

Pour résoudre ce problème, suivez ces étapes pour installer les dépendances pour RQt.

erreur d’installation de rosdep homebrew : Échec de la détection de l'installation réussie de [qt5]

En suivant le didacticiel Creating a workspace, vous pouvez rencontrer l’erreur suivante indiquant que rosdep échoue à installer Qt5.

$ rosdep install -i --from-path src --rosdistro rolling -y
executing command [brew install qt5]
Warning: qt 5.15.0 is already installed and up-to-date
To reinstall 5.15.0, run `brew reinstall qt`
ERROR: the following rosdeps failed to install
  homebrew: Failed to detect successful installation of [qt5]

Cette erreur semble provenir d’un problème de liaison et peut être résolue en exécutant la commande suivante.

$ cd /usr/local/Cellar
$ sudo ln -s qt qt5

L’exécution de la commande rosdep devrait maintenant s’exécuter normalement :

$ rosdep install -i --from-path src --rosdistro rolling -y
#All required rosdeps installed successfully

les fenêtres

Échec de l’importation même avec la bibliothèque présente sur le système

Parfois, rclpy ne parvient pas à être importé à cause de certaines DLL manquantes sur votre système. Si tel est le cas, assurez-vous d’installer toutes les dépendances répertoriées dans les sections « Installation des prérequis » des instructions d’installation).

Si vous installez à partir de binaires, vous devrez peut-être mettre à jour vos dépendances : elles doivent être de la même version que celles utilisées pour construire les binaires.

Si vous rencontrez toujours des problèmes, vous pouvez utiliser l’outil Dependencies pour déterminer quelles dépendances manquent sur votre système. Utilisez l’outil pour charger le fichier .pyd correspondant, et il devrait signaler les modules DLL indisponibles. Assurez-vous que l’espace de travail actuel est sourcé avant d’exécuter l’outil, sinon il y aura des fichiers DLL ROS non résolus. Utilisez ces informations pour installer des dépendances supplémentaires ou ajuster votre chemin si nécessaire.

Erreur CMake fixant l’heure de modification

Si vous rencontrez l’erreur CMake file INSTALL ne peut pas définir l'heure de modification sur ... lors de l’installation des fichiers, il est probable qu’un logiciel anti-virus ou Windows Defender interfère avec la construction. Par exemple. pour Windows Defender, vous pouvez répertorier l’emplacement de l’espace de travail à exclure pour l’empêcher d’analyser ces fichiers.

Limite de chemin de 260 caractères

The input line is too long.
The syntax of the command is incorrect.

En fonction de votre hiérarchie de répertoires, vous pouvez voir des erreurs de limite de longueur de chemin lors de la construction de ROS 2 à partir de la source ou de vos propres bibliothèques.

Pour autoriser des longueurs de chemin plus importantes :

Exécutez regedit.exe, accédez à Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem et définissez LongPathsEnabled sur 0x00000001 (1).

Appuyez sur la touche Windows et tapez Modifier la stratégie de groupe. Accédez à Stratégie de l’ordinateur local > Configuration ordinateur > Modèles d’administration > Système > Système de fichiers. Faites un clic droit sur Activer les chemins longs Win32, cliquez sur Modifier. Dans la boîte de dialogue, sélectionnez Activé et cliquez sur OK.

Fermez et ouvrez votre terminal pour réinitialiser l’environnement et réessayez de construire.

Paquets CMake incapables de trouver asio, tinyxml2, tinyxml ou eigen

Nous avons vu que parfois les paquets chocolatés pour asio, tinyxml2, etc. n’ajoutent pas d’entrées de registre importantes et CMake sera incapable de les trouver lors de la construction de ROS 2. Nous n’avons pas encore pu pour identifier la cause racine, mais la désinstallation des packages chocolatey (avec -n si la désinstallation échoue la première fois), puis leur réinstallation résoudra le problème.

patch.exe ouvre une nouvelle fenêtre de commande et demande l’administrateur

Cela entraînera également l’échec de la construction des packages qui doivent utiliser le correctif, même si vous lui autorisez à utiliser les droits d’administrateur.

  • correctif de désinstallation choco ; colcon build --cmake-clean-cache - Il s’agit d’un bogue dans le paquet GNU Patch For Windows. Si ce paquet n’est pas installé, le processus de construction utilisera à la place la version de Patch distribuée avec git.

Échec du chargement de la bibliothèque partagée Fast RTPS

Fast RTPS nécessite msvcr20.dll, qui fait partie des Packages redistribuables Visual C++ pour Visual Studio 2013. Bien qu’il soit généralement installé par défaut dans Windows 10, nous savons que certaines versions de type Windows 10 ne l’ont pas installé par défaut (par exemple : Windows Server 2019). Si vous ne l’avez pas installé, vous pouvez le télécharger depuis ici.

Spécifique à l’installation binaire

  • Si votre exemple ne démarre pas à cause de DLL manquantes, veuillez vérifier que toutes les bibliothèques de dépendances externes telles que OpenCV se trouvent dans votre variable PATH.

  • Si vous oubliez d’appeler le fichier local_setup.bat depuis votre terminal, les programmes de démonstration planteront probablement immédiatement.