这是一篇19年的论文,对高速路场景下的自动驾驶使用 DDQN 算法,该方法没有额外的感知算法,直接通过摄像头的原始信息对汽车做出控制决策。说实话,这篇论文给人的感觉不太好,没有提供代码,也没有说自己使用的模拟器是什么,总体感觉比较潦草。但是,其给出的方法还算值得借鉴的。

1. 简介

因为在自动驾驶领域,很难建立一套没有死角的交通规则,因此作者决定使用一个 Model-free 的算法。并且让自动驾驶汽车直接与模拟交通交互来学习做出决策。决策者是一个深度神经网络,它为给定的系统状态提供动作选择。本篇论文使用的方法是 16 年由 DeepMind 提出的 double deep Q-network (DDQN)。

除此之外,本文使用了一个叫 safe-check 的限制条件。它基于环境语义和车辆的运动学模型对 agent 提出的控制方案进行判断,并对不安全的操作进行修正,由此减少了训练过程前期的撞墙行为,大大提高了算法训练的效率。

2. 自动驾驶车辆的安全决策

与依赖于场景先验的完全重建的中介感知方法不同,本文使用直接感知获取状态变量。如下图所示的高速公路场景,车辆最多被六辆交通车辆 (TV) 包围。文中方法使用 24 个指标来表示最近的六辆交通车辆的时空信息,他们分别是纵向和横向的方向,各个车道上最近车辆的相对距离和速度。此外,我们还使用了自我车辆的纵向速度、横向位置和横向速度作为指标,共 27 个指标。

环境感知

这 27 个指标被作为 DDQN 的输入。动作集被分为了横向动作和纵向动作。在纵向上有:恒速、加速,刹车和急刹车。而对于横向方向,有车道保持,向右变道和向左变道。两者相乘会产生 12 个动作。

我们对代理施加了 safty-check,这就是一些常见的道路安全指标,比如最小车距:

[公式]

其中,[公式]  [公式] 分别是自主车辆与前车的相对距离和速度。[公式] 是最小碰撞时间 [公式] 是必须要保留的安全距离。如果无法满足上诉的不等式,系统则会采取安全措施。我们使用了一个非常公式来描述安全措施:

[公式]

其中,[公式] 是被计算出来的碰撞事件,[公式]  [公式] 是两个阈值。

具体的安全检测措施:

  • 在纵向上使用上面,如果不满足 (1) 并且本车比前车快,则使用 (2) 选择安全动作。
  • 如果本车在最左侧车道,则将车道换到左侧 无效,同样适用于右车道。
  • 换道向左持续监控 (1) 目标车道中的前车、前车和后车。 如果条件 (1) 失败,则不启动或中止车道变换,类似于向右变换车道。通过切换到与当前横向方向相反的适当动作来启动车道中止。

3. 深度强化学习决策

算法流程图

3.1 车辆动力学

由于所有计算都处于离散空间,因此使用 [公式] 时间间隔采样

使用以下两个公式来描述车辆在纵向上的运动的位置和速度:

[公式]

对于侧向位置:

[公式]

对于纵向动作空间恒速、加速,刹车和急刹车而言,为了简化模型,将其使用一些固定的值来表示:[公式],其中 [公式] [公式]

3.2 自主车辆决策

模型初始的策略使用 [公式] - greedy。其使用的 Q-network 是一个有 2 个隐藏层,每个隐藏层有 100 个全连接的 ReLU 构成。使用 Adam 优化器,学习率为 [公式]

算法伪代码

结果:

结果

本文使用 Zhihu On VSCode 创作并发布