0


Apollo规划决策算法仿真调试(5):动态障碍物绕行

前言:

Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。Apollo 自动驾驶开放平台为开发者提供了丰富的车辆、硬件选择,强大的环境感知、高精定位、路径规划、车辆控制等自动驾驶软件能力以及高精地图、仿真、数据流水线等自动驾驶云服务,帮助开发者从 0 到 1 快速搭建一套自动驾驶系统。

本系列文章将记录笔者在调试Apollo决策规划算法Planning模块的所见所思所想,不仅会分析决策规划算法具体的代码逻辑,还会使用Vscode对Apollo决策规划算法进行断点调试,从而揭示关键变量的数据结构以及取值。

最近很多粉丝问在apollo规划算法planning模块中,如何才能对运动的障碍物进行绕行。动态障碍物的绕行在量产项目中是一个很大的话题,需要很复杂的逻辑与场景去解决。

这里先不讨论量产解法,提供一种在apollo的仿真环境中动态障碍物绕行的解决思路。先上动态障碍物绕行视频:

Apollo规划决策算法仿真调试(4):动态障碍物绕行

如果对Apollo规划决策算法仿真调试感兴趣,想了解规划算法的实施细节,可以持续关注系列文章:

Apollo规划决策算法仿真调试(1): 使用Vscode断点调试apollo的方法

Apollo规划决策算法仿真调试(2):使用bazel 编译自定义代码模块_

Apollo规划决策算法仿真调试(3):ReferenceLineProvider参考线生成流程

Apollo Planning决策规划算法代码详细解析 (5):规划算法流程介绍

Apollo Planning决策规划算法代码详细解析 (14):SPEED_BOUNDS_PRIORI_DECIDER

自动驾驶算法详解(1) : Apollo路径规划 Piecewise Jerk Path Optimizer的python实现

自动驾驶算法详解(5): 贝塞尔曲线进行路径规划的python实现

后续更多的算法细节调试过程在csdn专栏进行更新,有需要的可以订阅:

https://blog.csdn.net/nn243823163/category_11807746.html?spm=1001.2014.3001.5482https://blog.csdn.net/nn243823163/category_11807746.html?spm=1001.2014.3001.5482 正文如下:

1、动态障碍物绕行分析:

2、PathLaneBorrowDecider分析

需要进入借道场景才可以触发绕行功能。

3、PathBoundsDecider分析:

可以看到经过PathBoundsDecider计算后,总共形成3个pathBoundary,分别是fallback、regular、right-forward

相关代码如下:

// Update the path boundary into the reference_line_info.
    std::vector<std::pair<double, double>> regular_path_bound_pair;
    for (size_t i = 0; i < regular_path_bound.size(); ++i) {
      regular_path_bound_pair.emplace_back(std::get<1>(regular_path_bound[i]),
                                           std::get<2>(regular_path_bound[i]));
    }
    candidate_path_boundaries.emplace_back(std::get<0>(regular_path_bound[0]),
                                           kPathBoundsDeciderResolution,
                                           regular_path_bound_pair);
    std::string path_label = "";
    switch (lane_borrow_info) {
      case LaneBorrowInfo::LEFT_BORROW:
        path_label = "left";
        break;
      case LaneBorrowInfo::RIGHT_BORROW:
        path_label = "right";
        break;
      default:
        path_label = "self";
        // exist_self_path_bound = true;
        // regular_self_path_bound = regular_path_bound;
        break;
    }
    // RecordDebugInfo(regular_path_bound, "", reference_line_info);
    candidate_path_boundaries.back().set_label(
        absl::StrCat("regular/", path_label, "/", borrow_lane_type));
    candidate_path_boundaries.back().set_blocking_obstacle_id(
        blocking_obstacle_id);
  }

4、PathAssessmentDecider分析

PathAssessmentDecider中进行路径选择,排序前:

排序后:

5、最终选择的路径

可以看到,最终选择的路径是向右借道的路径。

路径如下:

6、最终结果如下:


本文转载自: https://blog.csdn.net/nn243823163/article/details/124686175
版权归原作者 自动驾驶Player 所有, 如有侵权,请联系我们删除。

“Apollo规划决策算法仿真调试(5):动态障碍物绕行”的评论:

还没有评论