Apollo决策规划算法学习Chapter1 基本概念

Apollo决策规划算法学习系列目录

第一章 Apollo决策规划算法基本概念;
第二章 Apollo决策规划之路径规划算法;
第三章 Apollo决策规划之速度规划算法;



前言

本文为第一章,主要讲解 Apollo决策规划算法的一些基本概念如凸优化、参考线、Frenet坐标系的概念。


一、凸优化与Frenet坐标系的概念

1.1 凸优化与非凸优化的概念

Notes:决策规划的含义(一辆无人车的无人驾驶系统主要由感知、定位、预测、决策规划、控制几个模块组成):决策规划是无人车的核心算法模块,因为它就类似于人类驾驶员大脑决策在不同情况下怎么行驶,无人驾驶分为L0-L5,无人车的无人驾驶功能越强大,决策规划算法就越重要也就越难,决策规划虽然是一个模块,但是在它内部,可以细分为三个部分;第一部分是导航规划算法,导航规划算法是这个模块中最成熟的算法,常见的有A*、 RRT* 等,它的功能是搜索出一条起点到终点的最优路径(功能和手机导航相似),Apollo使用的是Hybrid A* 算法;第二部分是行为规划算法(也可以认为是决策算法),它的功能是决定车辆的行驶意图,比如遇到正前方行走的行人应该向右绕行还是减速避让,它也是决策规划中最难做的部分;第三部分是运动规划算法,它根据决策算法给出的行为意图搜索出一条具有详细路径点和速度信息同时满足各种约束的轨迹,运动规划生成的轨迹是决策规划模块的最终输出,输出后把这个轨迹给控制模块去跟踪;

1)细说五次多项式的特殊性;
五次多项式是规划算法中的常客,下面解释一下五次多项式的特殊性,在车辆运动规划中一个很重要的指标是舒适性,在物理中衡量舒适性的指标就是跃度(加速度的导数),因此在计算中我们想要得到一个关于t的函数f(t),使得它的三阶导数(也就是跃度)在0-T时间内的的积分尽量小,那可能有些人会认为二次或者更低的多项式就可以了,但是这样考虑忽略了一个问题,真实情况是比较复杂的,真实情况往往是带有约束的,初始状态和终止状态对位置、速度、加速度都有限制,所以需要进行一下计算和推导,简要的说一下为什么是五次多项式,在求解有初始状态和终止状态约束的问题称为OBVP(Optimal Boundary Value Problem)问题(边界值最优),解OBVP问题的方法是,定义一个相关的哈密尔顿函数,通过庞特里亚金极小值原理求解出该问题的解为五次多项式。
2)凸优化与非凸优化;
(1)自动驾驶决策规划模块的目标是规划出一条满足约束的最优轨迹,最优指的是满足约束(轨迹连续性、无碰撞性、交通规则、车辆动力学)和各种指标(平滑性、舒适性、耗时少),我们使用代价函数评判衡量轨迹的质量;
(2)凸优化与非凸优化的数学概念不再说了,这里说凸优化与非凸优化只是为了说明自动驾驶的问题怎么由非凸优化问题转换为凸优化问题,下面来看凸优化具有的两个性质:第一是代价函数只有一个极值点(凸函数),第二是约束空间是完整的空间(凸空间),那么凸函数在凸空间的最小值问题就称为凸优化问题;
(3)接下来要说一说凸空间的概念,因为下面会用到这个概念,在一个多边形中,任意选取两个多边形内部的点如果这两点中间的点都属于多边形内部,那么此多边形称为凸多边形,凸空间就是凸多边形的引申,所以是类似的;
(4)来看一看自动驾驶车辆行驶过程中避障的约束空间如何:下面是一个示意图,可以看到明显不满足凸空间的性质,所以自动驾驶车辆的避障的约束空间是非凸的,那么非凸问题解决的一般思路就是转换为凸空间,我们下面看一看怎么转换为凸空间;
在这里插入图片描述

目前求解非凸问题没有完美的解决方案,主要的思路就是寻找非凸问题中的凸结构,我们使用启发式算法现随机在空间中采样一些离散的数值,取最小的作为迭代初值(这种启发式算法本质上是连续空间离散化后,离散约束空间的最优解),然后迭代求出最终解,这样做其实也存在一定的问题,如果采样点少,容易陷入局部最优解;如果采样过多的点,计算量太大,会造成维度灾难,因此采样点的数量的选择很重要,基本是一个如下的流程:

