自动驾驶代客泊车AVP路径规划详细设计

目 录

1 背景... 1

2 名词解释... 2

3 路径规划及控制总体设计(SMPC)... 3

4 路径规划及控制详细设计... 4

4.1 决策场景... 4

4.2 接口定义... 4

4.2.1 目标车道线的巡航场景... 4

4.2.2 目标车道线与动态障碍物的混合场景... 4

4.2.3 垂直泊车场景... 4

4.2.4 水平泊车场景... 6

4.2.5 倾斜车位泊车场景... 6

4.2.6 有可行使区域的目标车道线巡航场景... 6

4.3 决策与PNC接口... 6

4.4 规划算法模块设计... 6

4.4.1 目标车道巡航算法概述... 6

4.4.2 螺旋线规划算法... 8

4.4.3 最优解参数估计... 8

4.5 纵向控制ACC.. 9

4.5.1 ACC控制系统基本流程... 10

4.5.2 舒适性控制(该部分为废弃方案)... 12

4.5.3 障碍物置信度的要求... 13

4.6 横向控制... 13

4.6.1 Yawrate闭环... 13

4.6.2 车辆模型... 14

5 故障诊断... 17

6 输入输出接口... 18

6.1 输入接口... 18

6.1.1 车身信息接口... 18

6.1.2 决策模块接口... 20

6.2 输出接口... 23

6.2.1 输出接口方式1. 23

6.2.2 输出接口方式2. 23

6.2.3 输出接口方式3. 25

  1. 背景

        略

  1.  名词解释

     表2.1 名词解释

名词

定义

  1.  路径规划及控制总体设计(M-DWA)

本方案是在动态窗口法基础上,着眼于四轮车的高速道路,低速道路,以及泊车场景,演进而来的算法,简称M-DWA(Multiply step Dynamic Window Approach)。

总体模块划分为:决策模块,路径规划模块,LLC(Low level control)三大部分。

  1. 决策模块:决策模块有三大功能。1,根据上游算法给出的环境信息,将整个规划模块切分成不同的决策场景,每一个决策场景包括一个目标,多个避障边界,同时赋予每一个避障边界一个方向,以保证每一个决策场景只有一个局部最优解;2,决策模块同时负责法律,道德,油耗,驾驶员偏好,交通规则……,等非避障的策略权衡;3,决策模块需要根据路径规划出来的最优路径的状态,来维护状态机,最基本的功能是泊车入库中的入库准备,泊车,揉库的状态。
  2. 路径规划模块:对每一个决策场景,利用最优状态逼近控制算法(OSAC),预测未来每一个时间点的轨迹。
  3. LLC模块(Low level control)模块:LLC有两个功能,1,加速度闭环,以响应路径规划的目标速度,以及目标加速度。2,Yawrate闭环,实时调整车辆姿态,以响应路径规划的目标yawrate值。

M-DWA的特性:

(1)在求取轨迹的方式上,是M-DWA本质不同于DWA算法的地方。DWA在计算轨迹的过程中,控制量是不变的,因此轨迹表现上是一个标准的圆弧或者直线;而多步动态窗口法M-DWA,则在每一个轨迹点上预测环境信息的变化,在每个点上都通过控制率(OSAC)来更新控制量。这使得M-DWA算得的路径是更接近未来真实行驶的轨迹。

(2)M-DWA的控制量为Yawrate,以及Ax,然后由yawrate闭环和加速度闭环翻译成方向盘,油门,制动,档位信息。这种方法使决策和路径规划与控制目标车辆的性能解耦,因此决策和路径规划算法的参数调试与车型无关,实车或者仿真调试好的决策、路径规划参数可以适应于不同车辆类型。

(3)M-DWA算法无需像DWA算法那样生成很多条轨迹,M-DWA算法的每一条轨迹是特定决策场景下由OSAC算法计算出来的最优轨迹。因此M-DWA算法得轨迹数量是由决策场景来决定的,一般而言,决策模块难以决定的决策数量只有2到3个。这有利于减少M-DWA的计算量。

  1. 路径规划及控制详细设计
    1. 决策场景

