CARLA教程-04-ROS2接口与话题
04 ROS2 接口与话题
CARLA 本身不发 ROS 话题,需桥接。0.9.16 有两种方式:
| 方式 | 说明 | 是否重编 CARLA | 性能 |
|---|---|---|---|
| Native ROS2 接口(本教程用) | 内建在服务端 | 是(--ros2) |
最好、延迟最低(官方推荐) |
| ROS Bridge(独立库) | 单独的包,连服务端转话题 | 否 | 有额外延迟 |
本教程用 native 接口(性能最好,且示例已在源码里)。
4.1 前提
- 第 02 章已把 CARLA 编译成功(不带 –ros2)。
- ROS2 humble 已装(
/opt/ros/humble,含 rclcpp)。
4.2 ⚠️ 带 --ros2 重新编译
native ROS2 需 WITH_ROS2,但 make launch --ros2 增量编译不会重编 LibCarla/Carla 插件,必须强制重编。而且 make rebuild 不可用(它不把 --ros2 传给 BuildLibCarla)。要分步:
修复 5:foonathan_memory 版本号
Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Carla.Build.cs 里写死了 libfoonathan_memory-0.7.3.a,但实际 FastDDS 构建的是 0.7.4。改成 0.7.4,否则链接报 cannot open libfoonathan_memory-0.7.3.a:
1 | - PublicAdditionalLibraries.Add(Path.Combine(LibCarlaInstallPath, "lib", "libfoonathan_memory-0.7.3.a")); |
分步强制重编
1 | source /opt/ros/humble/setup.zsh |
⚠️
make rebuild不可用:Linux.mk 的rebuild目标没把$(ARGS)传给BuildLibCarla.sh,ros2 变体编不到;还会清坏 PythonAPI 依赖。必须用上面的分步命令。
4.3 ⚠️ DDS 配置(解决发现失败)
FastDDS 默认用共享内存(SHM)传输,常导致节点互相发现不了(话题列表为空)。0.9.16 自带一个禁用 SHM、强制 UDP 的 profile:
PythonAPI/examples/ros2/config/fastrtps-profile.xml
把它设到环境变量(加到 ~/.bashrc / ~/.zshrc):
1 | export FASTRTPS_DEFAULT_PROFILES_FILE=~/carla_project/carla/PythonAPI/examples/ros2/config/fastrtps-profile.xml |
4.4 启动 native ROS2 + 读话题
1 | # 终端 1: 启动 CARLA(带 --ros2) |
1 | # 终端 2: 跑 native 示例,生成 ego 车 + 传感器(发布话题) |
1 | # 终端 3: 读话题 |
应看到话题:
/carla/hero/rgb/image(RGB 相机)/carla/hero/rgb/camera_info/carla/hero/lidar/point_cloud/carla/hero/gnss、/carla/hero/imu/carla/hero/vehicle_control_cmd等
4.5 ⚠️ 关键:系统 python vs conda
这是最容易踩的坑:
| 操作 | 用哪个 python | 原因 |
|---|---|---|
ros2 命令、ros2_native.py、检测节点 |
系统 python3(/usr/bin/python3 + ROS2) |
rclpy/ros2cli 装在系统 python;conda 的 python 找不到 |
generate_traffic.py |
conda carla 环境 | 要 import carla,装在 conda |
混用会报 PackageNotFoundError: ros2cli 或 No module named 'carla'。
zsh 用
source /opt/ros/humble/setup.zsh(别用setup.bash,BASH_SOURCE在 zsh 失效会报setup.sh not found)。