初阅读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;
}
其他
routing response 的构建过程在文件result_generator.cc
中。
在下一篇文章中再分析构建过程……
网友评论