Apollo Planning学习(2)-------路径规划

这篇具有很好参考价值的文章主要介绍了Apollo Planning学习(2)-------路径规划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 本次学习的Apollo版本为6.0版本,因为从5.0开始轨迹规划算法主要使用的就是public road,所以本次主要学习该算法,该算法的核心思想是PV解耦,即Path-Velocity的解耦,其主要包含两个过程:1.路径规划,2.速度规划。
  • 路径规划其实已经发展很多年,从早期的机器人到现在的无人驾驶,主要的方法包括 采样法,图搜索法,数值优化法等,具体可以查阅相关文献阅读。本篇文章主要讲述apollo轨迹规划模块里面的路径规划,之后在更新学习速度规划的文章。
  • 与之前EM规划和Lattice规划不同,当前6.0版本使用的路径规划,更加的灵活方便,原因主要是采用了数值优化的思想,通过边界约束等,保证了密集障碍物场景的灵活性,也同时避免了EM规划中DP消耗大量时间的缺点。
  • 在之前的学习中了解到PublicRoadPlanner::Plan()中注册了,创建,更新了场景再根据不同的场景对应的不同的stage去完成相应阶段下的tasks。由于场景的差异性,task与stage也有所不同,因此本文只讲述默认情况下的lane follow scenario,其他场景的分析方式大同小异。
    Apollo Planning学习(2)-------路径规划
    关于Apollo6.0处理路径规划的算法原理,百度已经发表在《Optimal Vehicle Path Planning Using Quadratic Optimization for Baidu Apollo Open Platform》。基于参考线将规划问题解耦为SL坐标系中的路径规划和ST坐标系中的速度规划。
    Apollo Planning学习(2)-------路径规划

主要代码的梳理学习从LaneFollowStage::PlanOnReferenceLine这个函数展开

Status LaneFollowStage::PlanOnReferenceLine(
    const TrajectoryPoint& planning_start_point, Frame* frame, ReferenceLineInfo* reference_line_info) {
    // 当前先验信息判断是否当前参考线是可换道的车道,如果不是那么增加cost。
  if (!reference_line_info->IsChangeLanePath()) {
    reference_line_info->AddCost(kStraightForwardLineCost);
  }
  auto ret = Status::OK();
  // 随后,开始了task的process过程,不同的stage有不同的task,具体可通过 conf/scenario文件夹下的pb.txt
  for (auto* task : task_list_) {
    ret = task->Execute(frame, reference_line_info);
    RecordDebugInfo(reference_line_info, task->Name(), time_diff_ms);
    if (!ret.ok()) {
      AERROR << "Failed to run tasks[" << task->Name()
             << "], Error message: " << ret.error_message();
      break;
    }
  }
  RecordObstacleDebugInfo(reference_line_info);
  // check path and speed results for path or speed fallback
  reference_line_info->set_trajectory_type(ADCTrajectory::NORMAL);
  // 如果执行失败,则规划fallback轨迹
  if (!ret.ok()) {
    PlanFallbackTrajectory(planning_start_point, frame, reference_line_info);
  }
// 本次只学习路径规划部分,后面的以后再学
...
}

在路径规划中我们主要关注lane follow场景,配置文件为modules\planning\conf\scenario\lane_follow_config.pb.txt

