Skip to content

PnC Map

源码路径:modules/map/pnc_map/

概述

PnC Map(Planning and Control Map)是连接 HDMap 和 Planning 模块的桥梁层。它根据 Routing 结果和车辆当前状态,从高精地图中提取规划所需的路段信息(RouteSegments),为 Planning 模块生成参考线提供数据基础。核心功能包括:路由段提取、车辆投影、前后视距计算、换道动作判断。

核心类

PncMapBase

cpp
// pnc_map_base.h
class PncMapBase {
 public:
  virtual bool CanProcess(const PlanningCommand& command) const = 0;
  virtual bool UpdatePlanningCommand(const PlanningCommand& command);
  static double LookForwardDistance(double velocity);
  virtual bool GetRouteSegments(
      const common::VehicleState& vehicle_state,
      std::list<RouteSegments>* route_segments) = 0;
  bool IsNewPlanningCommand(const PlanningCommand& command) const;
  virtual bool ExtendSegments(const RouteSegments& segments,
      double start_s, double end_s,
      RouteSegments* truncated_segments) const = 0;
  virtual std::vector<routing::LaneWaypoint> FutureRouteWaypoints() const = 0;
  virtual void GetEndLaneWayPoint(
      std::shared_ptr<routing::LaneWaypoint>& end_point) const = 0;
  virtual hdmap::LaneInfoConstPtr GetLaneById(const hdmap::Id& id) const = 0;
  virtual double GetDistanceToDestination() const = 0;
 protected:
  PlanningCommand last_command_;
  hdmap::LaneWaypoint adc_waypoint_;
};

职责:规划地图抽象基类,定义路由段获取和命令处理接口

RouteSegments

cpp
// route_segments.h
class RouteSegments : public std::vector<LaneSegment> {
 public:
  routing::ChangeLaneType NextAction() const;
  routing::ChangeLaneType PreviousAction() const;
  bool CanExit() const;
  bool GetProjection(const common::PointENU& point_enu,
                     common::SLPoint* sl_point, LaneWaypoint* waypoint) const;
  bool GetProjection(const common::math::Vec2d& point,
                     common::SLPoint* sl_point, LaneWaypoint* waypoint) const;
  bool GetWaypoint(double s, LaneWaypoint* waypoint) const;
  bool CanDriveFrom(const LaneWaypoint& waypoint) const;
  bool Stitch(const RouteSegments& other);
  bool Shrink(const common::math::Vec2d& point,
              double look_backward, double look_forward);
  bool IsOnSegment() const;
  bool IsNeighborSegment() const;
  LaneWaypoint FirstWaypoint() const;
  LaneWaypoint LastWaypoint() const;
  static double Length(const RouteSegments& segments);
};

职责:表示 Routing 中一个 Passage 对应的车道段集合,是生成参考线的数据源

核心函数

PncMapBase::GetRouteSegments()

职责:根据车辆状态提取当前及相邻车道的路由段 输入VehicleState(位置、速度、航向) 输出list<RouteSegments>(当前段 + 邻居段) 关键逻辑:根据速度计算前视距离,裁剪路由段

PncMapBase::LookForwardDistance()

cpp
static double LookForwardDistance(const double velocity) {
  // 根据速度在 short_distance 和 long_distance 之间插值
}

职责:根据车速计算前视距离(速度越快看得越远)

RouteSegments::GetProjection()

职责:将地图点投影到路由段上,返回 SL 坐标和对应 LaneWaypoint 输入:ENU 坐标点或 Vec2d 点 输出SLPoint(纵向 s、横向 l)+ LaneWaypoint

RouteSegments::Stitch()

职责:将两个路由段拼接为一个连续段 场景:参考线更新时,将旧段和新段拼接保持连续性

RouteSegments::Shrink()

职责:根据前后视距裁剪路由段 输入:参考点、前视距离、后视距离

配置(GFlags)

字段类型说明
look_backward_distancedouble后视距离
look_forward_short_distancedouble短前视距离(低速)
look_forward_long_distancedouble长前视距离(高速)

调用关系

  • 调用者:Planning 模块的 ReferenceLineProvider 通过 PncMapBase 获取 RouteSegments
  • 依赖:HDMap(车道信息)、Routing 结果(PlanningCommand)
  • 下游:RouteSegments 用于生成 ReferenceLine

贡献者

页面历史