apollo routing response

初阅读apollo routing模块时,对其输出结果比较困惑。
在此简要记录一下routing response结构体的含义,期望其他人少走一点儿弯路。
注意此文仅适合对apollo routing模块已经有较多了解的人。

我们直接看routing response 的proto文件。为方便,我直接在文件里描述。

syntax = "proto2";

package apollo.routing;

import "modules/common/proto/header.proto";
import "modules/common/proto/geometry.proto";
import "modules/common/proto/error_code.proto";
import "modules/map/proto/map_parking_space.proto";

message LaneWaypoint { #没啥好说的,表示一个坐标。
  optional string id = 1;
  optional double s = 2;
  optional apollo.common.PointENU pose = 3;
}

message LaneSegment { #对应一条车道,等同于高精地图中的一条车道。
  optional string id = 1; 
#车道id
  optional double start_s = 2; 
#起始位置与车道起始点的距离。(毕竟规划出的路径并不一定刚好是一个完整的车道,意思就是规划出的路径中的某个车道,并不一定与地图数据中的车道打断长度是一样的。)
  optional double end_s = 3; 
#终止位置与车道起始点的距离。
}

message RoutingRequest {#记录了规划请求的信息,不做介绍
  optional apollo.common.Header header = 1;
  // at least two points. The first is start point, the end is final point.
  // The routing must go through each point in waypoint.
  repeated LaneWaypoint waypoint = 2;
  repeated LaneSegment blacklisted_lane = 3;
#这里设置规划规避车道。
  repeated string blacklisted_road = 4;
  optional bool broadcast = 5 [default = true];
  optional apollo.hdmap.ParkingSpace parking_space = 6;
}

message Measurement {
  optional double distance = 1; 
#规划路径长度
}

enum ChangeLaneType {#这里表示一个passage的变道方向。
  FORWARD = 0;
  LEFT = 1;
  RIGHT = 2;
};

message Passage {#由多个前后相连的segment组成一个passage。
  repeated LaneSegment segment = 1;
  optional bool can_exit = 2;
#表示当前passage是否可退出。
# 如果是false,则表示 
#1. passage是最后一个passage了(也就是要到终点了)。
#2. 不能继续前行了,必须要按照change_lane_type进行变道。多发生在路口停止线前,在进入实线区域前有时必须要完成变道才能抵达目的地。
# 如果是true,则表示可以通过直行或者变道离开当前passage。
  optional ChangeLaneType change_lane_type = 3 [default = FORWARD];
#怎么理解呢,假如值是left,则表示在该passage内车辆要完成向左变道抵达左侧相邻的下一个passage。
#如果是forward,则表示无需变道,继续向前行驶。
#由此可见,不存在can_exit==false && change_lane_type ==forward的情况
}

message RoadSegment {//道路段,passages按照道路区分。
  optional string id = 1;
  repeated Passage passage = 2;
}

message RoutingResponse {
  optional apollo.common.Header header = 1;
  repeated RoadSegment road = 2;
  optional Measurement measurement = 3;
  optional RoutingRequest routing_request = 4;

  // the map version which is used to build road graph
  optional bytes map_version = 5;
  optional apollo.common.StatusPb status = 6;
}

其他

  1. 对于passage的理解可以参考链接文末的示意图:https://blog.csdn.net/lzw0107/article/details/114103329。

  2. routing response 的构建过程在文件result_generator.cc中。
    在下一篇文章中再分析构建过程……

你可能感兴趣的:(apollo routing response)