由总体设计可知,决策模块根据上游算法给出的环境信息,生成不同的决策场景,每一个决策场景包括一个目标,多个避障边界,同时赋予每一个避障边界一个方向,以保证每一个决策场景只有一个局部最优解;

      1. 目标车道线的巡航场景
      2. 目标车道线与动态障碍物的混合场景
      3. 垂直泊车场景
      4. 水平泊车场景
      5. 倾斜车位泊车场景
      6. 有可行使区域的目标车道线巡航场景
    1. 决策算法模块设计
      1. 决策模块输出接口定义

行驶目标,STG_Objective。

决策的目标,既可能是车道中心线,亦可能是待入库的车位中心线。STG_TargetLine中包括速度限制信息Speed_Limit,用来定义弯道降速,定点停车,以及泊车终止点;stoppoint_error用来定义车辆停止点的停止误差(高精度的停止误差需要加速度闭环进行“蹭车”控制),如无误差要求,则为999;target_line指的是车位的目标中线,也可以指巡航的车道中心线,当为车位的目标中线时,只有两个点是有效的,此时index_start=0,index_end=1;drive_direction用来指示行车方向是前进还是倒车。

避障边界,STG_Boundary.

决策的避障边界,既可能是车道的边线(线段可延长),也可能是几个点组成的墙体(不可延长线),亦可能是单个点指示的障碍物。

boundary,表示的是避障的边界;boundary_type表示避障的类型,有三种避障类型,分别为左边超越,右边超越,后面跟随;distance_danger表示危险距离,distance_safe表示安全距离。

    1. 规划算法模块设计
      1. Environment update(EU)

EU模块的功能有两个:

  1. 计算目标线、避障边界与车的相对位置,相对角度。以供OSAC算法使用。
  2. 根据OSAC算法估计的轨迹,更新每一个轨迹点上目标线、避障边界与车的相对位置,相对角度。

EU模块的输入数据来自决策模块(STG),输出接口定义与决策模块的输出接口类似,同样分为目标,和避障边界,它是在决策模块接口的基础上添加了与车的相对位置,相对角度信息。接口如下:

行驶目标,EU_Objective。

接口解析如下:

接口名称

接口说明

yaw_line2car

目标线相对于车身方向的夹角。即下图中的ψ

distance_line2car

目标线相对于车身方向的位置。即下图中的x

distance_y

在纵向距离多远处,车道保持状态OK。即下图解说的y

r_reverse_line

目标线的曲率半径

drive_direction

前进挡模式,还是倒车模式

方向定义,遵守向左为正,向右为负。

如下图,目标车道线用箭头表示,箭头朝向表示巡航的目标方向。

则在这种场景下:

(1)车No1:车道线相对车的位置在左,x>0;车道线相对车的夹角朝右,ψ<0;如果不限制什么时候达到lanekeep目的,则Y=999。

(2) 车No2: 车道线相对车的位置在左,x>0;车道线相对车的夹角朝左,ψ>0;如果不限制什么时候达到lanekeep目的,则Y=999。

(3)车No3: 车道线相对车的位置在左(注意目标车道线是有方向的,若目标方向箭头朝下则位置在右),x>0;车道线相对车的夹角朝左,ψ>0,并且ψ>pi/2;如果不限制什么时候达到lanekeep目的,则Y=999。

关于泊车场景,是将目标车位的中线看成为目标车道线,方向定义与上述相同。泊车场景如下图:

(4)车No4: 车道线相对车的位置在左(注意目标车道线是有方向的,若目标方向箭头朝下则位置在右),x>0;车道线相对车的夹角朝左,ψ>0;限制车在到达车位下边界前达到lanekeep目的,因此有Y=-5。

避障边界,EU_Boundary.

      1. 最优状态逼近控制
        1. 垂直泊车场景
      1. 目标车道巡航算法概述

PNC的核心算法为目标车道的巡航算法,目标车道包括方位信息(x,y, ψ),x表示与目标车道线的横向距离,y表示在纵向距离多远处,车道保持状态OK,ψ表示目标车道与车辆的夹角。

