星火自动驾驶大赛赛事集锦--人行道通行场景
相关练习赛:
https://apollo.baidu.com/community/competition/29
赛事题目:人行道避让
主车向前行驶, 前方遇到有人通过人行道, 主车需要停止在人行道前2m~2.5m内停车,待行人完全通过马路后才能继续行驶。
场景图示:
评判标准
主车未停止在人行道前2~2.5m内, 本场景分扣20分, 若未避让行人或超出停止线停车, 本场景计0分
实验步骤:
启动dreamview并观察默认代码下车辆通过施工区域的仿真效果。
(1)在终端中,执行DreamView启动指令,执行成功后,打开浏览器输入(http://localhost:8888/)进入dremview中。
aem bootstrap start --plus
当出现如下,即表示dreamview启动成功了。
(2)左侧导航栏打开Mode Setting面板,模式选择PnC Mode,操作选择Scenario_sim,进入仿真模式。
2、人行道(crosswalk)配置实践实验流程:
人行道(crosswalk)配置参数同步
输入人行道配置参数同步指令,系统将自动将人行道配置参数复制到profile的default目录中,然后就可以在profile目录上轻松修改配置参数。
buildtool profile config init --package planning-traffic-rules-crosswalk --profile=default
使用default目录这份配置
# 使用名字叫default的这份配置aem profile use default
查看profile插件目录结构:
tree profiles/default/modules/planning/traffic_rules/crosswalk/
目录结构:
profiles/default/modules/planning/traffic_rules/crosswalk/`-- conf`-- default_conf.pb.txt
人行道(crosswalk)配置实践:
选择人行道通行场景:
原始配置参数仿真:
修改人行道(crosswalk)配置参数:
在工作apollo_workspace工作目录找到profiles/default/modules/planning/traffic_rules/crosswalk/conf/default_conf.pb.txt配置文件,调整停止距离配置参数和停止超时实践,达到我们期望避让行人效果。
stop_distance: 2.0 #不同配置参数调整的距离不一样stop_strict_l_distance: 8.0stop_loose_l_distance: 8.0stop_timeout: 50.0
修改之后保存代码后进行仿真。
修改之后保存代码后进行仿真。
(2)修改好代码参数后,保存这个文件,在Module Controller中重启planning模块(必须步骤)
(3)重新选择人行道通行场景,观察调整前有何变化
技术详解
人行横到场景运行流程框图
场景代码解读:
人行道配置文件:
该配置用于定义人行横道交通规则的参数,包括停车距离、减速度、通过距离等。这些参数用于判断在人行横道上是否需要停车以及停车的具体条件。
执行下述命令,在profile文件夹生成人行道配置参数并使用。
buildtool profile config init --package planning-traffic-rules-crosswalk --profile=default && aem profile use default
stop_distance: 1.0max_stop_deceleration: 4.0min_pass_s_distance: 1.0expand_s_distance: 2.0stop_strict_l_distance: 4.0stop_loose_l_distance: 5.0stop_timeout: 10.0
一、是否有行人通过人行道:
代码段用于检查障碍物是否在道路上并判断是否需要停车。首先,通过调用reference_line.IsOnRoad(obstacle.PerceptionSLBoundary())来判断障碍物是否在道路上。如果障碍物在道路上(is_on_road为true),则进一步检查障碍物的SL坐标中的s值(obstacle_sl_point.s())是否大于车辆行驶结束边界的s值(adc_end_edge_s)。如果是,则判定需要停车(stop设为true),否则不需要停车。
const bool is_on_road =reference_line.IsOnRoad(obstacle.PerceptionSLBoundary());if (is_on_road) {if (obstacle_sl_point.s() > adc_end_edge_s) {stop = true;}
当我们的行人不在人行道时,STOP 消失,主车通过人形道
二、构建crosswalk的STOP墙:
此函数,可以根据人行横道的位置和配置的停止距离,生成停车决策,并将其应用于规划框架中的参考线信息。
util::BuildStopDecision(virtual_obstacle_id, crosswalk_overlap->start_s,util::BuildStopDecision(virtual_obstacle_id, crosswalk_overlap->start_s,//人行道停止距离配置文件config_.stop_distance(),//停止原因:人行道StopReasonCode::STOP_REASON_CROSSWALK,crosswalk_to_stop.second, Getname(), frame, reference_line_info);
三、主车停止时长:
如果障碍物的速度小于等于预设的停止速度(kMaxStopSpeed),则判断为需要停车。代码首先检查是否已经记录了该障碍物的停车时间戳,如果没有,则添加当前时间戳。如果已经存在停车时间戳,则计算当前时间与之前记录的时间戳之间的停车时间。如果停车时间超过了配置文件中设置的停止超时时间(config_.crosswalk().stop_timeout()),则将停车状态设为false,即车辆启动。
if (obstacle_speed <= kMaxStopSpeed) {//当速度小于默认值的停止速度时时判为STOPif (crosswalk_stop_timer[crosswalk_id].count(obstacle_id) < 1) {// add timestampADEBUG << "add timestamp: obstacle_id[" << obstacle_id<< "] timestamp[" << Clock::NowInSeconds() << "]";crosswalk_stop_timer[crosswalk_id].insert({obstacle_id, Clock::NowInSeconds()});} else {double stop_time = Clock::NowInSeconds() -crosswalk_stop_timer[crosswalk_id][obstacle_id];ADEBUG << "stop_time: obstacle_id[" << obstacle_id << "] stop_time["<< stop_time << "]";//当停止时间大于配置文件的停止超时时,车辆启动if (stop_time >= config_.stop_timeout()) {stop = false;}}}
实现场景代码(修改参数的部分):
停止距离部分
我们仅仅需要将配置文件CROSSWALK的stop_distance值改为2.0-2.5即可。因为存在误差值,尽量取中间值。
stop_distance: 2.0 #不同配置参数调整的距离不一样stop_strict_l_distance: 8.0stop_loose_l_distance: 8.0stop_timeout: 50.0
不避让行人解决方式:
请完成Apollo开发平台官方,为参赛选手提供的备赛课程,通过备赛课程可以快速掌握Apollo的使用技巧,以及如何去进行练习赛,学习进度达到50%以上,并在练习赛提交任务中有分数(不为0分),可解锁官方提供的备赛进阶课程内容,助力参赛选手获得高分。
练习赛链接:【https://apollo.baidu.com/community/competition/29】
备赛课程链接:【https://apollo.baidu.com/community/online-course/814】
进阶课程链接:【暂未公布】
【注】赛事组委会工作人员会结合赛事任务完成情况,每日把完成任务者加入备赛进阶课程中,如想获取进阶课程内容,请快快完成学习任务吧~