自动驾驶论文解析(7)

本文解析论文:
A Practical Trajectory Planning Framework for Autonomous Ground Vehicles Driving in Urban Environments
来自国防科大团队

文章依旧沿用了经典的横向的空间规划,和纵向的速度规划。在横向上,横向位置是关于纵向距离S的三阶多项式。纵向上速度是关于时间T的四阶多项式。对速度的规划采用了典型的机器人速度规划方法,梯形速度规划,然后在做后处理进行速度平滑。
另外,在对轨迹的前处理中,对车道中心线为代表的原水曲线使用了考虑waypoints 指向变换和累计曲率因素的轨迹平滑算法。

下面简单总结这三个技术点:
轨迹平滑:
在这里插入图片描述
算法考虑了轨迹点方向变换和轨迹点曲率这两项因素,轨迹平滑方向倾向于选择轨迹为直线,曲率最小的曲线作为优化方向。效果如下图所示:
在这里插入图片描述

横向位置规划:
在这里插入图片描述
位置规划的曲线是横向位置关于纵向路线S的三阶多项式。其中可变的边界条件是初始点和终点的横向位置,起点的车辆朝向theta, 在这里,为了方便起见,限定终点的theta恒为0。根据这四个边界条件确定close form solution.
对于cost function的评价,选择了四个指标:考虑倾向于选择较长的,曲率小的,偏离参考线近的,以及相邻两次规划变化小的备选线。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我验证了一下,基本没有问题。
在这里插入图片描述
但是这里的弊端和使用五阶多形式是一样的,就是初始位置的超调现象。我随便设定了几个参数来看超调现象是否可以接受。

clc
clear all
s0 = 0;
sf = 25;
L0 = 1;
% Lf = 0;
theta0 = 15/180*pi;


figure
for s = 0:0.5:sf
    for Lf = -1:0.2:1
        A = [1 s0 s0^2 s0^3; 1 sf sf^2 sf^3; 0 1 2*s0 3*s0^2; 0 1 2*sf 3*sf^2];
        B = [L0;Lf;tan(theta0);0];
        C = A\B;
        y = C(1) + C(2)*s + C(3)*s^2 + C(4)* s^3;
        plot(s,y,'-bo')
        hold on
    end
end

L0 = 0;
% Lf = 0;
theta0 = -3/180*pi;
for s = 0:0.5:sf
    for Lf = -1:0.2:1
        A = [1 s0 s0^2 s0^3; 1 sf sf^2 sf^3; 0 1 2*s0 3*s0^2; 0 1 2*sf 3*sf^2];
        B = [L0;Lf;tan(theta0);0];
        C = A\B;
        y = C(1) + C(2)*s + C(3)*s^2 + C(4)* s^3;
        plot(s,y,'-r*')
        hold on
    end
end

在这里插入图片描述
由于限制了终点的theta=0.因此这个方案对于五阶多项式来说超调现象减少了很多,但因为是polynomial,无法完全避免这个问题。

速度规划:
首先我们要设定一些对速度的限制:
在这里插入图片描述
主要提到了三个限制:纵向速度,横向速度以及纵向加速度
这里面的Dsafe类似ACC中的安全距离公式:
在这里插入图片描述我们设定速度关于时间T的函数为四阶多项式:
在这里插入图片描述
通过给定四个边界条件获得close form solution:
在这里插入图片描述
初始位置的加速度就是当前加速度。tf是我们自己设定的,vf根据情况确定,比如跟车时就是前车速度,停障是就是0等等。af是终点处加速度,sf是设定的路径长度。对于梯形速度profile,分别对梯形的两边单独计算这个profile:
在这里插入图片描述
但是这篇文章对方案中的behavior planning 部分是没有提及的,因此我们难以了解到车辆变道和超车的时机以及条件等细节。

热门文章

暂无图片
编程学习 ·

【数据结构】-排序-快速排序

~快速排序在平均情况下是效果最好的排序算法~每趟子表的排序都是从两头向中间交替逼近,接下来举一个例子类别排序方法最好时间最坏时间平均时间空间复杂度稳定性序列特征适用于插入排序直接插入排序n(顺序)n2(逆序)n21稳定有序序列+待排序元素+无序序列基本有序/n很小折半插…
暂无图片
编程学习 ·

python读取excel文件(xlrd)

调包import xlrd打开文件data = xlrd.open_workbook(文件名.xlsx)查看页名print(data.sheet_names())输出sheet1、sheet2等页名,一般用不上,因为可以用下表取页获取某页sheet = data.sheet_by_name(sheet1) sheet = data.sheet_by_index(0)两个方法都行,一般用第二个,因为第…
暂无图片
编程学习 ·

错误码如何设计才合理?

一 前言在工作中,接触过不少外部接口,其中包括:支付宝,微信支付,微博开发平台,阿里云等等。每家公司错误码风格都不尽相同,有使用纯数字的,有使用纯英文的,也有使用字母和数字组合的。也接触过很多内部系统,错误码设计也不尽相同。错误码的输出路径面向日志输出服务…
暂无图片
编程学习 ·

JVM——Java的内存回收

