🚗 用 Python 模拟车辆行为预测与轨迹生成(支持变道/减速行为)
自动驾驶不能只看现在,更要预测未来。特斯拉的 FSD 系统会实时预测周围每辆车未来几秒的位置、速度与意图,比如:会不会加速?要不要变道?今天我们就来模拟一个行为预测系统,并用 Python 生成多种轨迹行为。
🧠 一、行为预测的核心目标
| 预测维度 | 示例 |
|---|---|
| 未来位置 | 2秒后的位置点 (x, y) |
| 意图判断 | 是否加速、减速、变道、停车 |
| 路径选择 | 左转/直行/右转,驶入匝道等 |
特斯拉常用:
- LSTM/RNN 序列模型进行轨迹预测
- 多假设轨迹(multi-modal trajectory prediction)
- 贝叶斯+分类器判断行为意图
🎯 二、我们要做的事
-
构造一辆“正在行驶”的目标车辆
-
模拟其3种行为意图:
- 🚗 保持直行
- ↘️ 向右变道
- ⛔ 急刹减速
-
基于初始状态生成不同未来轨迹
💻 三、Python 实现多行为轨迹预测
import matplotlib.pyplot as plt
import numpy as np
# 初始位置和速度
x0, y0 = 0, 0
vx, vy = 10, 0 # 每秒 10 米直行
dt = 0.1 # 时间间隔 0.1秒
T = 3 # 预测 3秒
time_steps = int(T / dt)
t = np.linspace(0, T, time_steps)
# 模拟三种行为
def straight():
return [(x0 + vx*t_i, y0) for t_i in t]
def lane_change_right():
return [(x0 + vx*t_i, y0 - 2*np.sin(np.pi * t_i / T)) for t_i in t]
def sudden_brake():
return [(x0 + vx * t_i * np.exp(-2*t_i), y0) for t_i in t]
# 获取轨迹
traj1 = straight()
traj2 = lane_change_right()
traj3 = sudden_brake()
# 可视化
plt.figure(figsize=(10, 4))
plt.plot(*zip(*traj1), label="🚗 保持直行")
plt.plot(*zip(*traj2), label="↘️ 右变道")
plt.plot(*zip(*traj3), label="⛔ 急刹车")
plt.title("车辆未来轨迹预测(基于行为意图)")
plt.xlabel("x(前进方向)")
plt.ylabel("y(横向)")
plt.legend()
plt.grid(True)
plt.show()
📊 四、运行结果说明
三条轨迹展示不同未来行为:
- 🚗 直行:线性延展,y 不变
- ↘️ 变道:前进 + y方向偏移(拟合变道幅度)
- ⛔ 急刹:前进距离减小,呈指数下降
❌ 五、容易出错点分析
| 错误点 | 描述 | 建议 |
|---|---|---|
| 行为建模不真实 | 变道模拟太生硬 | 使用 S 曲线、Bézier 曲线平滑轨迹 |
| 没有考虑交通约束 | 车辆不能直接跳跃位置 | 加入车道线与速度约束限制 |
| 模型预测过度自信 | 单一轨迹预测 | 用多模态轨迹预测 + 概率输出(如3种轨迹+置信度) |
🧠 六、特斯拉真实使用的方法
- 输入:历史轨迹、周边车辆、地图拓扑
- 模型:Transformer + GNN(图神经网络)
- 输出:每辆车最多 5 条轨迹 + 各自概率
- 决策模块选择风险最小的主车路径进行控制
✅ 总结
本篇你掌握了:
- 多行为轨迹预测的原理与分类
- Python 模拟三类行为(直行/变道/急刹)
- 如何提升轨迹合理性与安全性
下一篇我们将进入融合视觉与雷达结果后的最终规划:
用 Python 模拟 Lidar-IMU-视觉融合路径规划(附图示)