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

news/2024/4/26 20:28:33/文章来源:https://blog.csdn.net/qq_30759585/article/details/129126348

文章目录

  • 摘要
  • 前言
  • 相关的工作
  • 方法论
    • 动作空间
  • 奖励函数设计
    • 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 智能体来学习偏航加速度,即,动作空间定义为车辆偏航加速度ayawa_{yaw}ayaw
a=ayaw∈Aa = a_{yaw} \in A a=ayawA
成功的变道不仅与车辆动力学有关,还取决于道路几何形状,即变道是在直线段还是弯道上进行。在我们的研究中,我们用车辆动力学和道路信息来定义状态空间。具体来说,状态空间包括自我车辆的速度vvv、纵向加速度aaa、位置x、yx、yxy、偏航角θθθ、目标车道ididid、车道宽度www和道路曲率wwwc。
s=(v,a,x,y,θ,id,w,c)∈Ss=(v,a,x,y,\theta,id,w,c)\in S s=(v,a,x,y,θ,id,w,c)S

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

奖励函数设计

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

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

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

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

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

rtime=−0.05∗∣Δdlat∣r_{time}=-0.05*|\Delta d_{lat}|rtime=0.05∣Δdlat用于效率评估。

单步立即奖励 r 是三部分的总和。为了评估整体表现,我们还需要计算总奖励 R,它是整个换道过程中立即奖励的累积回报。同样,总奖励也可以看作是上述三个单独部分的组合:偏航加速度总奖励RacceR_{acce}Racce,偏航率总奖励 RrateR_{rate}Rrate,换道时间总奖励 RtimeR _{time}Rtime,如(6)所示。
R=∑i=1N(racce)i+∑i=1N(rrate)i+∑i=1N(rtime)iR=\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 个神经元,连接在一起输出最终的偏航加速度,可适应不同的驾驶情况.

在这里插入图片描述

一个神经网络用于计算初始偏航加速度ayaw_prea_{yaw\_pre}ayaw_pre。另一种神经网络是计算一个称为灵敏度因子$ β_sen$ 的因子,以补偿两个连续步骤中的固定时间间隔。而第三个神经网络是输出一个可变的最大偏航加速度ayaw_prea_{yaw\_pre}ayaw_pre,用于根据当前输入状态给出学习到的偏航加速度的可调边界。 B的抽象数学公式在(8)中,B的结构如图2所示。
ayaw=max(ayaw_pre∗βsen,ayaw_max)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.luyixian.cn/news_show_71723.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python元类编程

1.1.propety动态属性 在面向对象编程中,我们一般把名词性的东西映射成属性,动词性的东西映射成方法。在python中他们对应的分别是属性self.xxx和类方法。但有时我们需要的属性需要根据其他属性动态的计算,此时如果直接使用属性方法处理&…

vulnhub zico2

总结:脏牛提权 目录 下载地址 漏洞分析 信息收集 木马上传 反弹shell 提权 下载地址 zico2.ova (Size: 828 MB)Download: https://www.dropbox.com/s/dhidaehguuhyv9a/zico2.ovaDownload (Mirror): https://download.vulnhub.com/zico/zico2.ova使用方法&…

16_FreeRTOS队列集

目录 队列集 队列集相关API函数介绍 队列集使用流程 实验源码 队列集 一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集! 作用:用于对多个队列或信号量进行“监听”其中不管哪一个消息到来,都…

jQuery.NiceScroll - 有史以来最好的 nicescroll 版本——在现代浏览器和移动设备上极其流畅和一致,资源使用率低(中文文档)

jQuery.NiceScroll特征依赖关系使用配置参数有史以来最好的 nicescroll 版本——在现代浏览器和移动设备上极其流畅和一致,资源使用率低 官网:nicescroll.areaaperta.com GitHub:github.com/inuyaksa/jquery.nicescroll CDN引入: https://www.bootcdn.cn/jquery.nic…

上海亚商投顾:沪指放量大涨 券商等权重板块全线飙升

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。市场情绪三大指数今日集体反弹,沪指、深成指单边拉升,午后均涨超2%,上证50大涨超2.7%&…

[ vulhub漏洞复现篇 ] Drupal 远程代码执行漏洞(CVE-2019-6339)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

java final关键字 详解

概述:作用:细节:演示:总结:一、概述 : final [ˈ faɪnl],最终的,最后的,决定性的,不可改变的。final作为Java中的一个关键字可以用来修饰类,方法&#xff0c…

Vbs_To_Exe制作简易exe程序

