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

原文链接:进阶课程㉑丨Apollo规划技术详解——Basic Motion Planning and Overview

运动规划(Motion Planning)就是在给定的位置A与位置B之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等。具体的案例可以是为移动机器人规划出到达指定地点的最短距离,或者是为机械臂规划出一条无碰撞的运动轨迹,从而实现物体抓取等。

基本的运动规划就是在起始构型与目标构型之间找到一条连续运动轨迹,同时避开环境中的障碍物。

上周阿波君为大家详细介绍了「进阶课程⑳Apollo感知之旅——机器学习与感知的未来」。

通过介绍了感知中的机器学习未来以及课后思考,其中详细的介绍了感知里的机器学习问题,如何应对corner case,除深度学习外、还有其他算法,深度学习+仿真数据+车载Al芯片成为一种趋势,智能交通设施、V2X的普及等知识,还思考了延时是如何来影响自动驾驶安全的,ACC自适应巡航的功能是如何实现的等问题。

本周阿波君将与大家分享Apollo规划技术详解——Basic Motion Planning and Overview。下面,我们一起进入进阶课程第21期。


1.什么叫做运动规划

规划问题本质上是一个搜索问题,即对一个给定的函数,寻找最优解。相对于无人车而言,规划问题就是给定现在的状态,找到无人车移动的最优解。通常最优解目标函数F(x)定义。

从内容考虑,规划问题涉及三个领域,机器人领域控制领域人工智能。不同的领域对问题的理解不同。

  • robotic fields,规划就是如何产生轨迹以完成目标,涉及RRT, A*,D* lite等。
  • 控制领域,规划理解为到达目标状态的动态系统,涉及MPC, LQR等。
  • artificial intellegence(AI),是生成状态到动作的映射,涉及reinforcement  learning,end-to-end imitation learning等。

2.如何构建汽车的运动规划问题

从最简单问题出发,把运动规划抽象成一个path finding problem(路径查找问题),只关心无人车怎样走,周围环境是不变的。如图1所示,我们将其抽象成无数的网格,从绿色的点到红色的点的路径规划就是一个path finding problem 。如图想寻找最短路径,可通过广度优先的方法,也可以使用深度优先方法。但是对于最短路径优化问题,深度优先方法的效率太低。

                                                                                                        图1 路径查找问题

另外,可以通过启发式方式对搜索问题进行优化。前面的广度优先方法没有利用起点和终点之间的信息,breadth first search(BFS)和 depth first search(DFS)都属于non-information search,问题就在于不知道目标在哪里。A-star算法是大概知道红点在右边,定义一个启发式函数,该函数猜测距离目标还有多远,通过这种方法先搜索一些比较近的点,然后从这个点出发逐渐扩大搜索圈。

                                                                                                        图2 A-star算法

A-star花费时间比广度优先算法时间更短,因为它有信息支持,现在的一些路径搜索算法本质上都是从A-star算法出发,需要知道目标函数的样子。

目前,A-star算法还不能直接用在规划模块上,因为A-star算法本身要求对整个环境全知。而自动驾驶对周围环境是部分观察的,如图3所示。红色的点是小车,红色和绿色块是障碍物,对于无人车来说是看不见的,无人车的传感器(雷达、激光雷达、摄像机)系统能部分观察环境。

                                                                                                        图3 无人车部分可见动态环境

对于部分观察我们可以使用贪心算法,其实就是一个增量搜索,就是在看见的情况下尽量走好。如图4所示,利用D-star算法对部分观察的数据进行控制规划。它利用当前能够看到的信息进行增量规划,D-star的特点是处理在看到的有限范围的条件下,如何到达预定地点的搜索问题方法。这种增量搜索很难通过一步步的迭代达到全局最优解。

                                                                                                        图4 D-star算法

在现实生活中,人类开车是很少做90度直角转弯的,这样的折线并没有考虑无人车运动过程中的运动模型和动力学模型。更进一步,可以通过平滑性曲线的方式来优化折线,换成一些较为平滑的曲线来完成,如图5所示。

                                                                                                        图5 曲线平滑

