警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

安装故障排除

安装故障排除技术按适用平台分类。

一般情况

一般故障排除技术适用于所有平台。

启用组播

为了通过 DDS 成功通信,所使用的网络接口必须启用组播功能。我们在过去的经验中发现,使用环回适配器时,默认情况下(在 Ubuntu 或 OSX 上)不一定会启用多播功能。请参见 原问题关于机器人应答的对话.您可以使用 ROS 2 工具验证当前设置是否允许组播:

在 1 号航站楼:

玫瑰2 组播 接收

在 2 号航站楼:

玫瑰2 组播 发送

如果第一条命令没有返回类似于

已收到  xx.xxx.xxx.xx:43751: '你好,世界!';

那么您就需要更新防火墙配置,使用 ufw.

苏都 ufw   原生 udp  224.0.0.0/4 sudo ufw   原生 udp  224.0.0.0/4

您可以使用 ifconfig 工具,并寻找 多媒体广播 在标志部分:

eno1: 国旗=4163<...,MULTICAST>;
   ...

系统中没有库,导入失败

有时 rclpy 导入失败的原因是没有找到预期的 C 扩展库。如果是这样,请将目录中存在的库与错误信息中提到的库进行比较。假设存在名称相似的文件(前缀相同,如 _rclpy。 和相同的后缀,如 所以 但 Python 版本/架构不同),您使用的 Python 解释器与构建 C 扩展时使用的不同。请确保使用与构建二进制文件时相同的 Python 解释器。

例如,操作系统更新后可能会出现这种不匹配。这时,重建工作区可能会解决问题。

利纳克斯

编译器内部错误

如果在内存受限的平台(如 Raspberry PI)上尝试编译时遇到 ICE 问题,您可能需要使用单线程编译(在编译调用前加上 MAKEFLAGS=-j1).

内存不足

"(《世界人权宣言》) ros1_桥 的当前版本需要 4GB 可用内存才能编译。如果内存不足,建议使用 COLCON_IGNORE 并跳过其编译。

多主机干扰

如果在同一网络上运行多个实例,可能会出现干扰。要避免这种情况,可以设置环境变量 ROS_DOMAIN_ID 为不同的整数,默认值为 0。这将定义系统的 DDS 域 ID。请注意,如果您使用的是 OpenSplice DDS 实现,还需要相应地更新 OpenSplice 配置文件。配置文件的位置在 OSPL_URI 环境变量。

MacOS

使用 pyenv

pyenv 似乎默认使用 .a 文件,但这会导致 rclpy因此,当在 macOS 上使用 pyenv:

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

未加载库;未找到图像

如果在运行时(无论是运行测试还是运行节点)遇到库加载问题,例如以下问题:

导入错误: dlopen(.../ros2_<distro>/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so、 2): 图书馆  装好了 @rpath/librcl_interfaces__rosidl_typesupport_c.dylib
  参考文献 来自 .../ros2_<distro>/ros2-osx/lib/python3.7/site-packages/rclpy/_rclpy.cpython-37m-darwin.so
  原因是 图像  发现

那么你可能已经启用了系统完整性保护。请遵循 本说明 禁用系统完整性保护 (SIP)。

Qt 生成错误: 未知 类型 名字 Q_ENUM

如果您看到与 Qt 有关的构建错误,例如

 文件 包括  /usr/local/opt/qt/lib/QtGui.framework/Headers/qguiapplication.h:46: /usr/local/opt/qt/lib/QtGui.framework/Headers/qinputmethod.h:87:5: 错误:
      未知 类型 名字 'q_enum';
    Q_ENUM(行动)
    ^

您使用的可能是 qt4 而不是 qt5:请参阅 https://github.com/ros2/ros2/issues/441

使用 Homebrew 安装 opencv(以及 libjpeg、libtiff 和 libpng)时缺少符号

如果安装了 opencv,可能会出现这种情况:

dyld: 符号  找到了 __cg_jpeg_resync_too_restart
  参考文献 来自 /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
  预期 : /usr/local/lib/libJPEG.dylib
  /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO /bin/sh: 线条 1: 25274 跟踪/BPT 陷阱 5       /usr/local/bin/cmake

如果是这样,您就必须这样做:

$  取消链接 libpng libtiff libjpeg

但这会破坏 opencv,因此您还需要更新它才能继续工作:

