文章目录
- 前言
- 1. Apollo决策技术详解
- 1.1 Planing模块运行机制
- 1.2 Apollo决策功能的设计与实现
- 1.2.1参考路径 Reference Line
- 1.2.2 交规决策 Traffic rule process
- 1.2.3 路径决策 Path decider
- 1.2.4 速度决策 Speed decider
- 1.2.5 Planing模块运行流程
- 1.2.6 场景 Scenarios
- 2. 交规决策场景实现机制
- 2.1 交规的配置
- 2.2 交规决策的运行流程
- 2.2.1 Traffic Light场景的进入
- 2.2.2 Traffic Light场景的stage
- 2.2.3 APPROACH阶段
- 2.2.4 CRUISE阶段
- 2.2.5 交通灯通过检测
- 2.2.6 停止墙生成
- 3. 交通灯场景仿真实现
- 3.1 云实验
- 3.1.1 创建场景
- 3.1.2 启动dreamview
- 3.1.3 场景同步
- 3.1.4 选择需要调试场景
- 3.1.5 实验流程
- 3.2 WSL2下Apollo-EDU-pre运行
前言
Apollo星火计划课程链接如下
星火计划2.0基础课:https://apollo.baidu.com/community/online-course/2
星火计划2.0专项课:https://apollo.baidu.com/community/online-course/12
1. Apollo决策技术详解
1.1 Planing模块运行机制
星火计划学习笔记——第七讲自动驾驶规划技术原理1
1.2 Apollo决策功能的设计与实现
●目的
○ 保障无人车的行车安全并且遵守交规
○ 为路径和速度的平滑优化提供限制信息
● 决策的输入
○ Routing信息
○ 道路结构,比如当前车道,相邻车道,汇入车道,路口等信息
○ 交通信号和标示,比如红绿灯,人行横道,Stop Sign,Keep Clear等
○ 障碍物状态信息,比如障碍物类型,大小,和速度
○ 障碍物预测信息,比如障碍物未来可能的运动轨迹
● 决策的输出
○ 路径的长度以及左右边界限制
○ 速度限制边界
○ 位置限制边界
Apollo 决策的5个步骤
1.2.1参考路径 Reference Line
● 没有障碍物情况下的默认行车路径
○ 参考路径需要保证连续和平滑 当前参考路径
● 参考路径也用于表达换道的需求
○ 目标参考路径(优先级高)
○ 当前参考路径(目标参考路径)
● 参考路径的一种实现方法
○ 根据Routing找到对应道路中心线
○ 对道路中心线进行平滑
路径边界
1.2.2 交规决策 Traffic rule process
● 主要作用:
处理红绿灯,Stop Sign, 人行横道等交通规则
● 输入信息:
○ 参考路径
○ 高精地图
○ 信号灯状态
● 输出:
○ 虚拟墙
判断是否需要生成停止墙。
1.2.3 路径决策 Path decider
首先判断是否要进行换道操作。若有许多条参考路径,且车辆未处于最高优先级上,表明车辆有换道的需求。接着判断当前道路状况是否可以换道,若可以换道,则路径决策生成一个换道边界,若不可以换道,则会生成一个道内的边界。若车辆没有换道的需求,则需要判断车辆是否需要借道避让。借道避让有两个判断条件,主车所在的车道是否有足够的宽度可以避让以及前方是否有静止的障碍物。若确认可以换道,同样会生成两个决策。
ps:在路径决策时,一般只考虑静态障碍物,对于动态障碍物,则由速度规划模块考虑。
1.2.4 速度决策 Speed decider
对车辆速度限制的因素:
● 道路限速
● 路径周边行人,自行车等
● 通过人行横道时
● 减速带
● 路径上过近的车辆,较为拥挤的道路
● 借道避让时
● 换道时
● 更多…
速度决策的流程
在车辆行驶过程中,需要对车辆的速度进行许多限制。在得到路径边界之后,通过路径规划器,得到平滑的路径曲线,之后再对曲线进行路径决策。
速度决策的流程:对当前路径产生一个或多个速度边界,再将其集成一个速度边界的集合,生成一个ST图。用ST图得到时间上的位置边界。利用速度边界和位置边界可以进行速度决策,从而生成轨迹。
1.2.5 Planing模块运行流程
1.2.6 场景 Scenarios
依据场景来做决策和规划有以下两个优点,
1)场景之间互不干扰,有利于并行开发和独立调参。
2)功能之间相互解耦,有利于开发者开发自己的特有场景。
2. 交规决策场景实现机制
2.1 交规的配置
Apollo对 交 通 规 则 的 处 理 是 通 过for
循 环 来 遍 历 配 置 文 件/apollo/modules/planning/conf/traffic_rule_config.pb.txt
中设置的交通规则,处理后相关信息存入ReferenceLineInfo
中。
2.2 交规决策的运行流程
依托输入信息来判断选择哪个场景
交通规则的运行流程
2.2.1 Traffic Light场景的进入
Traffic Light场景的进入这部分主要有两个部分:第一个部分通过Overlap重叠判断是否进入交叉路口,第二个部分通过由高精地图提供的车道信息以及交通信号等情况进入不同的场景,选择是有保护的场景还是无保护的场景。
2.2.2 Traffic Light场景的stage
2.2.3 APPROACH阶段
2.2.4 CRUISE阶段
CRUISE阶段主要用以判断,当CRUISE阶段结束时,就会恢复到lanefollow阶段
2.2.5 交通灯通过检测
2.2.6 停止墙生成
3. 交通灯场景仿真实现
3.1 云实验
云实验地址——Apollo规划之交通灯场景仿真调试
3.1.1 创建场景
系统场景: Go Straight (Intersection w/ Lights)
场景ID:Sunnyvale_3
场景描述:主车在路口红灯时直行
3.1.2 启动dreamview
Dreamview 是Apollo提供的可视化交互界面,开发者可通过Dreamview对车辆硬件、各自动驾驶模块的状态进行实时监测与操作。同时提供PnC monitor、Console 等调试工具可以快速帮助开发者实现对自动驾驶开发的过程调试。
bash scripts/apollo_neo.sh bootstrap
3.1.3 场景同步
3.1.4 选择需要调试场景
3.1.5 实验流程
按照Apollo规划之交通灯场景仿真调试实验的步骤进行即可。
3.2 WSL2下Apollo-EDU-pre运行
启动docker:
sudo service docker start
启动 Apollo docker环境:
bash scripts/edu_launcher.sh start
输入以下命令进入 Apollo:
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 decisionADEBUG << "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);}}
停止距离的配置文件
停止距离更改为2.1m
config: {rule_id: TRAFFIC_LIGHTenabled: truetraffic_light {stop_distance: 2.1max_stop_deceleration: 4.0}}
这个是人行道的修改配置
config: {rule_id: CROSSWALKenabled: truecrosswalk {stop_distance: 2.1max_stop_deceleration: 6.0min_pass_s_distance: 1.0max_valid_stop_distance: 3.5expand_s_distance: 2.0stop_strict_l_distance: 6.0stop_loose_l_distance: 8.0stop_timeout: 4.0}}