目标车道线巡航算法有两种情况,一个是弯道巡航,一个是直线巡航。弯道巡航是直线巡航的特殊形式,差别只在于在直线巡航上累加一个弯道曲率的控制量。

      1. 螺旋线规划算法
      2. 最优解参数估计

最优解参数获取模块的目的是获取最优螺旋线的曲率,以供螺旋线算法计算当前位置的路径曲率。

输入接口:

接口名称

接口说明

Final_point_distance

在纵向距离多远处,车道保持状态OK。即目标车道线的方位信息y

Yaw_Lane2Car

目标车道相对于车身方向的夹角。即目标车道先的方位信息ψ。

Distance_Lane2Car

目标车道相对于车身方向的位置。即目标车道线的方位信息x

V_ms

当前车速

Vehicle_direction

目标车道巡航是前进挡模式,还是倒车模式

输出接口:

接口名称

接口说明

R_Reverse_Req

最优解螺旋线的曲率。

CurveSpd_Req

最优解螺旋线的曲率变化率

算法设计如下:

根据几何图形的运算,R与x,y, ψ,和θ满足一下关系式。其中θ表示的是车辆在左转和右转中间临界状态时,车辆方向和预描点切线方向的夹角。

R*sinψ+y=2R*sinθR+Rcosψ-x=2R*cosθ

化简可得如下方程式:       

cosθ= Rcosψ+R-x2R21-cosψR2+2Rx*cosψ+x-R*sinψ-x2-y2=0

则可通过以上公式估计最优螺旋线的曲率半径。

    1. 纵向控制ACC

纵向控制系统ACC提供了自动驾驶过程中车辆的纵向规划策略。

ACC是按照跟车模式设计的控制律。跟车即本车以一定的安全距离跟随前车行进。当前方没有车辆时,假设距本车足够远处有一辆速度很大的虚拟车辆,本车为跟随前车,将加速直至达到速度上限追赶虚拟车辆,即进入定速巡航模式。根据以上策略,可将跟车模式扩展为囊括所有纵向控制环境的控制策略,有车时保持安全距离跟车,无车时设定速度上限,以定速巡航的模式追赶前车。

ACC控制策略

有目标车辆

以安全距离跟车

跟车模式

无目标车辆

假设前车很远,追车

定速巡航

      1. ACC控制系统基本流程

为了跟车时保持安全距离,ACC首先利用位置控制完成跟车目标。

本车为保持安全车距所需要调整的距离S可由车距和前车车速求得。

s=Ldis-τ*vb

Ldis­为与前车的距离,Vb为前车车速,

 为安全时距,一般在1.5s至2.2s之间。

由S求出当前时刻的速度指令Vstp。再根据Vstp求出加速度指令。

vstp=2ass

astp_s=vstp-vxk

as为根据舒适性和操控性设定的加速度,Vx­为本车车速,K为求取加速度的比例系数。

由关系式可知,K值越小,相同速度差得到的加速度越大,跟车反应速度越快,但是基于位置环的控制律响应速度慢,K值较小时,车处于安全距离附近会造成来回震荡这一缺点,严重影响安全。因此,控制系统引入速度环的控制,来弥补这一缺点。速度环的引入能加快控制律的响应速度,可有效抑制车在安全距离时的震荡。

速度环控制直接利用本车与前车的相对速度变化,得出加速度指令。

astp_v=vb-vxk

Vb为前车车速。将速度环与位置环得到的加速度进融合得到astp_0

,当本车离安全车距较远时,位置环控制的权重大;当本车距安全距离越小时,速度环的权重越大。

采用速度环与位置环控制律的目标是在保持良好的体感状态下,完成跟车控制。然而,在某些危险情况下,需要紧急刹车以保证安全,舒适性加速度as不能满足安全性要求。为此,控制律引入了可保证行车安全的加速度,当此加速度astp_1小于舒适性加速度as的最小值时,判定情况较危险,采用astp_1进行刹车,当astp_1在as范围内时,采用astp_0

。采用的加速度定义为astp_safe

astp_1=-∆v22s

由于上述公式中距离变化s处于分母,当s接近于0时,较大的速度差和较小的s会产生过大的加速度,即在达到安全距离前再猛踩一脚刹车,严重影响体感,如图1所示。

图1  S接近0时产生的加速度突变

