一种基于强化学习的自动变道机动方法

news2024/7/30 4:26:07

文章目录

  • 摘要
  • 前言
  • 相关的工作
  • 方法论
    • 动作空间
  • 奖励函数设计
    • Q学习
  • 仿真结果
  • 结论

摘要

变道是一项至关重要的车辆操作,需要与周围车辆协调。建立在基于规则的模型上的自动换道功能可能在预定义的操作条件下表现良好,但在遇到意外情况时可能容易失败。在我们的研究中,我们提出了一种基于强化学习的方法来训练车辆智能体学习自动变道行为,以便它可以在各种甚至不可预见的情况下智能地进行变道。特别是,我们将状态空间和动作空间都视为连续的,并设计了一个具有闭式贪心策略的 Q 函数逼近器,这有助于提高深度 Q 学习算法的计算效率。为训练算法进行了广泛的模拟,结果表明基于强化学习的车辆智能体能够为变道操作学习平稳有效的驾驶策略。

论文地址:A Reinforcement Learning Based Approach for Automated Lane Change Maneuvers

前言

变道机动可能是一项艰巨的任务,因为车辆需要警惕地观察其自我车道上的领先车辆和目标车道上的周围车辆,并根据这些相关车辆表现出的潜在对抗或合作反应来执行适当的操作。

自动变道机动的研究已经广泛开展,工作大致可分为两个功能类别:决策模块和控制执行模块。

我们将重点关注操作控制方面,即车辆如何在接收到来自决策模块的命令后自动执行变道操作。

相关的工作

  • 解决自动变道问题的传统方法主要依赖于预定义的规则和明确设计的模型。(GPS+差分定位导入到自行车模型中、MPC等等)

    缺点:在动态情况和不同驾驶风格下规划的轨迹缺乏灵活性,MPC类时间后退优化方法的因为优化标准可能太复杂而无法针对所有场景明确制定

  • 另一种方法是通过合作技术连接所有车辆。

  • 机器学习 (ML) 算法,如SVM、随机森林。

  • 融合机器学习与传统算法(神经网络+PID)

  • 强化学习

    在之前的一项研究 [14] 中,我们使用 RL 来训练车辆智能体以在交互式驾驶环境下学习最佳匝道合并驾驶策略。

    然而,在那项工作中,我们没有考虑横向控制问题,因为我们假设智能体车辆将沿着其行驶车道的中心线行驶。在这项工作中,我们扩展了之前工作中使用的方法,并采用 RL 架构来处理变道案例,并在状态空间、动作空间和奖励函数中扩展了定义。如果定义了更复杂的状态和动作,我们提出的框架的设计也可以工作。

方法论

在一个统一模型中优化纵向和横向控制是一种很好的做法,如在 MPC 控制器中,但将复杂的车辆操纵分成两个相关模块也很常见,即纵向控制模块和横向控制模块.

我们选择利用成熟的跟车模型、智能驾驶员模型 (IDM) 来构建纵向控制器。

还有一个与两个控制器并行工作的间隙选择模块。车辆收到换道指令后,间隙选择模块会根据周围车辆的所有信息(如速度、加速度、位置、 ETC。)。如果间隙足以容纳允许最大加减速度下的速度差,并能保证当前速度下的最小安全距离,则认为是可接受的间隙,然后将启动变道控制器。纵向和横向控制器将相互交互并共同发挥作用以执行整体变道任务,而它们被单独设计为单独的模块。

在自由交通条件下或在交互式驾驶情况下的纵向行为。

同样值得注意的是,当自我车辆进行车道变换时,它可能会在过渡期间看到自我车道和目标车道中的两辆领先车辆。我们实施的 IDM 跟车模型将允许自我车辆通过在其自我车道和目标车道上观察到的两个领导者之间进行平衡来调整其纵向加速度。较小的值将用于削弱车道变换启动引起的车辆加速度的潜在不连续性。同时,间隙选择模块在整个换道过程中仍然充当安全卫士,检查每个时间步的间隙是否仍然可以接受。如果没有,决策模块将发出改变或中止机动的命令,控制执行模块将重新定位在原来的车道上。这样,纵向控制器会考虑周围的驾驶环境以确保纵向安全,而横向控制器会指示车辆智能地并入任何可接受的间隙。