Java引用的种类对于JVM的垃圾回收机制来说,如果一个对象,没有一个引用指向它,那么它就被认为是一个垃圾。那该对象就会回收。可以把JVM内存中对象引用理解成一种有向图,把引用变量、对象都当成有向图的顶点,将引用关系当成图的有向边(注意:有向边总是从引用变量指向被引…
暂无图片
编程学习 ·

element dom 事件注册 on off once

/* istanbul ignore next */ // 匿名函数自执行,兼容IE-attachEvent,chrome-addEventListener export const on = (function() {if (!isServer && document.addEventListener) {return function(element, event, handler) {if (element && event && h…
暂无图片
编程学习 ·

动态规划(二)

大佬的第二个视频代码 视频链接 题目一: 题目描述: 在一个数组中(只包含正整数)找出一组不相邻的数,使得其和最大 解题思路: 关键思想: 每个数有选和不选两种选择。按前i个数的最优解来说,如果选这个数,则这个数的前一个数就不能选,因此此时的最优解就是前i-2个数的最…
暂无图片
编程学习 ·

前端项目如何管理

前端项目的管理分为两个维度:项目内的管理与多项目之间的管理。1. 项目内的管理在一个项目内,当有多个开发者一起协作开发时,或者功能越来越多、项目越来越庞大时,保证项目井然有序的进行是相当重要的。一般会从下面几点来考证一个项目是否管理得很好:可扩展性:能够很方便…
暂无图片
编程学习 ·

python pytest selenium 自动化测试框架搭建

python pytest selenium 自动化测试框架搭建公司一直有这个自动化测试需求,前期利用c++或者python进行了一些自动化脚本的编写。这几天没有版本更迭,基于前期的工作,把自动化测试整理了一部分功能模块。现在的状态基本达到预期:即搭建了一个AutoTest框架,基于此实现了logi…
暂无图片
编程学习 ·

vue项目实现路由按需加载(路由懒加载)的3种方式

vue异步组件es提案的import()webpack的require,ensure()vue异步组件技术 ==== 异步加载 vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 . 但是,这种情况下一个组件生成一个js文件/* vue异步组件技术 */ {path: /home,name: home,component: resolve => re…
暂无图片
编程学习 ·

小程序全局socket使用 并自定义发送心跳

//app.js App({globalData: {userInfo: nullsocketUrl:"wss:.....",//socketUrl//延迟timeout: 10000,socketHeartTimer: null,//socket连接回调函数callback: function () {},//socket连接定时器socketClientTimer: null,//当前socket是否连接isSocketConnect: fals…
暂无图片
编程学习 ·

ssm专题学习-spring的使用与相关项目的实现(1)

ssm专题学习-spring的使用与相关项目的实现(1)前言配置maven更改镜像创建项目更新并下载所需jar包web.xml、applicationContext.xml和spring-mvc.xml配置建立架构UserUserControllerUserDaoUserServiceIUserServiceJSP部分效果图 前言 暑期线上实训的第四节课。从今天开始课程…
暂无图片
编程学习 ·

评估指标:精确率,召回率,F1_score,ROC,AUC

分类算法评估标准详解 分类准确度并不能够评估所有的场景,展示的结果也比较片面,这时候就需要其他的评估方法来进行测量评估。 所以接下来介绍一些其他的评估标准,将从以下5个方面来介绍: 混淆矩阵 精准率和召回率 F1 Score ROC曲线 AUC 一、混淆矩阵(Confusion Matrix) …
暂无图片
编程学习 ·

json从立地到成佛

文章目录诞生于JavaScript,json的前世今生json含义json诞生搞清json兄弟姐妹,看清区别json VS xml小小翻译官,json的应用前端ajax+json异步传输:跨平台webservice:非关系数据库存储(Nosql)拒绝四不像,json语法有要求json语法规则json名称/值json对象json数组JavaScript对象…
暂无图片
编程学习 ·

Linux命令21天打卡

1)给文件 isTester.ini 赋予 只读权限1. 创建文件 isTester.inivi isTester.ini2. 更新文件内容为“21 day Linux Learn ,Im Idolaoxu,in shenzhen ."输入 i ,进入编辑模式,输入内容,esc进入命令模式 :wq 保存 。chmod +R isTester.ini2)给文件 isTester.ini 赋予 读…
暂无图片
编程学习 ·

设计模式简单介绍五(模板方法模式)

模板方法模式的意图 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 让我上去刚读到这段话我也是看不懂的,但是在现实中我们真的很常用到模板模式,通俗一些说就是如果我们需要通用的代码…
暂无图片
编程学习 ·

springboot中application.yml配置中常用的配置信息

server:port:8001mybatis:config-location:classpath:mybtais/mybatis.cfg.xml #mybatis配置文件所在路径typ-aliases-package:com.auguigu.springcloud.entities #所有Entity别名类所在包mapper-location:- classpath:mybatis/mapper/**/*.xml #mapper映射文件spring:app…
暂无图片
编程学习 ·

LeetCode高频面试题记录

LeetCode高频面试题记录 K 个一组翻转链表 困难 class Solution { public:ListNode* reverseKGroup(ListNode* head, int k) {if (head == NULL) return NULL;ListNode *a = head;ListNode *b = head;for (int i = 0; i < k; i++) {//判断是否满足一组kif (b == NULL) retur…