文章目录一、准备vbs脚本文件二、工具打包exe一、准备vbs脚本文件 新建一个文本文档 复制下面代码到文本文档中 Set speech CreateObject("SAPI.SpVoice") speech.Speak "l love you!"修改文本后缀为.vbs。编码选择ANSI(解决中文乱码问题&am…

LVS中的keepalived高可用

文章目录前言一、Keepalived简介二、keepalived工作原理三、配置文件四、实验1.某台Real Server down2.LVS本身down实验过程:五、代码详细演示整体过程调度器安装软件、设置测试keepalived对后端RS的健康检测backup服务主机设置前言 一、Keepalived简介 Keepalived是…

UG NX二次开发(C#)-导出-导出Parasolid文件(.x_t文件)

文章目录 1、前言2、在UG NX中的操作2、采用NXOpen二次开发实现1、前言 UG NX提供了多种文件的导入与导出功能,本文采用NXOpen.net来实现Parasolid文件(.x_t文件)的导出功能。 2、在UG NX中的操作 打开UG NX的一个三维模型,如下图所示。 点击“文件”->“导出”->“…

企业级信息系统开发学习笔记1.2 初探Spring——利用组件注解符精简Spring配置文件

文章目录零、本讲学习目标一、课程引入二、打开项目 - SpringDemo三、利用组件注解符精简Spring配置文件(一)创建新包(二)复制四个类(三)修改杀龙任务类(四)修改救美任务类&#xff…

html常用font-family设置字体样式

<table border"1" cellpadding"0" cellspacing"0" ><tr><td><h3 style"font-family: 黑体;">黑体&#xff1a;SimHei</h3></td><td><h3 style"font-family: 华文黑体;">华…

Prometheus集群分布式架构浅析

集群行为是一种常见于自然界中鱼群、鸟群、蜂群等低等群居生物的集体行为&#xff0c;受此启发形成了无人机集群的概念。无人机集群不是多无人机间的简单编队&#xff0c;而是通过必要的控制策略使之产生集群协同效应&#xff0c;从而具备执行复杂多变、危险任务的能力。目前无…

如何快速、全面、深入地掌握一门编程语言

思考路线 如何快速&#xff1f; 什么样的Demo才能让人觉得你掌握了它&#xff1f; 空 判断&#xff1a;构造一个可以判断所有空的 is_empty 函数 for 循环&#xff1a;i 和 集合迭代两种 时间获取&#xff1a;年/月/日 时分秒 时间戳与时间格式互转 休眠时间函数 字符串处理…

Word控件Spire.Doc 【Table】教程(17):如何在 C#、VB.NET 中删除 Word 表格中的行和列

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

PCB设计中降低噪声与电磁干扰的24个窍门

电子设备的灵敏度越来越高&#xff0c;这要求设备的抗干扰能力也越来越强&#xff0c;因此PCB设计也变得更加困难&#xff0c;如何提高PCB的抗干扰能力成为众多工程师们关注的重点问题之一。本文将介绍PCB设计中降低噪声与电磁干扰的一些小窍门。 下面是经过多年设计总结出来的…

大数据处理学习笔记1.3 使用Scala集成开发环境

文章目录零、本讲学习目标一、搭建Scala的IntelliJ IDEA开发环境&#xff08;一&#xff09;启动IDEA&#xff08;二&#xff09;安装Scala插件&#xff08;三&#xff09;配置IDEA使用的默认JDK&#xff08;四&#xff09;创建Scala项目1、创建Scala项目 - ScalaDemo2、创建Sc…

linux高级命令之死锁

死锁学习目标能够知道产生死锁的原因1. 死锁的概念死锁: 一直等待对方释放锁的情景就是死锁为了更好的理解死锁&#xff0c;来看一个现实生活的效果图:说明:现实社会中&#xff0c;男女双方一直等待对方先道歉的这种行为就好比是死锁。死锁的结果会造成应用程序的停止响应&…

【vue】elemente-ui table toggleRowSelection 默认选择无效[已解决]

项目场景&#xff1a; 点击按钮&#xff0c;弹出一个弹出框&#xff0c;内部出现一个table表&#xff0c;表内数据是动态获取&#xff0c;同时得勾选上几个table表的数据&#xff0c;类似以下的图 问题描述 点击按钮显示弹出框&#xff0c;加载table中的数据&#xff0c;默…

【机器学习】Adaboost

1.什么是Adaboost AdaBoost&#xff08;adapt boost&#xff09;&#xff0c;自适应推进算法&#xff0c;属于Boosting方法的学习机制。是一种通过改变训练样本权重来学习多个弱分类器并进行线性结合的过程。它的自适应在于&#xff1a;被前一个基本分类器误分类的样本的权值会…