动作空间

为确保转向角输入连续且平滑,偏航率不应有突然变化,换句话说,偏航加速度不会无规律地波动。因此,我们设计了 RL 智能体来学习偏航加速度,即,动作空间定义为车辆偏航加速度 a y a w a_{yaw} ayaw
a = a y a w ∈ A a = a_{yaw} \in A a=ayawA
成功的变道不仅与车辆动力学有关,还取决于道路几何形状,即变道是在直线段还是弯道上进行。在我们的研究中,我们用车辆动力学和道路信息来定义状态空间。具体来说,状态空间包括自我车辆的速度 v v v、纵向加速度 a a a、位置 x 、 y x、y xy、偏航角 θ θ θ、目标车道 i d id id、车道宽度 w w w和道路曲率 w w wc。
s = ( v , a , x , y , θ , i d , w , c ) ∈ S s=(v,a,x,y,\theta,id,w,c)\in S s=(v,a,x,y,θ,id,w,c)S

当输入状态处于高维空间(例如来自视觉感知模块)或带有测量噪声时,可以在不改变算法结构的情况下将此处定义的状态空间自适应扩展到较大尺寸,这是 RL 方法的一个优势。

奖励函数设计

通常,在变道过程中,我们的注意力集中在操作的安全性、平稳性和效率上。由于纵向模块和间隙选择模块已经考虑到安全问题,横向控制器通过奖励函数来考虑平滑性和效率。奖励函数中的组件是根据与动作表现最相关的变量来选择的,它们的权重是通过尝试不同的参数集来决定的。具体而言,由于考虑到偏航加速度直接影响横向运动中的偏移量,所以通过偏航加速度 r a c c e r_{acce} racce来评估平滑度。
r a c c e = w a c c e ∗ f a c c e ∗ ( a y a w ) r_{acce}=w_{acce}*f_{acce}*(a_{yaw}) racce=waccefacce(ayaw)

其中 r a c c e r_acce racce表示偏航加速度获得的即时奖励, w a c c e w_{acce} wacce是权重,可以设计为常数值或与横向位置相关的函数, w a c c e w_{acce} wacce是评价 a y a w a_{yaw} ayaw的函数。我们目前使用的简单格式为 r a c c e = − 1.0 ∗ ∣ a y a w ∣ r_{acce} = −1.0 ∗ |a_{yaw}| racce=1.0ayaw

另一个衡量平顺性的指标是横摆率 w y a w w_{yaw} wyaw,反映了驾驶员在变道过程中的舒适度,横摆率越大,行驶中的离心拉力就越大。该函数在 (4) 中给出。

r r a t e = r r a t e ∗ f r a t e ∗ ( w y a w ) r_{rate}=r_{rate}*f_{rate}*(w_{yaw}) rrate=rratefrate(wyaw)
其中 r r a t e r_{rate} rrate反映的是偏航率得到的即时奖励, w y a w w_{yaw} wyaw是权重,也可以设计成常数或函数, f r a t e f_{rate} frate是评估 w y a w w_{yaw} wyaw的函数.在我们的研究中,我们应用 r r a t e = − 1.0 ∗ ∣ w y a w ∣ r_{rate} = −1.0 ∗ |w_{yaw}| rrate=1.0wyaw

效率由完成机动所消耗的换道时间来评估。通过向奖励函数添加第三项来考虑这样的组件,以避免过长和延长的车道变换动作。
r t i m e = w t i m e ∗ f l a t ( Δ d l a t ) r_{time}=w_{time}*f_{lat}(\Delta d_{lat}) rtime=wtimeflat(Δdlat)
其中 r r a t e r_{rate} rrate是评估动作效率的直接奖励, w r a t e w_{rate} wrate 是权重, f r a t e f_{rate} frate是当前到目标车道的横向偏差 $\Delta d_{lat} 的函数。 的函数。 的函数。\Delta d_{lat}$越大,换道时间越长。我们使用

r t i m e = − 0.05 ∗ ∣ Δ d l a t ∣ r_{time}=-0.05*|\Delta d_{lat}| rtime=0.05∣Δdlat用于效率评估。

