一、强化学习算法
强化学习属于马尔科夫决策过程,这里就不再赘述。
相关的学习过程:MDP→动态调整方法→蒙特卡洛方法→时序差分方法→贪心探索→随机策略梯度方法等。
此外,强化学习算法的分类有以下几种:
1、分为on-policy和off-plociy。
2、分为基于值函数,基于策略和A-C。
3、分为有模型和无模型强化学习。
二、强化学习与自动驾驶
强化学习输出形式的不同,从而对车辆的控制方式不同。
一般有:行为决策,轨迹规划,决规控一体和端到端四种形式。
图1 强化学习与自动驾驶形式
三、基于强化学习轨迹规划的自动驾驶
在本次帖子中,只对基于强化学习决策规划的自动驾驶进行相关的介绍和技术阐释,关于其他的形式会在后续的专栏中进行分享学习笔记。
对于轨迹规划的自动驾驶,智能体的输出将是车辆的未来的行驶轨迹,但对于行驶轨迹点的长度大小,即动作空间的大小,需要在训练前就定义好。
那么问题来了?如果仅有自车未来需要行驶的轨迹,如何实现对车辆的控制?具体原理大致如下:
图2 基于强化学习决策规划的自动驾驶过程
图2中的前三个部分都涉及了强化学习的相关工作,而后两部分只是具体实施强化学习的智能体作做出的命令。类似于一个是大脑负责思考想办法,一个是手脚负责执行看效果。
如果仅有前三部分那么交互环境无法获得世界状态的改变,不能给予相应的即时奖励去指导强化学习网络更新,所以在实现轨迹规划的自动驾驶中,所有环节都要实现。
1、基于强化学习的决策规划
首先构建强化学习的交互环境,这里可以参考GYM中的小游戏,不再赘述构建交互环境的细节。
交互环境包含的功能:实时状态、动作执行、即时奖励和被控对象世界的判断。
在执行动作之前,需要得到相关的动作,那么对于以输出自车未来的轨迹点而言的强化学习,如何设计其动作空间尤为关键!
1)离散轨迹簇:
通过提前设定的n条轨迹,这些轨迹包含了车道保持、左侧超车、右侧超车和刹车等情况,每种情况包含m个不同程度的轨迹,所以形成一个离散的动作空间轨迹集合,大小为m*n。
策略网络从而转变成了类别的选择问题,可以是嵌套分类,也可以直接变成m*n个分类问题。根据当前环境状态,选择对应的轨迹,然后预瞄控制器根据该轨迹未来的轨迹点对车辆进行控制。
2)连续轨迹点:
策略网络输出未来t个时刻的轨迹点,每个时刻的轨迹点是一个连续的空间集,在一定的区间内选取轨迹点的值。该方法可以采用lstm循环神经网络设计,但是实现难度较大。也就是说,每次强化学习的智能体输出的是一条轨迹,这条轨迹含有t个轨迹点。
以上两种方案的设计各有利弊,每种方案中的设计中又有许多的细节。
2、预瞄控制器
预瞄控制器通过输入轨迹路径,在车辆前方设置预瞄点模拟驾驶员开车视线情况分析预瞄点与路径的相对状态,结合车辆目前的行驶姿态,从而输出方向盘转角。
此外,可以对输入轨迹路径的跟踪分为横向跟踪与纵向跟踪。建立相关预瞄控制器,从而实现对车辆的控制,实现在智能体每个step内的车辆的控制。
Frenet坐标系能够输出横、纵向轨迹情况。由于横轴、纵轴相互垂直且参考车道线与实际车辆轨迹参考线平行,容易确定车辆偏离车道中心线的距离以及车辆沿车道线的行驶距离,该坐标系的表达方式可以忽略道路曲率的影响。
自车车辆和交互世界在step时间内更新了状态,从而交互环境能够给予智能体相应的即时奖励,指导强化学习网络进行更新。