Apollo:参考线信息类ReferenceLineInfo

  • 在ReferenceLine之外,在common目录下还有一个结构:ReferenceLineInfo,ReferenceLineInfo用于存储参考线信息。ReferenceLineInfo结构才是各个模块实际用到数据结构,它其中包含了ReferenceLine,但还有其他更详细的数据。
  • 所谓的参考线其实是一条驾驶路径,因此参考线信息实际上就是一条驾驶路径所需的各种信息,包括车辆状态,当前轨迹点,路径数据,速度数据…
  • 定义在/planning/common/reference_line_info.h

成员变量

数据类型成员变量名说明
static std::unordered_map<std::string, bool>junction_right_of_way_map_;
  • junection和路权的映射表
const common::VehicleStatevehicle_state_;
  • 车辆状态类信息
  • 从其他地方获取的车辆状态,不可以修改
const common::TrajectoryPointadc_planning_point_;
  • 规划起始点
  • 从其他地方获取的规划点,不可以修改
ReferenceLinereference_line_;
  • 参考线
  • 从其他地方获取的参考线,不可以修改
doublecost_ = 0.0;
  • 参考线代价,越小越好
boolis_drivable_ = true;
  • 表示参考线是否能够驾驶(是否规划成功)
PathDecisionpath_decision_;
  • 路径决策类,包含障碍物( 表示当前参考线是否有障碍物)和决策信息
Obstacle*blocking_obstacle_;
  • 车道内的障碍物<
std::vector< PathBoundary>candidate_path_boundaries_;
  • 候选路径边界
std::vector< PathData>candidate_path_data_;
  • 候选路径数据
PathDatapath_data_;
  • 路径数据
  • 存储参考线包含的路径对象
PathDatafallback_path_data_;
  • 回退路径数据,规划失败时使用
SpeedDataspeed_data_;
  • 速度规划数据
  • 存储参考线包含的速度信息
DiscretizedTrajectorydiscretized_trajectory_;
  • 离散化轨迹类对象
  • 存储参考线的离散化轨迹点集
RSSInforss_info_;
  • planning.proto中的敏感性安全信息
SLBoundaryadc_sl_boundary_;
  • 参考线的sl边界
  • 存储参考线的边界信息
planning_internal::Debugdebug_;
  • 调试信息
LatencyStatslatency_stats_;
  • 延迟统计
  • 存储参考线包含的隐藏状态,包括总时长(ms)、控制器时长(ms)。
hdmap::RouteSegmentslanes_;
  • 高精地图的路由信息
  • 存储参考线的车道片段集
boolis_on_reference_line_ = false;
  • 自车是否在参考线上
boolis_path_lane_borrow_ = false;
  • 借道标志位,临时强占路权
ADCTrajectory::RightOfWayStatusstatus_ = ADCTrajectory::UNPROTECTED;
  • 路权状态
doubleoffset_to_other_reference_line_ = 0.0;
  • 相对于相邻参考线的偏移
doublepriority_cost_ = 0.0;
  • 优先代价
PlanningTargetplanning_target_;
  • 包括终止点,巡航速度等
ADCTrajectory::TrajectoryTypetrajectory_type_ = ADCTrajectory::UNKNOWN;
  • 轨迹类型
std::vector<std::pair<OverlapType, hdmap::PathOverlap>>first_encounter_overlaps_;
  • 通过排序获得最先遇到的overlap
StGraphDatast_graph_data_;
  • st图
common::VehicleSignalvehicle_signal_;
  • 自车的信号灯,转向,双闪灯
doublecruise_speed_ = 0.0;
  • 巡航速度
boolpath_reusable_ = false;
  • 是否可以reuse,比如用于fallback

成员函数

该类主要包含以下重要成员函数:AddObstacles、IsStartFrom、IsChangeLanePath、CombinePathAndSpeedProfile、ExportTurnSignal、ExportDecision、ReachedDestination,其他函数是辅助函数

在这里插入图片描述

AddObstacles

  • 作用:在当前参考线中加入障碍,让参考线更加接近实际的驾驶路径

调用入口

创建ReferenceLineInfo:Frame::CreateReferenceLineInfo

  • ReferenceLineInfo由Frame根据ReferenceLine和RouteSegments创建得到。
  • 在每个Planning计算循环的开始,都会创建和初始化一个新的Frame,而Frame初始化的时候就会创建ReferenceLineInfo。当有多个ReferenceLine的时候,则意味着需要变道。
bool Frame::CreateReferenceLineInfo(
    const std::list<ReferenceLine> &reference_lines,
    const std::list<hdmap::RouteSegments> &segments) {
  reference_line_info_.clear();
  auto ref_line_iter = reference_lines.begin();
  auto segments_iter = segments.begin();
  while (ref_line_iter != reference_lines.end()) {
    if (segments_iter->StopForDestination()) {
      is_near_destination_ = true;
    }
    reference_line_info_.emplace_back(vehicle_state_, planning_start_point_,
                                      *ref_line_iter, *segments_iter);
    ++ref_line_iter;
    ++segments_iter;
  }

  if (FLAGS_enable_change_lane_decider &&
      !change_lane_decider_.Apply(&reference_line_info_)) {
    AERROR << "Failed to apply change lane decider";
    return false;
  }
  ...
}

ReferenceLine主要是静态数据(路径点和限速)的存储,而ReferenceLineInfo中会包含动态信息(障碍物)和更多逻辑。

操作ReferenceLineInfo

主要有下面两个地方会操作ReferenceLineInfo:

  • /modules/planning/traffic_rules:该目录下是交通规则的实现。不同Rule会向ReferenceLineInfo添加不同的数据,例如:障碍物,红绿灯等等。
  • /modules/planning/tasks:该目录下是许多的决策器和优化器,这是Apollo EM Planner算法的核心。

交通规则的应用是在TrafficDecider::Execute方法中执行的。

每个交通规则都会实现下面这个方法来完成其逻辑:

common::Status ApplyRule(Frame* const frame,
                         ReferenceLineInfo* const reference_line_info) = 0;

这里的指针类型的参数就意味着方法实现可能会修改参数的值。

对于ReferenceLineInfo的操作,主要是修改该类的以下三个字段:

  • PathData path_data_:包含了路径相关的数据,逻辑实现位于modules/planning/common/path/中。
  • SpeedData speed_data_:包含了速度相关的数据,逻辑实现位于modules/planning/common/speed/。路径和速度最终将组合起来使用,以生成行车轨迹(见下文)。
  • PathDecision path_decision_:这个字段中包含了障碍物的决策信息。

障碍物在Planning模块中通过apollo::planning::Obstacle描述。

障碍物分为横向障碍物和纵向障碍物。横向障碍物将可能导致车辆的nudge行为。而纵向障碍物可能导致车辆出现:stop,yield,follow,overtake行为。这几个行为的优先级从左到右依次递减。

预测模块对于同一个障碍物可能会有多个预测轨迹。此时在Planning模块中,会多个apollo::planning::Obstacle对象分别对应每一个轨迹。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值