自动驾驶代客泊车AVP巡航规划详细设计

目 录

巡航规划详细设计... 1

修改记录... 2

目 录... 3

1 背景... 5

2 系统环境... 6

2.1 巡航规划与其它模块联系... 6

2.2 巡航规划接口说明... 6

3 规划模块设计... 9

3.1 巡航规划架构图... 9

3.2 预处理... 10

3.3 Planner. 10

3.3.1 Geometry planner. 10

3.3.1.1 环境信息更新... 10

3.3.1.2 路径规划... 14

3.3.1.3 速度规划... 20

3.3.2 其他规划器... 23

3.4 后处理... 23

4 要点及风险评估... 23

5 设计评审意见... 24

6 参考资料... 24

  1. 背景

       随着产品的升级迭代,对算法的泛化能力和指标都提出了新的需求。一方面后续需要低成本迁移不同停车场,可能面临更多的人流车流、更多的场景(如双车道、不同弯道、道路情况、不同车库层数等),因此对当前模块的工程通用性和算法的泛化能力都有更高的需求;另一方面,基于降成本以及后续性能及产品效果提升的需求,对当前算法的资源占用、效果指标等也也会有更的要求。

       当前算法模块主要有以下问题。首先是算法架构的可扩展性存在较大的局限。当前算法主要基于matlab/simulink平台开发,没有通用的工程框架,添加新算法或者更新算法非常困难,而且适配其他模块及工具繁琐且工作量巨大、无法做深层次性能优化。其次是当前框架未能较好利用现有开源生态及借鉴别人的工作。Matlab是商业软件,其生态尤其自动驾驶方面的生态较apollo等开源生态有明显的差距,而且部分重要的组件(如图形计算等)无法进行代码生成,导致当前开发经常需要重复造轮子,工作处于一种闭门造车的状态,效率低下。最后是当前算法通用性不够强。当前算法对场景和逻辑等抽象不够,很多场景基于经验公式开发,对于特定的场景使用特定的策略,后续泛化困难。

       当前设计的主要目标是借鉴apollo开源框架进行重构。一方面变更开发语言,使模块能够进行性能的深度调优,并有效地借鉴开源的成果提高效率;另一方面构建统一的工程框架,提升模块的工程通用性,以支撑后续的开发和算法升级;最后,通过将接口与算法与主流平台对齐,后续算法可以逐步更换以提高泛化能力和效果指标。

  1. 系统环境
    1. 巡航规划与其它模块联系

巡航规划主要根据决策状态机、处理过的引导线、边界信息等及底盘的反馈信号,综合对不同场景(如直行、转弯、道闸口等)的处理、对直行及绕障等模式的处理、对路径和速度的生成和优化,最终输出一条轨迹参考线发给控制,进而决定整车运动路径及速度。

    1. 巡航规划接口说明

根据规划的功能,其主要的输入信息应包含如下:

    • 地图及定位信息(目前版本算法主要放在边界信息接口内)
    • 感知障碍物信息(目前版本算法主要放在边界信息接口内)
    • 全局导航信息(目前版本算法主要放到引导线信息接口内)
    • 车身反馈信息(包含速度、加速度、档位等)
    • 预测信息(后续能力提升及泛化需要)
    • 交通规则信息(后续场景升级可能需要)

同时,规划的输出信息主要如下:

    • 规划轨迹(包含路径、速度两大类及衍生信息如曲率、加速度等信息)
    • 本模块的状态信息(主要是异常信息等,后续做产品化安全需要)

下面针对当前算法的接口进行具体说明:

       A)输入接口

            1、DEC  //决策信息(包含状态机、引导线、边界信息)

2、SMC   //车身反馈信息

2、PTP_trajectory_detail //规划的反馈信息(实际未使用)

3、PTP_out    //旧的规划输出接口(实际未使用)

4、PTP_trajectory_head   //规划的车头轨迹(实际未使用)

5、PTP_Inner_Monitor_out        //规划内部信息监控(实际未使用)

  1. 规划模块设计
    1. 巡航规划架构图

巡航规划模块架构图

如图所示,巡航规划模块的整体架构包含三个部分,预处理、规划器(planner)、后处理,其中规划器为主体模块。规划器为各种具体的规划算法的总称。当前的算法主要基于曲率几何推导,因此把其命名为geometry planner。其余为业内主流的一些规划算法,包括lattice、EM、openspace、RRT、reinforce等。下面针对每个模块做概要说明:

预处理:对planner所需的数据进行处理,主要对输入的数据降噪、去毛刺、转换为模块所需要的数据格式及单位转换等。

       Planner:根据地图定位信息、障碍物信息、决策状态机、车身反馈、导航信息等,进行综合考虑,同时结合如平稳、高效、资源占用少等指标,计算出一条优化的轨迹。考虑到模块的拓展性,会在当前算法的基础上根据场景的需求不断增加新算法,比如lattice、EM、openspace、RRT等,补充其能力。目前主要的算法为Geometry planner,主要原理如下:1、通过以当前位置,根据引导线跟随、绕行各障碍物的曲率结合人工驾驶经验,算出下一时刻的行驶曲率和速度。2、再根据下一时刻的曲率、速度等推导下一时刻的位置,并在此基础上重复计算驾驶行为。3、通过上述两个步骤的反复迭代,最终生成一条包含40个点的整体轨迹,并输出给下游。

       后处理:对当前模块的状态进行监控、对算法生成的轨迹等进行评价,同时支持手动调式模式,可以手动生成指定的轨迹输出给下游进行调试。

    1. 预处理(由框架处理)

滤波:针对底盘反馈的速度信号进行2阶滤波及限幅处理,使其降频到3hz左右(经验值),幅度限制在正负70以内,以免出现异常值。

信号转换:将方向盘转角转换为弧度表示,同时通过车速和方向盘转速双重验证,检测输入的方向盘信号是否有效。

    1. Planner
      1. Geometry planner
        1. 环境信息更新

主要包含如下功能:

1、根据之前计算出来的控制量,更新下一时刻的车辆位置信息,供计算后续控制量使用。

2、计算目标线与主车的相对位置,相对角度,供后续计算引导线跟随使用。

3、根据算法估计的状态,更新每一个轨迹点上边界线,障碍物边界等与车的相对位置,供后续计算避障使用。

          1. 车辆位置推算

(xt,yt)

(xt+1,yt+1)

x

y

计算在每个循环推算的时刻,车身的坐标及yaw角。是一种基于运动学的理想位姿迭代。计算关系如下式:

                         xt+1=xt+vx*dt*cosyawrate*dt

                         θt+1=θt+yawrate*dt

其中:vx

为车辆x方向速度,vy

为车辆y方向速度,dt为时间间隔,yawrate为角速度。

        在实际计算过程中,考虑了感知的延时和系统的延时对车辆姿态的影响,因此分别对两种延时进行估计,根据估计参数进行系统姿态延时估算,并将其作为当前初始值。

        另外,在车道线跟随的时候,有的时候可能并不需要车后轴中心在中心线上,尤其是转弯的时候,因此添加对原点位置的平移,使其更符合人的驾驶习惯。

        通过每个时刻计算得到的纵向速度、横向速度、角速度,由上式计算下一个时刻的位置。通过反复计算40次,得到40个时刻的车辆位置,输出到下游。

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

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

相关文章

C语言——扫雷

扫雷是一款经典的小游戏,那如何使用C语言实现一个扫雷游戏呢? 一、全部源码 直接把全部源码放在开头,如有需要,直接拿走。 源码分为三个文件: test.cpp/c 主函数的位置 #include "game.h"int main() {…

[设计模式 Go实现] 创建型~抽象工厂模式

抽象工厂模式用于生成产品族的工厂,所生成的对象是有关联的。 如果抽象工厂退化成生成的对象无关联则成为工厂函数模式。 比如本例子中使用RDB和XML存储订单信息,抽象工厂分别能生成相关的主订单信息和订单详情信息。 如果业务逻辑中需要替换使用的时候…

Python开源项目月排行 2023年12月

Python 趋势月报,按月浏览往期 GitHub,Gitee 等最热门的Python开源项目,入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后,都是当前月份内相对热门的项目。 入选公式=70%GitHub Trending20%Gitee10%其他 …

LFW人脸数据库的简介

LFW人脸数据库的简介 ​ LFW (Labled Faces in the Wild)人脸数据集:是目前人脸识别的常用测试集,其中提供的人脸图片均来源于生活中的自然场景,因此识别难度会增大,尤其由于多姿态、光照、表情、年龄、遮挡等因素影响导致即使同…

每日一练(编程题-C/C++)

目录 CSDN每日一练1. 2023/2/27- 一维数组的最大子数组和(类型:数组 难度:中等)2. 2023/4/7 - 小艺照镜子(类型:字符串 难度:困难)3. 2023/4/14 - 最近的回文数(难度:中等)4. 2023/2/1-蛇形矩阵(难度:困难)…

【Spring Security】AuthenticationFailureHandler 用户认证失败后处理

文章目录 前言简单介绍官方默认用户认证失败后处理器SimpleUrlAuthenticationFailureHandlerForwardAuthenticationFailureHandlerExceptionMappingAuthenticationFailureHandlerDelegatingAuthenticationFailureHandler 自定义使用SecurityConfiguration 配置 前言 Authentic…