因此,引入了新的距离|sdanger|>|s|,求得新的加速度,在到达安全距离前替换这一过大的加速度。

sdanger=Ldis-τdanger*vb

astp_danger=vb-vxk-∆v22sdanger

s接近于0时,Sdanger还相对较大,astp_danger

产生的大减速将晚于astp_safe

,当astp_safe

出现突变时,使用astp_danger

的值进行控制,屏蔽在达到安全距离时astp_safe

产生的刹车,提高体感。

图2 安全距离附近astp_safe

astp_danger

对比

最后对加速度指令进行软化处理,防止每一步加速度的跳变过于激烈,由此得到最终的加速度指令astp

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

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

相关文章

uniapp 创建项目

uniapp 是一款基于 Vue 框架的跨平台应用开发框架。 创建 uniapp 项目 一、打开 HbuilderX 编辑器&#xff0c;点击新建项目。 二、选择 uniapp 项目、自定义项目名称、选择默认模板、选择 Vue 版本、点击创建。 三、这样 uniapp 项目就创建完毕啦&#xff01; 运行 uniapp …

2023年秋季学期《算法分析与设计》练习16 OJ-1425 算法分析与设计练习16,使用python

N皇后问题 使用回溯法求解N后问题。 输入 皇后的个数。 输出 每一种方案及总方案数。 样例输入 Copy 4 样例输出 Copy 0 1 0 0 0 0 0 2 3 0 0 0 0 0 4 0 ---------------- 0 0 1 0 2 0 0 0 0 0 0 3 0 4 0 0 ---------------- 总方案数为&#xff1a;2 def dfs(row, n)…

安防视频监控系统EasyCVR实现H.265视频在3秒内起播的注意事项

可视化云监控平台/安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;同时…

spdlog中的异步日志方案

日志方案 同步日志方案&#xff1a;立即输出日志记录的方案才能继续执行其他任务。 异步日志方案&#xff1a;先抛出一个日志记录的任务到某个地方&#xff0c;不马上执行打印也不影响往下执行其他任务。 二者关键区别是产生日志记录并调用相关的日志任务接口之后&#xff0…

若依报500异常,只有前端没有后端

1.在vue.config.js中target的网址为https://vue.ruoyi.vip, process.env.VUE_APP_BASE_API]: { target: https://vue.ruoyi.vip,}2.pathRewrite单引号中加入 /prod-api pathRewrite: { ^ process.env.VUE_APP_BASE_API]: /prod-api3.在.env.development中变更 VUE_APP_BASE…

【Python】Python 输出中文乱码问题解决

Python 中文乱码的解决方法 1. 理解编码和解码 Python的字符编码遵循Unicode标准,但在不同的操作系统和编程环境下会有不同的默认字符编码,导致中文输出出现乱码等问题。解决中文输出乱码的问题,需要先理解编码和解码的概念。 编码: 把字符转换成字节序列的过程。因为计算…

CMMI认证办理流程以及需要参与的人员

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证是衡量软件企业过程管理成熟度的一种标准&#xff0c;它由美国卡内基-梅隆大学软件工程研究中心与美国国防部共同开发。CMMI认证分为五个等级&#xff0c;从低到高依次为1级到5级。以下是办理CMMI证书的…

数据结构-汇总

时间复杂度-汇总 一、二叉树 1、树的结构-初期 2、二叉树的分类-平衡树-红黑树 二叉树的旋转-LL\RR\RL\LR 3、二叉树的旋转-高级一步到位 4、红黑树特征、删除、插入

test mock-01-什么是 mock? Mockito/EasyMock/PowerMock/JMockit/Spock mock 框架对比

拓展阅读 test 之 jmockit-01-overview jmockit-01-test 之 jmockit 入门使用案例 mockito-01-overview mockito 简介及入门使用 PowerMock Mock Server ChaosBlade-01-测试混沌工程平台整体介绍 jvm-sandbox 入门简介 单元测试中的 mock 单元测试是一种验证代码单元&…

K8S网络类型

