自动驾驶代理
本文介绍 CARLA ROS Bridge 中的自动驾驶代理(AD Agent):它订阅路径点与地图信息,
用规则式局部规划让车辆沿路径行驶,属于 carla_ros_bridge 的既有功能。
参考
拓展:自行实现「端到端神经网络图像驾驶」
本文的自动驾驶代理是规则式的:先由地图算出路径,再按几何规则跟踪路径。
下面是在该功能基础上自主实现的一套「相机图像 → 控制指令」的端到端神经网络驾驶,
代码位于
src/ground/carla_end_to_end_nn,
详细介绍(计算原理、源码解析、性能评价)见
CARLA 端到端神经网络(图像 → 控制)。
与本文示例的区别
| 对比项 | 本文示例(自动驾驶代理) | 本拓展模块 |
|---|---|---|
| 技术路线 | carla_ros_bridge + 规则式局部规划 |
CARLA Python API 直连 + 端到端 CNN |
| 是否依赖 ros-bridge | 必须编译并运行 ros-bridge | 不需要,仅需 carla Python 客户端 |
| 输入 | 路径点 + 地图 | 相机图像(原始像素) |
| 决策方式 | 规则式(查地图算路径,几何跟踪) | 神经网络(图像直接 → 转向) |
| 模块分层 | 感知 / 规划 / 控制分层明确 | 无分层,图像直接变成控制量 |
| 是否可训练 | 否(规则固定) | 是:行为克隆采集专家数据后训练 CNN |
| 框架依赖 | — | 默认纯 numpy(无需 TensorFlow/PyTorch) |
| 无 CARLA / 无图形界面时 | 无法运行 | --headless --demo 离线自证并导出曲线 |
复用本文的配置步骤
CARLA 服务端的启动、宿主机 IP 与端口 2000 的查看、虚拟机网络设置等步骤 与已有示例完全一致,此处不再重复,请参考 设置并连接到 Carla 模拟器 的 「启动 Carla 服务器」与「使用 Carla 客户端启动 Ego Vehicle」小节; 连接失败的排查见同一篇的「常见问题」小节。
不要从头到尾照做已有示例
已有示例中的「设置 Carla ROS Bridge」「使用 rviz 进行可视化」等小节属于 ros-bridge 路线(需要 catkin 编译 ros-bridge)。本拓展模块不依赖 ros-bridge, 这些步骤可以跳过。
本拓展新增的内容
- 端到端神经网络:单个 CNN 直接把 的相机图像映射为转向角, 中间不含人工的感知/规划环节。
- 行为克隆数据采集:由专家控制器(沿车道前视的纯跟踪律)实际驾驶并记录 (图像, 转向) 对,保证图像与标签有因果关系。
- 纯 numpy 反向传播:含卷积、ReLU、最大池化、全局平均池化与 tanh 输出层的 完整手写反向传播,无需 TensorFlow/PyTorch。
- 梯度正确性保障:最大池化反向按 argmax 回传,并有有限差分梯度校验与回归测试。
- 离线取证模式:
--headless --demo用合成道路图像训练并导出损失曲线、 预测对比曲线与样本图,无 CARLA、无 GPU、无 TensorFlow 也能自证。 - ROS 话题接口:发布图像、转向指令与控制量,便于外部可视化与记录。
运行本拓展模块
除本文所需环境外,只需补装 CARLA 0.9.16 的 Python 客户端 (端到端 CNN 为纯 numpy 实现,无需 TensorFlow/PyTorch):
pip3 install <CARLA>/PythonAPI/carla/dist/carla-0.9.16-cp310-cp310-manylinux_2_31_x86_64.whl
离线取证(不需要 CARLA,先用合成图像确认链路可用,约 3~4 分钟):
python3 src/ground/carla_end_to_end_nn/main.py --headless --demo --save_dir ~/shots
行为克隆采集 → 训练 → 端到端驾驶(--host 的填法与本文一致:填宿主机 IP):
python3 src/ground/carla_end_to_end_nn/main.py --mode collect --host 192.168.8.1 --frames 300
python3 src/ground/carla_end_to_end_nn/main.py --mode train --data_dir dataset --epochs 60
python3 src/ground/carla_end_to_end_nn/main.py --mode test --host 192.168.8.1 --sim_time 20
使用 launch 启动(ROS 2 / ROS 1):
# ROS 2
ros2 launch carla_end_to_end_nn main.launch.py host:=192.168.8.1
# ROS 1
roslaunch carla_end_to_end_nn main.launch host:=192.168.8.1 mode:=test
实测结果
本机离线取证模式实测(--epochs 60 --samples 150,无需 CARLA):
| 指标 | 数值 |
|---|---|
| MAE | 0.09364 |
| 转向方向一致率 | 98.0% |
| 预测/标签相关系数 | +0.992 |
| 零输出基线 MAE | 0.40268(网络优于基线 4.3 倍) |


完整的调优过程(含 maxpool 梯度缺陷与 tanh 缺失的排查)见 CARLA 端到端神经网络(图像 → 控制) 第 6 节。