Carla 无人车路径跟踪系统实现与深度分析报告
1. 项目背景与实验目标
1.1 实验背景与理论意义
路径跟踪作为自动驾驶技术的核心基础环节,是实现车辆自主导航的关键支撑,其核心目标是控制车辆沿预设参考路径稳定行驶,同时保证跟踪精度与行驶安全性。Carla 作为开源自动驾驶模拟器,提供了真实的城市交通场景与车辆动力学模型,为路径跟踪算法的验证提供了可靠平台。
纯追踪算法(Pure Pursuit)作为一种经典的几何路径跟踪算法,凭借其清晰的数学直觉、较低的计算复杂度,在低速场景下具备优异的稳定性与泛化能力,是无人车路径跟踪控制的重要算法范式。本次实验旨在通过底层实现纯追踪算法,深入探索车辆动力学约束、预瞄距离优化、转向控制限幅等关键环节,填补理论推导与工程落地之间的鸿沟,验证纯追踪算法在城市道路场景下的路径跟踪性能。
1.2 核心研究目标
基于以上背景,我设定了四个核心研究目标:
-
跟踪精度突破:针对直线路段与弯道场景下的跟踪误差差异,通过优化预瞄距离与转向控制参数,提升轨迹与参考路径的贴合度。
-
车辆动力学适配:基于Tesla Model 3车辆模型,优化油门与转向控制限幅,解决车辆原地不动、弯道脱离路径等动力学适配问题。
-
工程化实现优化:针对Windows环境下文件路径映射、Carla模拟器交互异常、数据文件生成失败等问题,提供可落地的工程化避坑方案。
-
数据闭环验证:构建完整的轨迹数据记录与可视化流程,生成轨迹对比图与CSV数据文件,实现算法效果的量化评估与可追溯分析。
2. 环境部署与工程化避坑深度解析
2.1 基础架构依赖
| 工具/环境 | 版本/说明 |
|---|---|
| Carla 模拟器 | 0.9.13(支持Python API交互与车辆动力学模拟) |
| Python | 3.8.10(推荐Anac |
| 核心依赖库 | carla、numpy、matplotlib、csv(用于数据处理与可视化) |
| 开发平台 | Windows 10/11(需配置好Python环境变量与Carla路径) |
2.2 关键依赖库说明
- Carla Python API:实现与模拟器的交互,支持车辆生成、路点获取、控制指令发送等核心功能。
- NumPy:利用向量化运算特性,将复杂的三角函数、矩阵运算转化为高效的数值计算,提升算法执行效率。
- Matplotlib:实现轨迹对比图绘制,支持中文标签显示与高清图像导出,为结果可视化提供支撑。
2.3 工程化避坑指南
- 车辆无响应问题:需通过
vehicle.set_simulate_physics(True)激活车辆物理引擎,同时将油门控制值设置为0.3-0.35,避免车辆因动力不足原地不动。 - 数据文件生成失败:需提前创建文件目录,使用绝对路径指定文件输出位置,避免相对路径映射异常;同时确保程序正常执行完
finally模块,不中途中断。 - 弯道脱离路径:将预瞄距离设置为8.0m,同时对转向角进行限幅处理(
-0.5~0.5),避免因转向幅度过大导致车辆失控。
3. 核心算法流程与数学直觉实现
3.1 纯追踪算法核心思想
纯追踪算法的核心是“几何预瞄控制”:在参考路径上选取一个位于车辆前方的预瞄点,通过计算车辆当前位置与预瞄点的几何关系,求解所需的转向角,使车辆沿圆弧轨迹驶向预瞄点,从而实现路径跟踪。该算法通过调整预瞄距离,平衡跟踪精度与行驶稳定性。
3.2 几何模型与公式推导
1. 局部坐标系转换
将预瞄点坐标转换到车辆局部坐标系下,消除车辆航向角的影响,得到预瞄点的纵向偏移量 与横向偏移量 :
其中:
-
为车辆当前位置坐标
-
为预瞄点在全局坐标系下的坐标
-
为车辆当前的航向角(车头朝向与全局x轴的夹角)
2. 航向偏差角计算
基于局部坐标系下的偏移量,计算预瞄点与车辆当前航向的夹角 :
3. 转向角求解
基于阿克曼转向几何原理,推导车辆为驶向预瞄点所需的前轮转向角 :
其中:
-
为车辆轴距(前后轴中心的距离,本项目中Tesla Model 3取 )
-
为预瞄距离(车辆到预瞄点的距离,本项目取 )
4. 转向角限幅处理
为保证车辆行驶稳定性,避免转向幅度过大导致失控,将计算得到的转向角限幅在车辆可控范围内:
说明:
clip为限幅函数,确保输出转向角始终在 之间,适配Carla模拟器的车辆控制接口。
3.3 算法工程实现细节
class PurePursuit:
def __init__(self, path, lookahead=8.0):
self.path = path # 参考路径点集
self.Ld = lookahead # 预瞄距离
self.wheelbase = 2.5 # 车辆轴距
def get_goal(self, veh_loc):
# 寻找离车辆最近的路径点,向前取预瞄点
min_dist = float('inf')
idx = 0
for i, (px, py) in enumerate(self.path):
dist = np.hypot(px - veh_loc.x, py - veh_loc.y)
if dist < min_dist:
min_dist = dist
idx = i
return self.path[min(idx + 3, len(self.path)-1)]
def calc_steer(self, trans, goal):
# 局部坐标系转换与转向角计算
vx, vy = trans.location.x, trans.location.y
yaw = np.radians(trans.rotation.yaw)
gx, gy = goal
dx, dy = gx - vx, gy - vy
lx = dx * np.cos(yaw) + dy * np.sin(yaw)
ly = -dx * np.sin(yaw) + dy * np.cos(yaw)
alpha = np.arctan2(ly, lx)
steer = np.arctan2(2 * self.wheelbase * np.sin(alpha), self.Ld)
return np.clip(steer / 0.8, -0.5, 0.5)
4. 实验结果深度剖析与数据洞察
4.1 实验参数设置
- 车辆行驶时间:46s(适配参考路径长度,确保车辆完整跑完全程)
- 油门控制值:0.3(匀速行驶,兼顾动力与稳定性)
- 参考路径长度:80个路点,路径总长度约240m
- 预瞄距离:8.0m(平衡跟踪精度与行驶稳定性)
4.2 系统实现效果
系统实现效果图如下


4.3 轨迹跟踪结果可视化分析
轨迹对比图如下:

- 直线路段:实际轨迹与参考路径高度重合,跟踪误差小于0.5m,无明显偏移。
- 弯道路段:受车辆动力学约束,实际轨迹与参考路径存在轻微偏差,但整体未脱离车道,偏差控制在1.5m以内。
- 全程跟踪:车辆完整跑完全程参考路径,无中途停止、原地打转或严重脱离路径的情况,跟踪稳定性良好。
4.4 跟踪误差量化评估
基于trajectory_data.csv数据,对跟踪误差进行量化分析:
-
平均跟踪误差:0.78m
-
最大跟踪误差:1.45m(出现在弯道处)
-
误差分布:直线路段误差占比70%(<0.5m),弯道路段误差占比30%(0.5-1.5m),符合纯追踪算法的误差特性。
5. 项目总结与未来进阶
5.1 项目完成情况
本项目成功实现了基于纯追踪算法的Carla无人车路径跟踪系统,完成了以下核心目标:
-
实现了Carla模拟器与Python环境的稳定交互,完成车辆生成、路径生成、控制指令发送全流程。
-
基于地图路点生成连续参考路径,车辆可完整跑完全程参考路径。
-
纯追踪算法有效控制车辆跟踪参考路径,轨迹贴合度良好,平均跟踪误差小于1m。
-
构建了完整的数据闭环流程,成功生成轨迹对比图与CSV数据文件,实现结果的可视化与量化评估。
5.2 关键问题与解决方法复盘
- 车辆无响应问题:通过激活车辆物理引擎、优化油门控制值,解决了车辆原地不动的问题。
- 弯道脱离路径问题:调整预瞄距离至8.0m,对转向角进行限幅处理,提升了弯道跟踪的稳定性。
- 数据文件生成失败问题:使用绝对路径指定文件输出位置,提前创建文件目录,确保数据文件正常生成。
5.3 未来改进方向
- 自适应预瞄距离优化:根据车辆行驶速度与路径曲率动态调整预瞄距离,进一步提升弯道跟踪精度。
- 速度控制闭环:引入PID速度控制器,实现车辆速度的自适应调节,提升行驶稳定性。
- 多场景扩展:对比模型预测控制(MPC)等其他路径跟踪算法,分析不同算法在复杂场景下的性能差异。
- 工程化部署:将算法部署到真实ROS平台,实现仿真到实车的迁移验证。
参考文献
[1] Carla Simulator Documentation. https://carla.readthedocs.io/
[2] 龚建伟, 姜岩. 无人驾驶车辆模型预测控制[M]. 北京理工大学出版社, 2014.
[3] 基于纯追踪算法的无人车路径跟踪控制研究. 汽车工程, 2020.