1.10 Speed Bounds Prior Decider
这个task会执行两次,主要业务是把障碍物投到st图,再设置path上的速度限制。
第一次跑不涉及障碍物在速度方面的decision,第二次是在添加decision之后,需要考虑decision。
Map obstacles into st graph
这里上来就搞了一个STBoundaryMapper Object,获取参考线、配置、path decision、规划长度和时间等参数。
然后ComputeSTBoundary,区分了几种情况: no Longitudinal Decision和has Longitudinal Decision(has stop、has follow、has overtake、has yield、has ignore),在prior中只有no decision和has stop,
1 | STBoundaryMapper boundary_mapper( |
bound的生成:
1 | auto boundary = STBoundary::CreateInstance(lower_points, upper_points); |
这里使用lower_points和upper_points生成STBoundary(Polygon),用散点生成一个由line segment组成的框(Polygon)。
流程:
首先做稀疏化(RemoveRedundantPoints),保证点与点的距离大于0.1(每个小框的面积>= 0.01)
然后和之前一样,调用BuildFromPoints,连接point得到line segment,由segment包成一个polygon
GetSpeedLimits
障碍物的ST Boundary得到后,遍历计算每个s对应的speedlimit,来源包括:
1、Map - 地图上标的限速
2、Curvature - sqrt(横向加速度 a / 道路曲率 kappa)
3、NudgeObs - 对nudge过程中过近的obs做限速处理。在frenet坐标系下,当自车与obs在s方向有重叠,l方向距离小于safe_range(1.0)时,做限速处理:静态障碍物的限速为0.6×Map限速,动态为0.8×Map限速