k8s的网络类型 k8s的通信模式 1 pod内部之间容器与容器之间的通信&#xff0c;在同一个pod中容器是共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信 2 同一个node节点之内&#xff0c;不同pod之间的通信&#xff0c;每个pod都有一个全局的真实ip地…

AI 领域代币市场趋势:探索最热门投资领域的前沿动向

作者&#xff1a;lesleyfootprint.network 数据源&#xff1a;Token Sector Dashboard ChatGPT 的热潮点燃了 AI 领域&#xff0c;AI 与区块链技术的融合成为市场关注的焦点。因为区块链的一个显著特征是它能够在链上安全地存储大量数据&#xff0c;这与 AI 模型对数据的密集…

mysql面试题:索引(B+树、聚集索引、二级索引、回表查询、覆盖索引、超大分页查询、索引创建原则)

索引 概念 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构**&#xff08;B树&#xff09;**&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&am…

安装虚拟机在虚拟机里面安装WindowsServer2012与步骤

目录 一、VMware介绍 1.1、概念讲解 1.2、VMware虚拟机的安装讲解 1.3、具体操作步骤 二、虚拟机安装WindowsServer2012演示 2.1、在虚拟机里配置具体步骤 (相当于制作启动U盘) 2.2、安装windows server2012步骤演示 三、Windows Server2012激活步骤演示 四、思维导…

golang并发安全-sync.map

sync.map解决的问题 golang 原生map是存在并发读写的问题&#xff0c;在并发读写时候会抛出异常 func main() {mT : make(map[int]int)g1 : []int{1, 2, 3, 4, 5, 6}g2 : []int{4, 5, 6, 7, 8, 9}go func() {for i : range g1 {mT[i] i}}()go func() {for i : range g2 {mT[…

【SpringBoot篇】优惠券秒杀 — 添加优惠劵操作(基本操作 | 一人仅一张券的操作)

文章目录 &#x1f354;发放优惠券&#x1f386;基本操作&#x1f384;数据库表&#x1f6f8;思路&#x1f339;代码实现 &#x1f386;完善后的操作&#x1f6f8;乐观锁&#x1f339;代码实现 &#x1f354;一人仅一张优惠券&#x1f6f8;思路&#x1f339;代码⭐代码分析 &am…

git远程操作,推送【push】,拉取【pull】,忽略特殊文件,配置别名,标签管理

文章目录 前言&#xff1a;新建远程仓库克隆推送【push】拉取【pull】 配置git忽略特殊文件给命令配置别名 标签管理理解标签创建标签操作标签 前言&#xff1a; 大家如果没有看过前几章git的基础操作的话&#xff0c;推荐先看一下&#xff0c;看完再来看这个远程操作&#xf…

【PHP】取出数组中的第一个元素

目录 1.使用 reset() 函数&#xff1a; 2.使用 array_shift() 函数&#xff1a; 在 PHP 中&#xff0c;可以使用 reset() 函数或者 array_shift() 函数来取出数组中的第一个元素。 1.使用 reset() 函数&#xff1a; $array [1, 2, 3, 4, 5]; $firstElement reset($array);…

2023年总结:反复纠结与成长的一年

前言 这是我第五年写年度总结&#xff1a; 《2022年总结&#xff1a;道阻且长&#xff0c;行则将至》 《2021年总结&#xff1a;前路有光&#xff0c;初心莫忘》 《2020年总结&#xff0c;所有努力只为一份期待》 《2019年总结&#xff0c;平凡的我仍在平凡的生活》 现在…

【超图】SuperMap iClient3D for WebGL/WebGPU —— 数据集合并缓存如何控制对象样式

作者&#xff1a;taco 最近在支持的过程中&#xff0c;遇到了一个新问题&#xff01;之前研究功能的时候竟然没有想到。通常我们控制单个对象的显隐、颜色、偏移的参数都是根据对象所在的图层以及对象单独的id来算的。那么问题来了&#xff0c;合并后的图层。他怎么控制单个对象…

gorm 使用sql方法

var users []User// 查询 执行用Scan 和Find 一样dbdb.Raw("select uid,user_name,age from Users").Scan(&users)//dbdb.Raw("select uid,user_name,age from Users").Find(&users)fmt.Println("Users",users)// 更新和删除.插入用 …