单步立即奖励 r 是三部分的总和。为了评估整体表现,我们还需要计算总奖励 R,它是整个换道过程中立即奖励的累积回报。同样,总奖励也可以看作是上述三个单独部分的组合:偏航加速度总奖励 R a c c e R_{acce} Racce,偏航率总奖励 R r a t e R_{rate} Rrate,换道时间总奖励 R t i m e R _{time} Rtime,如(6)所示。
R = ∑ i = 1 N ( r a c c e ) i + ∑ i = 1 N ( r r a t e ) i + ∑ i = 1 N ( r t i m e ) i R=\sum_{i=1}^N(r_{acce})_i+\sum_{i=1}^N(r_{rate})_i+\sum_{i=1}^N(r_{time})_i R=i=1N(racce)i+i=1N(rrate)i+i=1N(rtime)i

在公式中,我们将奖励定义为负值,也称为“成本”。这个想法是,如果我们想评估一个动作的不利影响,例如变道机动的不顺畅或低效,则可以将成本视为对动作的惩罚。通过这种方式,智能体应该能够学会避免采取会导致大量惩罚的行动。

Q学习

特别是,我们设计了一个 Q 函数,它在动作上是二次的,因此贪婪动作有一个封闭形式的解决方案。理论解释与[20]中的工作相似。 Q-learning 的这种变体避免了调用策略神经网络并简化了学习算法。在数学上,Q函数逼近器表示如下
Q ( s , a ) = A ( s ) ∗ ( B ( s ) − a ) 2 + C ( s ) Q(s,a)=A(s)*(B(s)-a)^2+C(s) Q(s,a)=A(s)(B(s)a)2+C(s)
其中 A、B 和 C 是系数,设计有以状态信息为输入的神经网络,如图 1 所示。如果我们在 Q-learning 探索中接近贪婪行为,就会失去一般性。

图1

在我们的模型中,A 被设计成一个双层神经网络,输入层有 8 个神经元(即状态空间 S 的维度),隐藏层有 100 个神经元。特别是,在输出层使用 softplus 激活函数乘以负号,A 必然为负。 C 也是一个双层神经网络,具有与 A 相同的神经元数和层数,但它也将终止状态作为换道完成的指标。 B 是一个经过精心设计的形式,具有三个双层神经网络,其结构相同,第一层有 8 个神经元,隐藏层有 150 个神经元,连接在一起输出最终的偏航加速度,可适应不同的驾驶情况.

在这里插入图片描述

一个神经网络用于计算初始偏航加速度 a y a w _ p r e a_{yaw\_pre} ayaw_pre。另一种神经网络是计算一个称为灵敏度因子$ β_sen$ 的因子,以补偿两个连续步骤中的固定时间间隔。而第三个神经网络是输出一个可变的最大偏航加速度 a y a w _ p r e a_{yaw\_pre} ayaw_pre,用于根据当前输入状态给出学习到的偏航加速度的可调边界。 B的抽象数学公式在(8)中,B的结构如图2所示。
a y a w = m a x ( a y a w _ p r e ∗ β s e n , a y a w _ m a x ) a_{yaw}=max(a_{yaw\_pre}\ast\beta_{sen},a_{yaw\_max}) ayaw=max(ayaw_preβsen,ayaw_max)

通过上述设计,可以从 B 获得给定状态的最佳动作。同时,使用 A 和 C 的附加信息计算 Q 值。还有一个目标 Q 网络,结构相同但不同参数,以计算目标 Q 值。权重根据目标 Q 值和在线 Q 值之间定义的损失进行更新,使用称为经验回放 [21] 的 RL 学习技术。

仿真结果

我们通过一个模拟平台测试我们提出的算法,在这个平台上,学习智能体能够一方面与驾驶环境交互,另一方面通过试验和实验错误来改进自己。模拟驾驶环境为单向三车道高速公路路段。路段长度为1000m,每车道宽度为3.75m。可以根据需要定制高速公路上的交通。例如,单个车辆的初始速度、出发时间和限速都可以设置为合理和实用范围内的随机值,以执行各种纵向行为。在我们目前的研究中,发车间隔在5s-10s之间,个人限速在80km/h-120km/h的范围内。使用所提出的 IDM,所有车辆都可以执行实际的跟车行为。可以使用不同的参数集生成不同的交通状况。仿真场景的场景如图 3 所示。