$ 苏都 安装工具名称 -改变 /usr/local/lib/libjpeg.8.dylib /usr/local/opt/jpeg/lib/libjpeg.8.dylib /usr/local/lib/libopencv_highgui.2.4.dylib$。 苏都 安装工具名称 -改变 /usr/local/lib/libpng16.16.dylib /usr/local/opt/libpng/libpng16.16.dylib /usr/local/lib/libopencv_highgui.2.4.dylib$。 苏都 安装工具名称 -改变 /usr/local/lib/libtiff.5.dylib /usr/local/opt/libtiff/lib/libtiff.5.dylib /usr/local/lib/libopencv_highgui.2.4.dylib$。 苏都 安装工具名称 -改变 /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

第一条命令是必要的,以避免根据系统 libjpeg(等)构建的程序获取 /usr/local/lib 中的版本。其他命令则是更新 Homebrew 编译的程序,以便它们可以找到 libjpeg(等)的版本,而无需将其放在 /usr/local/lib 中。

rosdep 安装错误 homebrew: 失败 侦测 成功的 安装 [qt5]

在遵循 创建工作区 教程时,可能会遇到以下错误,说明 rosdep 无法安装 Qt5。

$ rosdep 安装 -i --从路径 来源 --rosdistro 帅气 -执行 指挥部 [ 安装 qt5]
警告 qt 5.15.0  业已 安装   装回 5.15.0, 运行 ` 装回 qt`
错误:  接下来 rosdeps 失败  安装
  homebrew: 失败  侦测 成功的 安装  [qt5]

这一错误似乎源于 连接问题 可通过运行以下命令解决。

$ CD /usr/local/Cellar $ 苏都 ln -s qt qt5

运行 rosdep 命令现在应能正常执行:

$ rosdep 安装 -i --从路径 来源 --rosdistro 帅气 -y
#All required rosdeps installed successfully

视窗

即使系统中存在库,导入仍然失败

有时 rclpy 导入失败的原因是系统中缺少某些 DLL。如果是这样,请确保安装了 安装说明).

如果从二进制文件安装,可能需要更新依赖项:它们必须与用于构建二进制文件的版本相同。

如果仍有问题,可以使用 依赖关系 工具来确定系统中缺少哪些依赖项。使用该工具加载相应的 .pyd 文件,它就会报告无法使用 DLL 模块。在执行该工具之前,请确保当前工作区的源代码,否则会出现未解决的 ROS DLL 文件。利用这些信息安装其他依赖项,或根据需要调整路径。

CMake 错误设置修改时间

如果遇到 CMake 错误 文件 安装 不能 设置 修改 时间 关于 ... 在安装文件时,反病毒软件或 Windows Defender 很可能会干扰构建。例如,对于 Windows Defender,您可以列出要排除的工作区位置,以防止它扫描这些文件。

260 个字符的路径限制

"(《世界人权宣言》) 输入 线条  过于 长。 句法   指挥部  不正确。

根据您的目录层次结构,在从源代码或您自己的库构建 ROS 2 时,您可能会看到路径长度限制错误。

允许更长的路径:

运行 regedit.exe,导航至 Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem并设置 已启用长路径 到 0x00000001 (1)。

按下 windows 键并键入 编辑 组别 政策.导航至本地计算机策略;计算机配置;管理模板;系统;文件系统。右键单击 启用 Win32 路径,单击编辑。在对话框中,选择已启用,然后单击确定。

关闭并打开终端,重置环境并尝试再次构建。

CMake 软件包无法找到 asio、tinyxml2、tinyxml、eigen 或 log4cxx

我们看到,有时巧克力包装的 秋叶, tinyxml2等不会添加重要的注册表项,因此 CMake 在构建 ROS 2 时无法找到这些注册表项。 我们尚未找到根本原因,但卸载巧克力软件包(使用 -n 如果第一次卸载失败),然后重新安装即可解决问题。

patch.exe 会打开一个新的命令窗口,并要求输入管理员信息。

这也会导致需要使用补丁的软件包的构建失败,即使你允许它使用管理员权限。

  • 确保在以管理员身份运行的 Visual Studio 命令提示符下进行构建。

  • 在某些机器上,取消提示而不选择 "是 "也会起作用。

加载 Fast RTPS 共享库失败

快速 RTPS 要求 msvcr20.dll视觉 C++ 可重新分配 套餐 对于 视觉 工作室 2013.虽然在 Windows 10 中通常默认安装了该软件,但我们知道有些类似 Windows 10 的版本并没有默认安装该软件(例如:Windows Server 2019)。如果没有安装,可以从以下地址下载 这里.

二进制安装专用

  • 如果您的示例因缺少 DLL 而无法启动,请确认 OpenCV 等所有外部依赖库都位于您的 路径 变量。

  • 如果您忘记调用 local_setup.bat 文件,演示程序很可能会立即崩溃。