在这里插入图片描述

1.2 Frenet坐标系的概念

我们通常使用笛卡尔坐标系描述物体的位置,但笛卡尔坐标系对车辆来说并不是最佳选择,即使给出了车辆位置(x,y),如果我们不知道道路在哪里,也很难知道车辆行驶了多远,也难以确定它是否偏离车道中心,笛卡尔坐标系转换为Frenet坐标系就可以解决这个问题,因为Frenet坐标系以道路为坐标轴,它的基向量也不是常向量,而是一直会变化的,它的纵轴为道路曲线的切线方向,横轴为道路曲线的法线方向,可以把从第一张图的形式转换为第二张图的形式:

在这里插入图片描述

在这里插入图片描述

二、参考线的概念

2.1 决策规划总体概览、参考线的用途

1)定位+导航:生成参考线
2)静态障碍物投影到以参考线位坐标轴的Frenet坐标系中;
3)决策算法对障碍物做决策(往左绕、往右绕、减速避让)开辟最优凸空间;
4)规划算法在凸空间中搜索出最优的路径;
5)后处理,在规划轨迹中选一个点,坐标转换为笛卡尔坐标系,输出给控制去跟踪;

Notes:这个决策规划总体概览相对比较粗略,没有考虑动态避障;
6)大家是否想过导航的路径有问题呢,因为导航的路径是一个很长的路径(从起点到终点),而且过长的路径不利于坐标转换,同时障碍物的投影可能不唯一,这就带来很大问题;就算导航的路径很短也没有一些具体速度、路径的详细信息,无法直接给控制模块去跟踪,所以导航给出的路径无法直接用,必须要用到参考线,参考线是解决导航路径过长,路径不平滑的问题方法
7)参考线的概念:在每个规划周期内,找到车在导航路径上的投影点,以投影点为坐标,往后取30m,往前取150m,(如果往后没有30m,就是刚开始从起点开始走的时候,那就往前多取一些)做平滑,平滑后的点的集合称为参考线。

2.3 参考线平滑算法Fem smoother

参考线平滑算法是对参考线进行平滑的算法,使参考线更加平滑;参考线平滑算法考虑了三个指标:参考线是否平滑、参考线和平滑之前的几何形状的差距(差距不能太大)、长度尽可能紧凑和均匀,下面有图解的方式解释这三个指标的作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
平滑算法用二次规划算法,因此我们要求出二次规划的矩阵,下面是计算过程:
请添加图片描述

2.4 参考线模块优化计算,提升速度的方法

回顾一下参考线生成的流程:
在这里插入图片描述
下面来说一说优化计算参考线生成算法,提升计算速度的方法:
1)减少规划频率,规划算法每100ms执行一次,控制算法每10ms执行一次;
2)充分利用上一个规划周期的结果;
3)快速找到匹配点的方法:常规做法是每一个规划周期做遍历,但是速度导航路径可能很长,遍历很费时;正确的做法是以上个周期的匹配点为起点开始做遍历,如果发现有一个点前面的点距离车的距离大于该点的距离,那么该点就是本周期的匹配点;
在这里插入图片描述
在这里插入图片描述

但是这样做做其实也存在一定的问题,因为这样做有一个条件:上个匹配点结果附近只有一个极小值点,如果没有这样的条件的话可能会陷入局部最小值,针对这个问题我们有一种方法来解决;

首先是,规划周期是100ms,那么车辆也只是行驶了几米,道路一般不可能出现这么扭曲的几何,其次就算出现了我们用一个变量继续l(i+1)>l(i)的次数,当这个变量记录的增加次数超过阈值(比如50),也就是连续检查了后面50个点也没有更小的点了,那就可以把l(i)当做是匹配点了。

2.5 轨迹拼接

每个规划周期都会生成参考线,但是肯定不可能上个周期生成的参考线和下个周期生成的能刚好拼接起来,很大几率存在重复的点,这时候就比较这个周期的和上个周期的,相同的保留着,剩下的不足的点就从这个周期生成的取一些拼接上去即可。


总结