在这里插入图片描述

在训练过程中,我们设置训练步数为40000,时间步长间隔dt为0.1s,学习率α为0.01,折扣因子γ为0.9。在训练过程中,总共有大约 5000 辆车执行了变道操作。训练期间收集的损失和奖励如图 4 所示。

在这里插入图片描述

结论

在这项工作中,我们应用强化学习方法来学习交互式驾驶环境下的自动变道行为。状态空间和动作空间都被视为连续的,以学习更实用的驾驶操作。二次函数的独特格式用作 Qfunction 逼近器,其中系数是从神经网络学习的。奖励函数定义为偏航率、偏航加速度和换道时间,用于训练平稳高效的换道行为。为了实施所提出的方法,我们开发了一个仿真平台,可以通过调整交通密度、初始速度、限速等来生成不同的仿真场景。初步训练结果显示学习框架中定义的损失和奖励收敛,表明有前途的尝试。

  • 我们研究的下一步是扩展 RL 智能体在不同道路几何形状和不同交通流量条件下的测试,以增强其在复杂驾驶场景中的鲁棒性和适应性,这是该方法处理.

  • 其次,将换道性能(如横向位置偏差和转向角等)以及收敛趋势与现有的基于优化的方法(如MPC)进行比较,以进行验证和验证。

  • 此外,另一个有希望的增强是结合 RL 和 MPC 以充分利用这两种方法。所提出的体系结构可以通过扩展神经网络的第一层来适应来自图像模块的大而模糊的输入状态,然后为传统的基于优化的控制器输出参考指导以发出快速可靠的控制命令来建立机动车。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谈一谈正向代理和反向代理?

