Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning
原文链接:进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning
在自动驾驶软件的开发中,运动规划是最核心的模块之一。它将综合感知、定位和地图等信息,规划出无人车未来一段时间(约10秒)的一系列动作指令(方向盘转角、油门、刹车等)。
运动规划的问题——目标函数(objective function)和约束(constraint)。运动规划的最终目的就是找出一条最优的运动轨迹,使其能够最小化(或者最大化)目标函数,并且不违背任何约束。
在自动驾驶中,可以将环境抽象成SL坐标系,在此坐标下的曲线光滑度是有要求的,因此需要对轨迹线进行平滑处理。
上周阿波君为大家详细介绍了「进阶课程㉔Apollo规划技术详解——Motion Planning Environment」。其中详细介绍了平滑的方法,包括对多项式进行优化,对 Bezier Spline 进行平滑处理,以及 Spline 2D 与 Spiral Path 等。
本周阿波君将继续与大家分享Apollo规划技术详解——Optimization Inside Motion Planning的相关课程。下面,我们一起进入进阶课程第25期。
目录
1.运动规划
2.二次规划
约束问题的核心有三点:第一是目标函数的定义,目标函数比较清晰,对于后面的求解更有帮助。第二是约束,比如路网约束、交规、动态约束等。第三是约束问题的优化,比如动态规划、二次规划等。本节主要介绍动态规划和二次规划的基本概念,以及二次规划问题的求解方法和形式化方法。
运动规划的概念
1.运动规划
动态规划通过类似于有限元的方式,把问题从连续空间抽象成离散空间,然后在离散空间中进行优化。虽然这种方法可以逼近连续空间中的最优解,但是计算复杂度很高。针对计算时间长的问题,可以使用牛顿方法进行优化,它的收敛次数是指数平方,也叫二次收敛。
二次规划算法
2.二次规划
二次规划算法的本质是牛顿法的 Taylor 展开,但是它的求解过程涉及更复杂的情况。因为二次规划方法并不一定是处理一维问题,可能涉及更高阶求导。在实践中,二阶导数基本可以满足问题需求。
然而,牛顿法要求 locally convex 才能保证收敛,也就是导数是严格单调递增的。但是一般函数并没有这样的特性,动态规划或二次规划都无法获得全局最优解。为了解决这样的问题,通常使用启发式搜索方法。
首先通过动态规划方式对整个问题有一个粗浅的认识,然后通过二次规划进行细化。这种启发式搜索方法也是目前百度 Apollo 的 EM 算法的核心思想。这种方法和人开车的过程是一样的,通常驾驶员会先形成一个大概的指导思想,指明往什么方向开,然后再规划一条最优路径。
决策问题是一个离散空间中的优化问题,它的决定是什么?可以通过动态规划对整个空间先形成一个粗浅的认识,然后以此为启发,用二次规划求最优解。
一般来说,二次规划问题会写成一个二次函数,如下图所示。
二次规划问题函数表达式
其中,X 是向量参数,Q 是一个对称的正定矩阵, 是偏差项。对于这种没有约束的二次规划问题,只需要求导数等于0的那个点,使得 Qx=-C ,即可求解二次规划问题。这是一个线性方程组,它的求解速度是 O(N3)。
对于带约束的二次规划问题,情况就相对复杂一点,如下图所示。
带约束的二次规划问题函数表达式
这种情况可以有很多种解法,其中一种把限制条件放到上面的式子中,通过换元,变成一个全新的 QP 问题求解,但是这种方法很慢。另一种方法是 Lagrangian method ,通过增加松弛变量的方式去掉约束条件,变成一个可以解决的问题。
对于不等式的约束条件,如何去求解呢?可以使用 active set method,其主要出发点是最后解,可能落到边界上,如果真的是边界最优,不等式约束就可以转化为等式约束问题求解。有人总结出求解二次规划问题的方法 KKT,其主要思想如下图所示。
KKT条件
总的来说,对于求解非线性优化问题(自动驾驶中的规划基本都是非线性的),通常就是用启发式方法来求解。先用动态规划给出一个粗略解,给出一个凸空间。然后用二次规划方法在凸空间里去寻找最优解,如下图所示。
求解非线性优化问题
Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning相关推荐
- Apollo进阶课程㉖丨Apollo规划技术详解——Understand More on the MP Difficulty
原文链接:进阶课程㉖丨Apollo规划技术详解--Understand More on the MP Difficulty EM是一个在已知部分相关变量的情况下,估计未知变量的迭代技术,EM的算法流程 ...
- Apollo进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment
原文链接:进阶课程㉔丨Apollo 规划技术详解--Motion Planning Environment 自动驾驶汽车核心技术包括环境感知.行为决策.运动规划与控制等方面.其中,行为决策系统.运动规 ...
- Apollo进阶课程㉓丨Apollo规划技术详解——Motion Planning with Environment
原文链接:进阶课程㉓丨Apollo规划技术详解--Motion Planning with Environment 当行为层决定要在当前环境中执行的驾驶行为时,其可以是例如巡航-车道,改变车道或右转, ...
- Apollo进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving
原文链接:进阶课程㉒丨Apollo规划技术详解--Motion Planning with Autonomous Driving 自动驾驶车辆的规划决策模块负责生成车辆的行驶行为,是体现车辆智慧水平的 ...
- Apollo进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview
原文链接:进阶课程㉑丨Apollo规划技术详解--Basic Motion Planning and Overview 运动规划(Motion Planning)就是在给定的位置A与位置B之间为机器人 ...
- Apollo进阶课程 ⑮丨Apollo自动定位技术详解—百度无人车定位技术
目录 1.百度无人车定位进化历程 2.百度自动驾驶应用的定位技术 2.1GNSS定位技术 2.2载波定位技术 2.3激光点云定位技术 2.4视觉定位技术 原文链接:进阶课程 ⑮丨Apollo自动定位技 ...
- Apollo进阶课程㉗丨Apollo控制技术详解——控制理论
原文链接:进阶课程㉗丨Apollo控制技术详解--控制理论 控制模块根据预测的轨迹和估计的车辆状态向油门.刹车或转向扭矩发送适当的命令.控制模块使汽车尽可能接近计划的轨迹.控制器参数可以通过最小化理想 ...
- Apollo进阶课程㉙丨Apollo控制技术详解——控制器的类型
原文链接:进阶课程㉙丨Apollo控制技术详解--控制器的类型 控制主要是为了弥补数学模型和物理世界执行之间的不一致性.对于自动驾驶而言,规划的轨迹和车辆的实际运行轨迹并不完全一致,控制器按照规划轨迹 ...
- Apollo进阶课程㊸丨Apollo实战——障碍物感知和路径规划能力实战
原文链接;进阶课程㊸丨Apollo实战--障碍物感知和路径规划能力实战 环境感知在自动驾驶汽车应用中占据了核心地位.一辆车要实现自动驾驶,障碍物感知是最基础也是最核心的功能. 上周阿波君为大家详细介绍 ...
最新文章
- osi七层协议和tcp/ip四层协议
- tensorflow object detection API 使用记录2
- python import from class_Python: import vs from (module) import function(class) 的理解
- 原来评分卡模型的概率是这么校准的!
- 常见坑人无数的Redis面试题总结
- python 中的input
- 双绞线直连法如何才能使两台电脑实现共享
- 大数四则运算java(转)
- jquery.validator验证后ajax提交出现错误解决
- 全新的移动界面设计素材
- linux cmake 快速安装
- HP 288 Pro G5 BIOS降级F5
- 图书馆管理系统【SSM含SQL文件】
- 迪杰斯特拉和弗洛伊德算法
- C语言判断是否英文字母
- Ps 钢笔工具的使用
- (八)博客详情页面(内容排版typo.css)插件集成
- 用python编写乒乓球小游戏--Turtle功能的应用
- OpenStack和Open Source MANO:NFV部署两大支柱
- 杭州裸辞女孩打脸多少领导:对不起,90后不好骗
热门文章
- [Java]中[this][super]用法总结
- POJ-1845 数论
- java 调用r语言包传参数_Java与R语言的配置,调用
- linux系统时间函数,Linux时间时区详解与常用时间函数
- HTML阅读打开点击不了,如何让网页文章中的代码可以点击运行
- python写入二进制文件的库_python之写入二进制文件
- Android使用PorterDuffXfermode实现遮罩效果
- mysql4函数,mysql笔记4_函数_MySQL
- arduino 光控灯_Arduino光控开关
- Linux设备树翻译计划