以上就是今天要讲的内容,本文介绍了 Apollo决策规划算法的一些基本概念如凸优化、参考线、Frenet坐标系的概念,同时还介绍了参考线平滑算法Fem smoother。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Apollo Planning决策规划算法在无人驾驶领域中被广泛应用,在自动驾驶车辆中起着至关重要的作用。该算法主要通过对车辆周围环境的感知和分析,实现智能驾驶路线的规划决策,确保车辆安全行驶。 该算法的代码主要包含三个部分:感知模块、规划模块和控制模块。其中感知模块主要负责采集车辆周围的环境信息,包括车辆所处的位置、路况、障碍物等。规划模块通过对这些信息的分析,提出一系列可能的驾驶路线,并通过评估这些路线的优劣来选择最佳驾驶路线。控制模块负责实现规划模块中选择的最佳驾驶路线,并控制车辆按照路线行驶。 在Apollo Planning决策规划算法中,规划模块是实现驾驶决策的最重要模块,也是最具技术难度的模块。规划模块通过对车辆当前状态和环境信息的分析,提出一系列汽车驾驶路线。该算法采用在线生成路线方案的方法,路线生成的步骤如下: 1. 动态路径规划:根据车辆的位置和行驶状态,实时选择当前最佳的驾驶路线。 2. 静态路线生成:基于当前车辆所处的环境信息,生成固定的驾驶路线。 3. 组合路径规划:将动态路径规划和静态路线生成相结合,生成最终的驾驶路线。 除此之外,Apollo Planning决策规划算法还包括计算机视觉、机器学习、深度学习和人工智能等技术,这些技术的综合应用使得Apollo Planning决策规划算法成为无人驾驶领域中应用最广泛的决策规划算法。 ### 回答2: Apollo Planning决策规划算法是一种用于自动驾驶系统的规划算法。该算法的主要作用是实时生成安全、有效且符合路况的路径以实现自动驾驶功能。本文将对该算法进行详细解析。 Apollo Planning决策规划算法主要包括三个步骤:路线规划、运动规划决策规划。具体代码如下: 1. 路线规划 ```c++ bool Planning::PlanOnReferenceLine() { std::vector<const hdmap::HDMap*> hdmap_vec; hdmap_vec.reserve(1); if (!GetHdmapOnRouting(current_routing_, &hdmap_vec)) { AERROR << "Failed to get hdmap on current routing with " << current_routing_.ShortDebugString(); return false; } const auto& reference_line_info = reference_line_infos_.front(); std::vector<ReferencePoint> ref_points; if (!CreateReferenceLineInfo(hdmap_vec.front(), reference_line_info, &ref_points)) { AERROR << "Failed to create reference line from routing"; return false; } // Smooth reference line Spline2d smoothed_ref_line; std::vector<double> s_refs; std::vector<double> l_refs; std::vector<double> headings; std::vector<double> kappas; std::vector<double> dkappas; if (!SmoothReferenceLine(ref_points, &smoothed_ref_line, &s_refs, &l_refs, &headings, &kappas, &dkappas)) { AERROR << "Failed to smooth reference line"; return false; } reference_line_info.SetTrajectory(&smoothed_ref_line); reference_line_info.SetReferenceLine(&ref_points); // set origin point if (!reference_line_info.SLToXY(s_refs.front(), 0.0, &origin_point_)) { AERROR << "Failed to get origin point on reference line"; return false; } return true; } ``` 在路线规划阶段中,Apollo Planning决策规划算法首先获取当前行驶路线和高精度地图数据。然后根据行驶路线和地图数据构建参考线,对参考线进行平滑处理,得到平滑后的参考线。此时我们可以得到平滑后的参考线的位置、方向和曲率等信息,这些信息将作为后面的运动和决策规划的输入。 2. 运动规划 ```c++ bool Planning::PlanOnPrediction() { PredictionObstacles prediction_obstacles; if (!GetPrediction(&prediction_obstacles)) { AERROR << "Prediction failed"; return false; } std::vector<Obstacle> obstacles; if (!BuildObstacle(prediction_obstacles, &obstacles)) { AERROR << "Unable to build obstacle"; return false; } const auto& reference_line_info = reference_line_infos_.front(); const auto& reference_line = reference_line_info.reference_line(); SpeedData speed_data; Cruiser::PlanningTarget planning_target; Status status = cruiser_->Plan(reference_line_info, obstacles, 0.0, reference_line.Length(), &speed_data, &planning_target); if (status != Status::OK()) { AERROR << "Failed to plan path with status: " << status; return false; } RecordDebugInfo(reference_line_info, obstacles, speed_data); return true; } ``` 运动规划主要用于生成车辆在参考线上的运行轨迹。在运动规划阶段,Apollo Planning决策规划算法首先获取预测障碍物信息,将预测的障碍物转化为Obstacle对象。然后根据当前平滑后的参考线、障碍物等信息进行运动规划。运动规划的目标是生成符合规划目标的速度曲线。最后,Apollo Planning决策规划算法记录调试信息,以便后续分析调试。 3. 决策规划 ```c++ bool Planning::MakeDecision() { const auto& reference_line_info = reference_line_infos_.front(); const auto& reference_line = reference_line_info.reference_line(); std::vector<const Obstacle*> obstacles; if (!Obstacle::CreateObstacleRegions(FLAGS_max_distance_obstacle, reference_line_info, &obstacles)) { AERROR << "Failed to create obstacle regions"; return false; } for (auto obstacle_ptr : obstacles) { const auto& obstacle = *obstacle_ptr; if (obstacle.IsVirtual()) { continue; } if (obstacle.IsStatic()) { continue; } if (obstacle.type() == PerceptionObstacle::BICYCLE || obstacle.type() == PerceptionObstacle::PEDESTRIAN) { continue; } const auto& nearest_path_point = obstacle.nearest_point(); const SLPoint obstacle_sl = reference_line_info.xy_to_sl(nearest_path_point); if (obstacle_sl.s() < -FLAGS_max_distance_obstacle || obstacle_sl.s() > reference_line.Length() + FLAGS_max_distance_obstacle) { continue; } ObjectDecisionType decision; decision.mutable_avoid(); decision.mutable_avoid()->set_distance_s(-obstacle_sl.s()); reference_line_info.AddCost(&obstacle, &decision); } std::vector<ObjectDecisionType> decisions; if (!traffic_rule_manager_.ApplyRule(reference_line_info, &decisions)) { AERROR << "Failed to apply traffic rule manager"; return false; } reference_line_info.SetDecision(decisions); return true; } ``` 决策规划是基于当前环境信息和规划的路径等输入信息,实时生成控制命令的过程。在Apollo Planning决策规划算法中,决策规划阶段根据当前参考线、障碍物等信息生成决策。该算法根据不同的规则和策略,生成不同的控制命令,以保证车辆安全、有效地运行。 综上,Apollo Planning决策规划算法是自动驾驶系统中重要的规划算法之一,它通过路线规划、运动规划决策规划三个步骤,实现了安全、有效和符合路况的路径规划,为自动驾驶车辆的控制提供了重要的支持。 ### 回答3: Apollo Planning(阿波罗规划)是百度自动驾驶平台Apollo中的一种决策规划算法,主要用于规划车辆的驾驶行为。该算法基于深度强化学习,使用了运动学模型和环境感知技术,可以根据车辆当前位置和目的地,生成一条最优的行驶路径,包括车辆的控制指令和行驶速度等。 该算法的核心技术是深度强化学习,它通过对驾驶过程进行大量的仿真,让计算机通过自我学习得到驾驶规则,使车辆能够根据不同的场景做出最优的决策。具体而言,算法先通过神经网络生成一系列潜在的行动策略,然后通过与环境进行交互、执行行动并接收环境反馈来评估每个策略的优劣,最终选取最优策略进行执行。 在实现上,Apollo Planning算法主要由四个模块构成:感知模块、规划模块、执行模块和控制模块。感知模块主要用于获取车辆周围环境的信息,包括车辆位置、速度、道路情况、交通灯等;规划模块根据感知模块提供的信息和车辆的目的地,生成一条最优的行驶路径;执行模块则根据规划模块生成的路径信息,实现车辆的自主驾驶;控制模块则根据执行模块生成的控制指令,控制车辆的加速、刹车、转向等行为。 在算法实现上,Apollo Planning采用了C++编程语言,结合ROS框架实现各模块之间的数据交互和代码复用,保证了算法的高效性和可维护性。算法代码实现方面还采用了许多优化技术,包括多线程并发执行、高效的数据结构和算法等,以提升算法的运行效率和稳定性。 总之,Apollo Planning是一种基于深度强化学习决策规划算法,具有高效、自主、可靠等特点,在智能驾驶领域具有广泛应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值