那么,上述介绍的搜索技术离自动驾驶运动规划还差多少?首先是在部分观察空间的动态障碍物,规划模块怎么处理动态障碍物是关键并且是有难度的。其次是自动驾驶汽车能否按照规划的行驶,可能需要一个动态模型。第三还缺少了遵守交通规则,它是道路安全的基本保证,将交通规则融入规划也是一个难点。第四是实时计算,目前来说百度要求规划模块运转周期是100毫秒。

                                                                                                        图6 实现自动驾驶还缺什么

                                                                                                        图7 自动驾驶运动规划

运动规划问题就是让自动驾驶车辆能够安全平稳到达终点,本质是一个三维规划问题,即 XY 坐标加上时间维度,叫做 3D Trajectory Optimization Problem(轨迹优化问题)。从车辆动力学模型来说,维度需要进一步上升,因为涉及到车头的方向,车的转向角、加速度等问题。


3.无人驾驶硬件系统

                                                                                                        图8 自动驾驶汽车硬件系统

无人车硬件系统除了汽车之外,还涉及很多传感器,传感器感知汽车周围环境,即使是这样也只是部分搜索环境。还有 GPS 接收器可以做定位,以及 IMU 惯性导航系统,如上图所示。


4.无人驾驶系统软件

                                                                                                        图9 自动驾驶汽车系统软件

如上图所示,运动规划可以获得两部分信息,一部分是动态信息,包括从认知获得的信息,就是从感知模块和定位模块获得信息,另一部分是静态信息,就是高精地图。

                                                                                                图10 无人驾驶系统软件的组成

无人驾驶系统软件包括定位、感知、预测、运动规划控制等。定位就是知道汽车在哪里。感知即是对周围环境信息的获取。预测就是感知到的障碍物的行进意图,例如旁边有无人超车。运动规划是在知道这些信息后,告知汽车如何运动。控制模块就是得到指令之后如何控制汽车。

                                                                                                图11 规划模块的工作原理

车辆状态、交通灯信息、障碍以及障碍轨迹、导航、高精地图都是规划模块能获得的信息。规划就是在这样的部分可见信息中给无人车找到一条轨迹。它不仅是一条路径,而是随着时间推移路径该怎么走,它包含两方面,一是路径信息,二是速度配置文件需要保证速度和路径变化都是平滑的。


5.课程概述

如图所示,整个规划模块将会介绍以下内容。包括使用的方法、环境认知、所解决的问题、构建运动规划以及如何构建一个通用生态系统。

                                                                                                        图12 规划模块的组成

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

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

相关文章

ROS机器人导航仿真(kinetic版本)

准备工作: ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix,可视化rviz 1、安装ubuntu 16.04系统与安装ROS kinetic版本自行百度安装。一下链接可作为参考。 http://blog.csdn.net/weicao1990/article/details/52575314 2…

【牛客 - 1080B】tokitsukaze and Hash Table(STLset,并查集,Hash)

题干: 链接:https://ac.nowcoder.com/acm/contest/1080/B 来源:牛客网 tokitsukaze有n个数,需要按顺序把他们插入哈希表中,哈希表的位置为0到n-1。 插入的规则是: 刚开始哈希表是空的。 对于一个数x&a…

C++ socket网络编程笔记(服务端3) 完整代码

上篇&#xff1a; https://blog.csdn.net/m0_46480482/article/details/122995226 完整代码&#xff1a; #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<ctype.h> …

1.深度学习练习:Python Basics with Numpy(选修)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization 目录 1 - Building basic functions with numpy 1.1 - np.exp(), sigmoid function 1.2 - Sigmoid gradient …

一步步编写操作系统 20 x86虚拟bochs一般用法 上

bochs一般用法 bochs是一个开源x86 虚拟机软件。在它的实现中定义了各种数据结构来模拟硬件&#xff0c;用软件模拟硬件缺点是速度比较慢&#xff0c;毕竟全是软件来模拟&#xff0c;您想&#xff0c;虚拟机还要在软件中模拟各种中断&#xff0c;能不慢吗。不过它的功能非常强…

【牛客 - 1080E】tokitsukaze and Segmentation(dp,递推,思维)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/1080/E 来源&#xff1a;牛客网 tokitsukaze有一个长度为n的字符串&#xff0c;字符串仅包含0-9。 tokitsukaze要把这个字符串切割成若干个子串&#xff0c;每个子串作为一个十进制的数&#xff0c;…