scenario_type: LANE_FOLLOW
stage_type: LANE_FOLLOW_DEFAULT_STAGE
stage_config: {
  stage_type: LANE_FOLLOW_DEFAULT_STAGE
  enabled: true
  task_type: LANE_CHANGE_DECIDER
  task_type: PATH_REUSE_DECIDER
  task_type: PATH_LANE_BORROW_DECIDER
  task_type: PATH_BOUNDS_DECIDER
  task_type: PIECEWISE_JERK_PATH_OPTIMIZER
  task_type: PATH_ASSESSMENT_DECIDER
  task_type: PATH_DECIDER
  task_type: RULE_BASED_STOP_DECIDER
  task_type: ST_BOUNDS_DECIDER
  task_type: SPEED_BOUNDS_PRIORI_DECIDER
  task_type: SPEED_HEURISTIC_OPTIMIZER
  task_type: SPEED_DECIDER
  task_type: SPEED_BOUNDS_FINAL_DECIDER
  # task_type: PIECEWISE_JERK_SPEED_OPTIMIZER
  task_type: PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER
  task_type: RSS_DECIDER

......

上述task中,根据名称可以看出,path都是与路径相关,从rule_based之后则是与速度规划相关。故本节主要关注:
stage_type: LANE_FOLLOW_DEFAULT_STAGE
enabled: true
task_type: LANE_CHANGE_DECIDER
task_type: PATH_REUSE_DECIDER
task_type: PATH_LANE_BORROW_DECIDER
task_type: PATH_BOUNDS_DECIDER
task_type: PIECEWISE_JERK_PATH_OPTIMIZER
task_type: PATH_ASSESSMENT_DECIDER
task_type: PATH_DECIDER

上面的task按照任务顺序执行:
1.lane change decider:
Apollo Planning学习(2)-------路径规划

该决策器主要是用来处理refer_line_info,内部有个状态机,根据换道成功时间与换道失败时间以及当前位置与目标位置来切换状态,以此来处理refer_line_info的changelane信息,主要就是更新换道状态。
这一部分也影响到了path bound decider :如果最终的结果是不换道,在PathBoundsDecider中会将L的边界限制在本车道内(如果不借道);反之在PathBoundsDecider中会将L的边界向目标车道一侧进行拓展。
具体细节上的处理见Apollo Planning学习(3)-------LANE_CHANGE_DECIDER
2.path reuse decider:
Apollo Planning学习(2)-------路径规划

该决策器主要是用来处理路径是否可以重用,提高帧之间的平滑性。
如果感知模块对障碍物的感应不稳定(上下跳动)导致路径规划模块不稳定(也同样上下跳动),所以Apollo设计了路径重用的决策,如果上一帧的路径没有与障碍物发生碰撞,则采用上一帧的路径。
3.path lane borrow decider:
Apollo Planning学习(2)-------路径规划

ADC在借道工况中:判断本车道可通过性,如果在连续n(参数配置)帧规划中本车道可以通行,则取消借道。
ADC不在借道工况中:ADC需要同时满足必要条件才可以进入借道工况。
具体细节上的处理见:Apollo Planning学习(4)-------PATH_LANE_BORROW_DECIDER
这里同lanechangedecider一样,借道还是不借道也会影响到后面的PathBoundsDecider,如果借道,在PathBoundsDecider中会将l ll的边界借道方向一侧进行拓展。
4.path bounds decider:
Apollo Planning学习(2)-------路径规划

该决策器主要是用来处理根据前面的决策器更新的状态信息(例如,换道情况,借道情况)来生成相应的L的边界。
在该决策器中分为四个场景进行处理,按处理的顺序分别是fallback、pull over、lane change、regular,不同的boundary对应不同的应用场景,其中fallback对应的path bound一定会生成,其余3个只有一个被激活,即按照顺序一旦有有效的boundary生成,就结束该task。
FallbackBound+PullOverBound;
FallbackBound+LaneChangeBound;
FallbackBound+NoBorrow/LeftBorrow/RightBorrow;
不管在何种决策下,PathBoundsDecider都会生成一条FallbackBound,其与NoBorrow的区别是,不会删除Block Obstacle后道路边界。
具体细节上的处理见:Apollo Planning学习(5)-------PATH_BOUNDS_DECIDER
5.piecewise jerk path optimize:
Apollo Planning学习(2)-------路径规划

该决策器主要是基于二次规划算法,对每个边界规划出最优路径。
这里推荐听一下b站老王讲的十分透彻B站老王—二次规划
6.path assessment decider:
Apollo Planning学习(2)-------路径规划
该决策器主要处理是会依据设计好的规则筛选处最终的path,并在规划路径上的采样点添加标签(IN_LANE、OUT_ON_FORWARD_LANE、OUT_ON_REVERSE_LANE等),作为路径筛选的依据,并为速度规划提供限制。
具体细节上的处理见:Apollo Planning学习(6)-------PATH_ASSESSMENT_DECIDER
7.path decider:
Apollo Planning学习(2)-------路径规划
该决策器主要处理是遍历每个障碍物, 根据规则判断前面优化并筛选出来的path生成对应的decisions(GNORE, STOP, LEFT NUDGE, RIGHT NUDGE等)。

对以有IGNORE/STOP/KEEP_CLEAR决策的obstacle不做处理;
如果是block obstacle,并且不是借道工况,设为STOP决策;
不在path纵向范围内的障碍物设为IGNORE决策;
对于碰撞的obstacle,设为STOP决策;
根据位置关系设置LEFT NUDGE或者RIGHT NUDGE的决策;

具体细节上的处理见:Apollo Planning学习(7)-------PATH_DECIDER文章来源地址https://www.toymoban.com/news/detail-488917.html

到了这里,关于Apollo Planning学习(2)-------路径规划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • APOLLO planning比赛任务详解

    最近做了一个apollo的比赛,在不同的场景下完成不同的任务,对于每一个任务,又有相应的小要求,所有任务都是在apollo的基础上进行更改,前4个任务的代码修改量都很小,其实有3个任务都在apollo中都已经有了完成的雏形,这意味着这3个任务只需要更改相应的参数就好了。

    2024年02月09日
    浏览(52)
  • Apollo和autoware规划算法代码ros移植-路径规划可跑工程分享

    之前出了: Apollo规划代码ros移植-Lattcie的二次规划. Apollo规划代码ros移植-Lattice规划框架. 规划代码ros移植-POMDP预测规划(一). Apollo规划代码ros移植-Em planner. Apollo规划代码ros移植-混合A*. Apollo规划代码ros移植-动态障碍物处理(一). 适合人群: 1.想移植Apollo,autoware等流行规划算法到

    2024年02月12日
    浏览(48)
  • Apollo决策规划算法学习Chapter3 速度规划算法

    第一章 Apollo决策规划算法基本概念 第二章 Apollo决策规划之路径规划算法 第三章 Apollo决策规划之速度规划算法 本文为第三章,主要讲解 Apollo决策规划算法中的速度规划算法,EM planner的速度规划算法同样是是通过动态规划和二次规划实现的,下面来细讲速度规划算法。 1)回

    2024年02月11日
    浏览(60)
  • Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    Apollo星火计划课程链接如下 星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2 星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12     开放空间算法的配置主要在 valet_parking_config.pb.txt 中,分为4个部分: OPEN_SPACE_ROI_DECIDER 、 OPEN_SPACE_TRAJECTORY_PROVIDER 、 OPE

    2023年04月10日
    浏览(39)
  • Apollo星火计划学习笔记——Apollo决策规划技术详解及实现(以交通灯场景检测为例)

    Apollo星火计划课程链接如下 星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2 星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12 星火计划学习笔记——第七讲自动驾驶规划技术原理1 ●目的 ○ 保障无人车的行车安全并且遵守交规 ○ 为路径和速度的平滑优

    2024年02月07日
    浏览(51)
  • Apollo规划模块代码学习(1): 算法架构原理、运行机制一文详解

    Apollo开源自动驾驶平台中,高清地图模块提供了每个在线模块都可以访问的高清地图。感知和定位模块提供了必要的动态环境信息,可以在预测模块中进一步用于预测未来的环境状态。运动规划模块考虑所有信息,以生成安全平滑的轨迹,并将其输入车辆控制模块。 目前Ap

    2024年01月25日
    浏览(47)
  • 【Apollo学习笔记】——规划模块TASK之PATH_ASSESSMENT_DECIDER

    1.【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER 2.【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER 3.【Apollo学习笔记】——规划模块TASK之PATH_BORROW_DECIDER 4.【Apollo学习笔记】——规划模块TASK之PATH_BOUNDS_DECIDER 5.【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMI

    2024年02月11日
    浏览(43)
  • 【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER

    1.【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER 2.【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER 3.【Apollo学习笔记】——规划模块TASK之PATH_BORROW_DECIDER 4.【Apollo学习笔记】——规划模块TASK之PATH_BOUNDS_DECIDER 5.【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMI

    2024年02月12日
    浏览(37)
  • 【Apollo学习笔记】——规划模块TASK之PATH_BOUNDS_DECIDER

    1.【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER 2.【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER 3.【Apollo学习笔记】——规划模块TASK之PATH_BORROW_DECIDER 4.【Apollo学习笔记】——规划模块TASK之PATH_BOUNDS_DECIDER 5.【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMI

    2024年02月11日
    浏览(47)
  • 【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMIZER

    1.【Apollo学习笔记】——规划模块TASK之LANE_CHANGE_DECIDER 2.【Apollo学习笔记】——规划模块TASK之PATH_REUSE_DECIDER 3.【Apollo学习笔记】——规划模块TASK之PATH_BORROW_DECIDER 4.【Apollo学习笔记】——规划模块TASK之PATH_BOUNDS_DECIDER 5.【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_PATH_OPTIMI

    2024年02月10日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包