本文主要是介绍AutoDriver Lane Change,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.Lane Change Process
①Lane Change流程图
②Lane Change逻辑
(1)routing发送两条routes后,planning会生成两条参考线信息,一个是 forward reference line,另一条是 change lane reference line
(2)change_lane_gap_finder工具类在change lane reference line上找到一个可行的间隙,主要用来追踪障碍区和超车障碍物,该过程分为以下几步:
1.在target lane上获取范围内相关障碍物,过滤掉不影响变道的无效障碍物,然后对目标障碍物进行s坐标排序
2.寻找每一个Gap(Gap定义为一个自车大小的一个 Box),检查跟车和超车障碍物,过滤无效Gap
Gap 的合法性检查
-
自车与目标 Gap 组成的矩形后方车辆无加速行为。
-
自车与目标 Gap 组成的矩形前方的车辆无减速行为。
-
自车与目标 Gap 组成的矩形内无不可穿越的物体,如实线,车辆。
Gap查找预处理:
bool ChangeLaneGapFinder::ApplyPreviousGap(
const std::vector<ObstacleAtTime>& obstacles) {
//检查跟车和超车后进行加速度,速度检查
//如果自车想超车,进行超车速度检查,因为有时候速度达到限制,无法再加速
Speed_limit_upper_bound = target_ref_line_info_ ->reference_line().GetSpeedLimitFromS();
kMinExtraConstraintRatio = 1.3;
if(overtake_speed >speed_limit_upper_bound*kMinExtraConstraintRatio){
//adc超车速度太大
return false;
}
}
//评估前车间隙
EvaluateFollowObstacle(){
//最近的前车碰撞检查
if(is_committed_change_lane && is_strict_follow_condition && follow_accel < bufffer_.min_accel()*1.0){ //缓冲最小加速度
//adc跟车速度太小
return false;
}
}
//添加有效Gap
AddGapTag();
}
3.如果筛查的gap是无效的,找新的gap并update
4.做出跟车/超车的决策来追赶Gap
(3)假设找到了一个feasible gap,将检查是否允许变道,一旦change lane reference不允许,将标记为不可行驶
(4)分别在两条参考线上进行Planning规划
EM planner将S-L-T的三维运动规划问题通过S-L,S-T的解耦变成二维规划问题,核心过程如下:
DP Path - Path Decider - QP Path - DP Speed - Speed Decider - QP Speed - SpeedProfile
CalculateTotalCost()递推出每个节点的cost,依据max_acceleration_和max_deceleration_找到下一列可以达到的范围[next_lowest_row, next_highest_row]
采样点中最优的一串点:
(5)Planning规划完成后,将选择最佳参考线,同时还会对可行性做检查同时更新代价,选择代价最小的参考线
二.Lane Change Metric
C1:变道触发 | C1-1:无后车时一直不触发LC(trigger/fn) | ||
C2:变道过程 | C2-1:离后车距离较近;距离前车过近 | ||
C3:变道终止 | C3-1:变道被异常打断; | ||
C4:与其他模块相关 | C4-1:在变道终点没有触发reroute; | ||
C5:多车道场景 | C5-1:多车道变道问题 |
Xsim Metric:CollisionRisk、BrakeBasedOnFeeling、UnsuitableHarshBrake
三.Debug LaneChange
Lane Change分阶段完成
-
NO_CHANGE_LANE
-
PREPARE_CHANGE_LANE
-
IN_CHANGE_LANE
-
CHANGE_LANE_KEEP
-
CHANGE_LANE_FAILED
-
CHANGE_LANE_SUCCESS
Stage | 测试结果指标评判 |
---|---|
PREPARE_CHANGE_LANE | 1.lane change的触发时机 2.是否误触发 |
IN_CHANGE_LANE | 1.进入lane change的时机 (激进与保守) 2.变道是否有避让其他车辆 3.变道体感 4.变道效率,提交变道是否及时 |
CHANGE_LANE_FAILED | 1.触发时机 2.是否误触发 3.Path是否平滑 4.体感是否平稳 5.是否有避让车辆 |
CHANGE_LANE_KEEP | 1.状态Keep保持是否稳定 2.能否及时解除keep状态 |
obsGapTag | 1.Gap寻找是否合适 (激进与保守) |
这篇关于AutoDriver Lane Change的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!