谈一谈正向代理和反向代理?什么是代理服务器(Proxy Serve)?为什么使用代理服务器?什么是正向代理什么是反向代理正向代理和反向代理的区别正向代理的应用反向代理的应用什么是代理服务器(Proxy Serve&#…

android kotlin 协程(四) 协程间的通信

android kotlin 协程(四) 协程间的通信 学完本篇你将会了解到: channelproduceactorselect 先来通过上一篇的简单案例回顾一下挂起于恢复: fun main() {val waitTime measureTimeMillis {runBlocking<Unit> {println("main start") // 1 // …

学会这些Jmeter插件,才能设计出复杂性能测试场景

为什么要使用jmeter线程组插件呢&#xff1f; jmeter自带的线程组插件模拟的压测场景非常有限&#xff0c;当需要模拟复杂压测场景的时候&#xff0c;推荐大家使用jmeter线程组插件。 如何下载jmeter线程组插件呢&#xff1f; 早期版本的jmeter可以针对我们需要的扩展功能&a…

软考案例分析题精选

试题一&#xff1a;阅读下列说明&#xff0c;回答问题1至问题4&#xff0c;将解答填入答题纸的对应栏内。某公司中标了一个软件开发项目&#xff0c;项目经理根据以往的经验估算了开发过程中各项任务需要的工期及预算成本&#xff0c;如下表所示&#xff1a;任务紧前任务工期PV…

大规模 IoT 边缘容器集群管理的几种架构-1-Rancher+K3s

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介 &#x1f4da;️Reference: IoT 边缘计算系列文章 Rancher K3s 简介 Rancher&#xff1a; Kubernetes 统一管理平台&#xff0c; Rancher 是为采用容器的团队提供的一个完整的软件栈。它解决了管理多个…

PCI设备驱动初探(仅仅是内核部分,不是具体设备驱动)

在操作系统中&#xff0c;声卡、网卡之类的设备驱动并不像硬盘、鼠标、键盘等等驱动直接编写就行了。它们是建立在内核PCI驱动基础上的&#xff0c;也就是说这类设备通过PCI总线与系统通信。所以要编写这类的驱动首先要构造一个PCI设备的内核驱动&#xff0c;这样我们才能继续正…

Hive学习——DDLDML语句

目录 一、Hive数据类型 (一)Hive基本数据类型 (二)Hive的基本数据类型转换 (三)Hive集合数据类型 (四)文本文件数据编码 (五)读时模式 (六)Hive数据结构 二、DDL&DML命令 (一)数据库操作 1.创建数据库 2.查看数据库 3.修改数据库 4.删除数据库 5.切换(使用)指…

【LeetCode】No.225. 用队列实现栈 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/implement-stack-using-queues/ 1. 题目介绍&#xff08;225. 用队列实现栈&#xff09; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、t…

回文子串的数量[寻找回文子串的完整思路过程]

寻找回文子串的完整思路过程前言一、回文串的数量二、动态规划1、完整思考过程2、go总结参考文献前言 回文字符串&#xff0c;就是从左遍历和从右遍历的字符是相同顺序的&#xff0c;转换一下&#xff0c;就是该字符串是对称的。寻找回文子串面临两个直接的问题&#xff0c;1-…

pytorch深度学习案例(二)——航拍街道语义分割

数据集 使用的数据集是kaggle的Semantic segmentation of aerial imagery 其数据的组织形式为 项目结构 utils dataConvert.py dataConvert中主要包含数据的变换过程 函数作用loadColorMap用于加载标签的颜色映射voc_colormap2label获取颜色标签到数值标签的映射关系voc_…

黑马Spring学习笔记(二)——注解开发

目录 一、纯注解开发 1.1 实现步骤 1.2 小结 二、注解开发依赖注入 2.1 自动装配 2.1.1 Autowired——按照类型注入 2.1.2 Qualifier——按照名称注入 2.1.3 Value——简单类型注入 2.2 注解读取properties配置文件——PropertySource 三、注解开发管理第三方B…

【基础算法】差分

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

Kotlin 33. CompileSdkVersion 和 targetSdkVersion 有什么区别?

CompileSdkVersion 和 targetSdkVersion 有什么区别&#xff1f; 在 build.gradle (Module) 文件中&#xff0c;我们通常会看到 CompileSdkVersion 和 targetSdkVersion 的使用&#xff0c;比如下面是一个完整的 build.gradle (Module) 文件&#xff1a; plugins {id com.and…

JavaScript随手笔记---比较两个数组差异

&#x1f48c; 所属专栏&#xff1a;【JavaScript随手笔记】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#…

0基础学习diffusion_model扩散模型【易理解的公式推导】

0基础学习diffusion_model扩散模型【易理解的公式推导】一、概述二、扩散过程(已知X0求Xt)三、逆扩散过程(已知Xt求Xt-1)1。算法流程图四、结论五、损失函数六、心得体会&#xff08;优缺点分析&#xff09;一、概述 DDPM论文链接&#xff1a; Jonathan Ho_Denoising Diffusion…

Android入门第64天-MVVM下瀑布流界面的完美实现-使用RecyclerView

前言 网上充满着不完善的基于RecyclerView的瀑布流实现&#xff0c;要么根本是错的、要么就是只知其一不知其二、要么就是一充诉了一堆无用代码、要么用的是古老的MVC设计模式。 一个真正的、用户体验类似于淘宝、抖音的瀑布流怎么实现目前基本为无解。因为本人正好自己空闲时也…

32岁,薪水被应届生倒挂,裸辞了

今年 32 岁&#xff0c;我从公司离职了&#xff0c;是裸辞。 前段时间&#xff0c;我有一件事情一直憋在心里很难受&#xff0c;想了很久也没找到合适的人倾诉&#xff0c;就借着今天写出来。 我一个十几年开发经验&#xff0c;八年 软件测试 经验的职场老人&#xff0c;我慢…

markdown常用语法--花括号(超详细)

&#x1f48c; 所属专栏&#xff1a;【Markdown常用语法】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1…

2023年,自动化测试岗位有这么吃香吗

测试人员需要具备自动化测试或者测试开发能力&#xff0c;已经成为测试行业内容的一种显在趋势&#xff0c;而且这种趋势呈放大态势&#xff0c;其发展前景是十分明朗的。 2022疫情期间&#xff0c;就业大环境不是很理想&#xff0c;目前呢&#xff0c;企业倾向于招自动化测试…