您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 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。
异常来源 setup.bash
如果在从源代码构建环境后尝试源代码时遇到异常,请尝试升级 胶管
相关软件包使用
胶管 版本检查 # 检查是否有更新的版本
苏都 适切 安装 python3-colcon* --仅升级 # 将已安装的 colcon 软件包升级到最新版本
巨蟒冲突
警笛
不能与 ROS 2 结合使用。 路径
环境变量中没有任何 conda 路径。您可能需要检查您的 .bashrc
并注释掉这一行。
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 中。
Xcode-select 错误:工具 xcodebuild
需要 Xcode,但活动开发者目录是一个命令行实例
如果您最近安装了 Xcode,可能会遇到此错误:
Xcode xcode-select: 错误: 工具 'xcodebuild'; 需要 Xcode,但 活动 开发人员 通讯录 '/Library/Developer/CommandLineTools'; 是 a 指挥部 线条 工具 实例
要解决此错误,您需要
仔细检查是否安装了命令行工具:
$ xcode-select --安装
在终端中键入接受 Xcode 的条款和条件:
$ 苏都 xcodebuild -许可证 接受
确保 Xcode 应用程序位于
/应用程序
目录(不是/Users/{user}/Applications
)点
xcode-select
到 Xcode 应用程序 "开发者 "目录:
$ 苏都 xcode-select -s /Applications/Xcode.app/Contents/Developer
qt_gui_cpp 错误:SIP 绑定生成器不可用
在构建 qt_gui_cpp 时,可能会出现如下错误:
--- stderr: qt_gui_cpp CMake 错误 于 src/CMakeLists.txt:10 (信息):
没有 Python 结合 发生器 找到了--- 失败 <<<; qt_gui_cpp [ 退出 与 代码 1 ]
要修复此问题,请遵循 这些步骤 来安装 RQt 的依赖项。
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
我们看到,有时巧克力包装的 秋叶
, tinyxml2
等不会添加重要的注册表项,因此 CMake 在构建 ROS 2 时无法找到这些注册表项。 我们尚未找到根本原因,但卸载巧克力软件包(使用 -n
如果第一次卸载失败),然后重新安装即可解决问题。
patch.exe 会打开一个新的命令窗口,并要求输入管理员信息。
这也会导致需要使用补丁的软件包的构建失败,即使你允许它使用管理员权限。
巧克力 卸载 补丁; 胶管 构建 --cmake-clean-cache
- 这是 GNU Windows 补丁包.如果未安装该软件包,构建过程将使用随 git 发布的 Patch 版本。
创建进程失败
如果运行 ROS 二进制程序时出现错误:
| 失败 至 创建 处理.
可能是没有找到 Python 解释器。对于每个可执行文件,都会使用所附脚本的 Shebang(第一行),因此请确保 Python 在预期路径下可用(默认值为: C:\Python38\
).
二进制安装专用
如果您的示例因缺少 DLL 而无法启动,请确认 OpenCV 等所有外部依赖库都位于您的
路径
变量。如果您忘记调用
local_setup.bat
文件,演示程序很可能会立即崩溃。
使用 WSL2 运行 RViz
如果您使用 WSL2 在 Windows 上运行 ROS 2 时,您可能会在运行 RViz 时遇到类似的问题:
$ rviz2
[INFO] [1695823660.091830699] [rviz2]:不支持立体声
[INFO] [1695823660.091943524] [rviz2]:OpenGl 版本:4.1 (GLSL 4.1)
D3D12: 移除设备。
分段故障
一个可行的解决方案是强制 RViz 使用软件渲染:
$ 出口 libgl_always_software=真
$ rviz2
[INFO] [1695823660.091830699] [rviz2]:不支持立体声