Hive自定义函数详解

1.hive函数各种命令 查看系统自带的函数 hive> show functions; -- 显示自带的函数的用法 hive> desc function upper; -- 详细显示自带的函数的用法 hive> desc function extended upper; -- 添加jar包到hive中 add jar /data/xx.jar; -- 创建自定义函数 create fu…

算法基础之整数划分

整数划分 核心思想: 计数类dp 背包做法 f[i][j] 表示 取 1 – i 的物品 总容量为j的选法数量 f[i][j] f[i-1][j] f[i-1][j-v[i]] f[i-1][j-2v[i]] f[i-1][j-3v[i]] ……f[i-1][j-kv[i]] f[i][j-v[i]] f[i-1][j-v[i]] f[i-1][j-2v[i]] f[i-1][j-3v[i]] ……f[i…

万字长文谈自动驾驶occupancy感知

文章目录 prologuepaper listVision-based occupancy :1. [MonoScene: Monocular 3D Semantic Scene Completion [CVPR 2022]](https://arxiv.org/pdf/2112.00726.pdf)2. [Tri-Perspective View for Vision-Based 3D Semantic Occupancy Prediction [CVPR 2023]](https://arxiv…

Docker Harbor私有镜像image仓库安装

Docker Harbor私有镜像image仓库安装 goharbor/harbor 参考:https://www.cnblogs.com/wuvikr/p/14688079.html #停止harbor systemctl stop harbor.service 使用prepare脚本重新加载harbor.yml中的配置 [rootharbor harbor]#./prepare 稍等一会harbor会自动启动起来…

QString设置小数点精度位数

QString设置小数点精度位数 Chapter1 QString设置小数点精度位数Chapter2 Qt中QString.toDouble有效位数6位问题以及数据小数点有效位数的处理问题一:QString.toDouble有效位只有6位问题二:小数点有效位数的问题 Chapter3 qt QString转Double只显示6位数字的问题(精…

docker的安装的详细教程,以及出现错的解决办法(阿里云)

docker的安装与使用 1.安装dnf sudo yum -y install dnf Repository extras is listed more than once in the configuration 错误:无法为仓库 appstream 找到一个有效的 baseurl 出现这个错误这是由于阿里云的版本导致的 在阿里云开发者社区有答案&#xff01…

【Google】关于Google Analytics埋点及API获取数据

本文是在实际操作中踩到的一些坑,并不是操作手册。具体的还是需要仔细按照官方文档操作。 参考文档:https://developers.google.com/analytics/ 重点看标红的文档即可 普通事件埋点 各端需要跟产品端确定好统一的事件名称和参数,否则数据混…

Python:日期和时间类型学习

背景 在非开发环境经常需要做一下日期计算,就准备使用Python,顺便记下来学习的痕迹。 代码 1 1 # coding utf-82 2 3 3 from datetime import *4 4 5 5 ########################## 日期 ##########################6 6 date_now date.today()…

如何实现WinApp的UI自动化测试?

WinApp(WindowsAPP)是运行在Windows操作系统上的应用程序,通常会提供一个可视的界面,用于和用户交互。例如运行在Windows系统上的Microsoft Office、PyCharm、Visual Studio Code、Chrome,都属于WinApp。常见的WinApp&…

《Python百宝箱》专栏目录

序号文章目录直达链接表白系列1无法拒绝的表白界面https://want595.blog.csdn.net/article/details/1352796112满屏飘字表白代码https://want595.blog.csdn.net/article/details/1352794873无限弹窗表白代码https://want595.blog.csdn.net/article/details/1352795754李峋同款可…

es6新特性——前端技术栈

ES6 基本介绍 ES6 是什么? ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准, 2015 年 6 月发布。ES6 设计目标:达到 JavaScript 语言可以用来编写复杂的大型程序,成为企业级开发语言ECMAScript 和 JavaScript 的关系&#xf…

使用内网穿透轻松实现在外远程访问本地威联通QNAP NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后,很多用户对于如何在外在公网环境下的远程访问威联通NAS…

vue3事件总线mitt使用方式

我的使用场景 在项目中遇到一个这样的问题。页面使用了keepalive缓存, 员工排班和班次之间的数据有关联,当我删除一个班次后,给员工排的班,属于那个被删的班次的情况,已经生效的不会受影响,但是未生效的排…

学习使用echats实现双刻度echarts双Y轴,左右Y轴数据的方法

学习使用echats实现双刻度echarts双Y轴&#xff0c;左右Y轴数据的方法 代码效果图 代码 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cline-stack&langjs --> <!DOCTYPE html> <html lang"en" style"height: 10…