●目的
○ 保障无人车的行车安全并且遵守交规
○ 为路径和速度的平滑优化提供限制信息
● 决策的输入
○ Routing信息
○ 道路结构,比如当前车道,相邻车道,汇入车道,路口等信息
○ 交通信号和标示,比如红绿灯,人行横道,Stop Sign,Keep Clear等
○ 障碍物状态信息,比如障碍物类型,大小,和速度
○ 障碍物预测信息,比如障碍物未来可能的运动轨迹
● 决策的输出
○ 路径的长度以及左右边界限制
○ 速度限制边界
○ 位置限制边界
● 没有障碍物情况下的默认行车路径
○ 参考路径需要保证连续和平滑 当前参考路径
● 参考路径也用于表达换道的需求
○ 目标参考路径(优先级高)
○ 当前参考路径(目标参考路径)
● 参考路径的一种实现方法
○ 根据Routing找到对应道路中心线
○ 对道路中心线进行平滑
● 主要作用:
处理红绿灯,Stop Sign, 人行横道等交通规则
● 输入信息:
○ 参考路径
○ 高精地图
○ 信号灯状态
● 输出:
○ 虚拟墙
首先判断是否要进行换道操作。若有许多条参考路径,且车辆未处于最高优先级上,表明车辆有换道的需求。接着判断当前道路状况是否可以换道,若可以换道,则路径决策生成一个换道边界,若不可以换道,则会生成一个道内的边界。若车辆没有换道的需求,则需要判断车辆是否需要借道避让。借道避让有两个判断条件,主车所在的车道是否有足够的宽度可以避让以及前方是否有静止的障碍物。若确认可以换道,同样会生成两个决策。
ps:在路径决策时,一般只考虑静态障碍物,对于动态障碍物,则由速度规划模块考虑。
对车辆速度限制的因素:
● 道路限速
● 路径周边行人,自行车等
● 通过人行横道时
● 减速带
● 路径上过近的车辆,较为拥挤的道路
● 借道避让时
● 换道时
● 更多…
依据场景来做决策和规划有以下两个优点,
1)场景之间互不干扰,有利于并行开发和独立调参。
2)功能之间相互解耦,有利于开发者开发自己的特有场景。
Apollo对 交 通 规 则 的 处 理 是 通 过for
循 环 来 遍 历 配 置 文 件/apollo/modules/planning/conf/traffic_rule_config.pb.txt
中设置的交通规则,处理后相关信息存入ReferenceLineInfo
中。
云实验地址——Apollo规划之交通灯场景仿真调试
系统场景: Go Straight (Intersection w/ Lights)
场景ID:Sunnyvale_3
场景描述:主车在路口红灯时直行
Dreamview 是Apollo提供的可视化交互界面,开发者可通过Dreamview对车辆硬件、各自动驾驶模块的状态进行实时监测与操作。同时提供PnC monitor、Console 等调试工具可以快速帮助开发者实现对自动驾驶开发的过程调试。
bash scripts/apollo_neo.sh bootstrap
按照Apollo规划之交通灯场景仿真调试实验的步骤进行即可。
启动docker:
sudo service docker start
启动 Apollo docker环境:
bash scripts/edu_launcher.sh start
bash scripts/edu_launcher.sh enter
启动DreamView(如果启动失败,可以尝试更改网络,用手机热点替代)
bash scripts/apollo_neo.sh bootstrap
打开Sim Control 和 PnC Monitor
选择场景
选好模块
未更改配置时启动后停止距离为1m
注意运行时Scenario History中的信息
打开Vscode
code .
建立停止决策的代码
traffic_light.cc
// build stop decision
ADEBUG << "BuildStopDecision: traffic_light["
<< traffic_light_overlap.object_id << "] start_s["
<< traffic_light_overlap.start_s << "]";
std::string virtual_obstacle_id =
TRAFFIC_LIGHT_VO_ID_PREFIX + traffic_light_overlap.object_id;
const std::vector<std::string> wait_for_obstacles;
util::BuildStopDecision(virtual_obstacle_id, traffic_light_overlap.start_s,
config_.traffic_light().stop_distance(),
StopReasonCode::STOP_REASON_SIGNAL,
wait_for_obstacles,
TrafficRuleConfig::RuleId_Name(config_.rule_id()),
frame, reference_line_info);
}
}
config: {
rule_id: TRAFFIC_LIGHT
enabled: true
traffic_light {
stop_distance: 2.1
max_stop_deceleration: 4.0
}
}
这个是人行道的修改配置
config: {
rule_id: CROSSWALK
enabled: true
crosswalk {
stop_distance: 2.1
max_stop_deceleration: 6.0
min_pass_s_distance: 1.0
max_valid_stop_distance: 3.5
expand_s_distance: 2.0
stop_strict_l_distance: 6.0
stop_loose_l_distance: 8.0
stop_timeout: 4.0
}
}