Dépannage de l’installation
Les techniques de dépannage pour l’installation sont triées selon les plates-formes auxquelles elles s’appliquent.
Plateformes
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 :
Vérifiez que l’outil de ligne de commande est installé :
$ xcode-select --install
Acceptez les termes et conditions de Xcode en tapant dans le terminal :
$ sudo xcodebuild -license accept
Assurez-vous que l’application Xcode se trouve dans le répertoire
/Applications
(PAS/Users/{user}/Applications
)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.
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.