原文链接:进阶课程㉕丨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 算法的核心思想。这种方法和人开车的过程是一样的,通常驾驶员会先形成一个大概的指导思想,指明往什么方向开,然后再规划一条最优路径。

决策问题是一个离散空间中的优化问题,它的决定是什么?可以通过动态规划对整个空间先形成一个粗浅的认识,然后以此为启发,用二次规划求最优解。

一般来说,二次规划问题会写成一个二次函数,如下图所示。

                                                                                               二次规划问题函数表达式

其中,是向量参数,是一个对称的正定矩阵, 是偏差项。对于这种没有约束的二次规划问题,只需要求导数等于0的那个点,使得 Qx=-C ,即可求解二次规划问题。这是一个线性方程组,它的求解速度是 O(N3)。

对于带约束的二次规划问题,情况就相对复杂一点,如下图所示。

                                                                                                带约束的二次规划问题函数表达式

这种情况可以有很多种解法,其中一种把限制条件放到上面的式子中,通过换元,变成一个全新的 QP 问题求解,但是这种方法很慢。另一种方法是 Lagrangian method ,通过增加松弛变量的方式去掉约束条件,变成一个可以解决的问题。

对于不等式的约束条件,如何去求解呢?可以使用 active set method,其主要出发点是最后解,可能落到边界上,如果真的是边界最优,不等式约束就可以转化为等式约束问题求解。有人总结出求解二次规划问题的方法 KKT,其主要思想如下图所示。

                                                                                                        KKT条件

总的来说,对于求解非线性优化问题(自动驾驶中的规划基本都是非线性的),通常就是用启发式方法来求解。先用动态规划给出一个粗略解,给出一个凸空间。然后用二次规划方法在凸空间里去寻找最优解,如下图所示。

                                                                                                        求解非线性优化问题

Apollo进阶课程㉕丨Apollo规划技术详解——Optimization Inside Motion Planning相关推荐

  1. Apollo进阶课程㉖丨Apollo规划技术详解——Understand More on the MP Difficulty

    原文链接:进阶课程㉖丨Apollo规划技术详解--Understand More on the MP Difficulty EM是一个在已知部分相关变量的情况下,估计未知变量的迭代技术,EM的算法流程 ...

  2. Apollo进阶课程㉔丨Apollo 规划技术详解——Motion Planning Environment

    原文链接:进阶课程㉔丨Apollo 规划技术详解--Motion Planning Environment 自动驾驶汽车核心技术包括环境感知.行为决策.运动规划与控制等方面.其中,行为决策系统.运动规 ...

  3. Apollo进阶课程㉓丨Apollo规划技术详解——Motion Planning with Environment

    原文链接:进阶课程㉓丨Apollo规划技术详解--Motion Planning with Environment 当行为层决定要在当前环境中执行的驾驶行为时,其可以是例如巡航-车道,改变车道或右转, ...

  4. Apollo进阶课程㉒丨Apollo规划技术详解——Motion Planning with Autonomous Driving

    原文链接:进阶课程㉒丨Apollo规划技术详解--Motion Planning with Autonomous Driving 自动驾驶车辆的规划决策模块负责生成车辆的行驶行为,是体现车辆智慧水平的 ...

  5. Apollo进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview

    原文链接:进阶课程㉑丨Apollo规划技术详解--Basic Motion Planning and Overview 运动规划(Motion Planning)就是在给定的位置A与位置B之间为机器人 ...

  6. Apollo进阶课程 ⑮丨Apollo自动定位技术详解—百度无人车定位技术

    目录 1.百度无人车定位进化历程 2.百度自动驾驶应用的定位技术 2.1GNSS定位技术 2.2载波定位技术 2.3激光点云定位技术 2.4视觉定位技术 原文链接:进阶课程 ⑮丨Apollo自动定位技 ...

  7. Apollo进阶课程㉗丨Apollo控制技术详解——控制理论

    原文链接:进阶课程㉗丨Apollo控制技术详解--控制理论 控制模块根据预测的轨迹和估计的车辆状态向油门.刹车或转向扭矩发送适当的命令.控制模块使汽车尽可能接近计划的轨迹.控制器参数可以通过最小化理想 ...

  8. Apollo进阶课程㉙丨Apollo控制技术详解——控制器的类型

    原文链接:进阶课程㉙丨Apollo控制技术详解--控制器的类型 控制主要是为了弥补数学模型和物理世界执行之间的不一致性.对于自动驾驶而言,规划的轨迹和车辆的实际运行轨迹并不完全一致,控制器按照规划轨迹 ...

  9. Apollo进阶课程㊸丨Apollo实战——障碍物感知和路径规划能力实战

    原文链接;进阶课程㊸丨Apollo实战--障碍物感知和路径规划能力实战 环境感知在自动驾驶汽车应用中占据了核心地位.一辆车要实现自动驾驶,障碍物感知是最基础也是最核心的功能. 上周阿波君为大家详细介绍 ...

最新文章

  1. osi七层协议和tcp/ip四层协议
  2. tensorflow object detection API 使用记录2
  3. python import from class_Python: import vs from (module) import function(class) 的理解
  4. 原来评分卡模型的概率是这么校准的!
  5. 常见坑人无数的Redis面试题总结
  6. python 中的input
  7. 双绞线直连法如何才能使两台电脑实现共享
  8. 大数四则运算java(转)
  9. jquery.validator验证后ajax提交出现错误解决
  10. 全新的移动界面设计素材
  11. linux cmake 快速安装
  12. HP 288 Pro G5 BIOS降级F5
  13. 图书馆管理系统【SSM含SQL文件】
  14. 迪杰斯特拉和弗洛伊德算法
  15. C语言判断是否英文字母
  16. Ps 钢笔工具的使用
  17. (八)博客详情页面(内容排版typo.css)插件集成
  18. 用python编写乒乓球小游戏--Turtle功能的应用
  19. OpenStack和Open Source MANO:NFV部署两大支柱
  20. 杭州裸辞女孩打脸多少领导:对不起,90后不好骗

热门文章

  1. [Java]中[this][super]用法总结
  2. POJ-1845 数论
  3. java 调用r语言包传参数_Java与R语言的配置,调用
  4. linux系统时间函数,Linux时间时区详解与常用时间函数
  5. HTML阅读打开点击不了,如何让网页文章中的代码可以点击运行
  6. python写入二进制文件的库_python之写入二进制文件
  7. Android使用PorterDuffXfermode实现遮罩效果
  8. mysql4函数,mysql笔记4_函数_MySQL
  9. arduino 光控灯_Arduino光控开关
  10. Linux设备树翻译计划