在 ROS2 节点中调用 OpenPCDet 时,比较容易遇到 Conda 环境和 ROS2 系统环境冲突的问题。这篇文章记录我在配置过程中的处理方式。
1. 问题背景
OpenPCDet 通常运行在 Conda 环境中,例如:
| |
而 ROS2 通常安装在系统目录,例如:
| |
因此运行 ROS2 + OpenPCDet 节点时,需要同时处理:
- Conda Python 环境;
- ROS2 Python 接口;
- ROS2 系统环境变量;
- C++ 动态库链接问题。
2. 基本原则
不要直接在普通系统终端里运行 Conda 环境中的 OpenPCDet 代码。
推荐流程是:
- 先激活 OpenPCDet Conda 环境;
- 在该环境中安装需要的 ROS2 Python 依赖;
- source ROS2 的系统环境变量;
- 必要时设置
LD_PRELOAD; - 回到 OpenPCDet 根目录运行节点。
3. 激活 OpenPCDet Conda 环境
| |
后续命令都建议在这个环境下执行。
4. 安装 ROS2 Python 基础库
假设使用的是 ROS2 Humble:
| |
注意:这里安装的是 Python 接口,不等于安装完整 ROS2。
如果你的 ROS2 版本不是 Humble,需要根据实际版本调整后续路径。
5. 加载 ROS2 系统环境变量
| |
这一步很重要,否则 Python 代码中可能无法正确找到 ROS2 相关包和环境配置。
6. 处理 C++ 动态库 ImportError
如果运行时遇到 C++ 动态库相关的 ImportError,可以尝试强制预加载系统的 libstdc++.so.6:
| |
完整运行流程如下:
| |
7. 推荐启动脚本
为了避免每次手动输入,可以写一个简单脚本,例如:
| |
保存为:
| |
赋予执行权限:
| |
运行:
| |
8. 排查思路
如果仍然报错,可以按下面顺序排查:
8.1 检查当前 Python 是否来自 Conda 环境
| |
预期路径应类似:
| |
8.2 检查 rclpy 是否能导入
| |
8.3 检查 ROS2 环境变量
| |
如果使用 Humble,预期输出:
| |
8.4 检查 libstdc++ 路径
| |
如果已经设置,应该看到:
| |
总结
ROS2 与 OpenPCDet 一起使用时,核心问题不是模型本身,而是 Python 环境和系统 ROS2 环境之间的衔接。我的建议是把启动流程写成脚本,固定执行顺序,避免每次手动配置导致环境不一致。