2.3)深度学习笔记:超参数调试、Batch正则化和程序框架

目录 1&#xff09;Tuning Process 2&#xff09;Using an appropriate scale to pick hyperparameters 3&#xff09;Hyperparameters tuning in practice: Pandas vs. Caviar 4&#xff09;Normalizing activations in a network&#xff08;重点&#xff09; 5&#xf…

2.深度学习练习:Logistic Regression with a Neural Network mindset

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ You will learn to: Build the general architecture of a learning algorithm, including: Initializing para…

JVM内存区域详解

Java中虚拟机在执行Java程序的过程中会将它所管理的内存区域划分为若干不同的数据区域。下面来介绍几个运行时数据区域。 一、程序计数器 1.1 简述 程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它的作用可以看做是当前线程所…

【牛客 - 1080C】tokitsukaze and Soldier(思维,偏序问题)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/1080/C 来源&#xff1a;牛客网 在一个游戏中&#xff0c;tokitsukaze需要在n个士兵中选出一些士兵组成一个团去打副本。 第i个士兵的战力为v[i]&#xff0c;团的战力是团内所有士兵的战力之和。 但…

3.深度学习练习:Planar data classification with one hidden layer

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ You will learn to: Implement a 2-class classification neural network with a single hidden layerUse unit…

一步步编写操作系统 11 实模式下程序分段的原因

cpu中本来是没有实模式这一称呼的&#xff0c;是因为有了保护模式后&#xff0c;为了将老的模式区别开来&#xff0c;所以称老的模式为实模式。这情况就像所有同学坐在同一个教室里&#xff0c;本来没有老同学这一概念&#xff0c;但某天老师领着一个陌生人进入教室并和大家宣布…

【牛客 - 1080D】tokitsukaze and Event(最短路,思维)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/1080/D 来源&#xff1a;牛客网 这天&#xff0c;tokitsukaze带着她的舰队去才归一儿海探索。这个海域有n个站点&#xff0c;深海舰队控制着这片海域的m条航线&#xff0c;这些航线连接着这n个点&am…

4.深度学习练习:Building your Deep Neural Network: Step by Step(强烈推荐)

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ fter this assignment you will be able to: Use non-linear units like ReLU to improve your modelBuild a d…

一步步编写操作系统21 x86虚拟机bochs 跟踪bios

为了让大家更好的理解bios是怎样被执行的&#xff0c;也就是计算机中第一个软件是怎样开始的&#xff0c;咱们还是先看下图3-17。在图的上面第5行&#xff0c;显示的是下一条待执行的指令&#xff0c;这是程序计数器&#xff08;PC&#xff09;中的值&#xff0c;在x86上的程序…

【CodeForces - 361D】Levko and Array (二分,dp)

题干&#xff1a; Levko has an array that consists of integers: a1, a2, ... , an. But he doesn’t like this array at all. Levko thinks that the beauty of the array a directly depends on value c(a), which can be calculated by the formula: The less value…

5.深度学习练习:Deep Neural Network for Image Classification: Application

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ After this assignment you will be able to: Build and apply a deep neural network to supervised learning…

排序集锦(各种排序算法的特点及性能分析)

关于排序&#xff0c;似乎很简单的很常见的概念&#xff0c;却蕴含着很多技术&#xff0c;下面是从不同的角度&#xff0c;对排序的总结&#xff1a; 直插希 冒泡快 选择堆 1 按照排序特性分类 首先按照排序本身的操作特性可以分为下面几种&#xff1a; 插入排序 直接插入排…

【CodeForces - 689D】Friends and Subsequences(RMQ,二分 或单调队列)

题干&#xff1a; Mike and !Mike are old childhood rivals, they are opposite in everything they do, except programming. Today they have a problem they cannot solve on their own, but together (with you) — who knows? Every one of them has an integer seque…

6.深度学习练习:Initialization

本文节选自吴恩达老师《深度学习专项课程》编程作业&#xff0c;在此表示感谢。 课程链接&#xff1a;https://www.deeplearning.ai/deep-learning-specialization/ 目录 1 - Neural Network model 2 - Zero initialization 3 - Random initialization&#xff08;掌握&…