apollo_logo
11
0

交通标志场景解析

相关练习赛:

https://apollo.baidu.com/community/competition/49

赛事题目:交通标志场景

主车在交汇路口处如遇到停止标志,主车须完全停止,主车停车在停止线前2.0-2.5米处,不得超过停止线,待确定安全后方可通行。

评判标准

主车在交汇路口处如遇到停止标志,主车须完全停止,主车停车在停止线前2.0-2.5米处,不得超过停止线,待确定安全后方可通行。

操作步骤:

下载交通标志场景相关配置参数和源码

buildtool profile config init --package planning-traffic-rules-stop-sign --profile=default
buildtool profile config init --package planning-scenario-stop-sign-unprotected --profile=default
buildtool profile config init --package planning-task-lane-follow-path --profile=default
buildtool install planning-traffic-rules-stop-sign

使用配置参数

aem profile use default

仿真

  1. 选择pnc模式和scenario sim
  1. 选择场景
  1. 启动所有模块
  1. 开始仿真
  1. 查看实际停车距离

参数修改

修改停车距离

profiles/default/modules/planning/traffic_rules/stop_sign/conf/default_conf.pb.txt

#原
enabled: true
stop_distance: 1.0
#修改后
enabled: true
stop_distance: 2.50

重启planning模块,可以发现车辆停止在停止线后2.5m左右了,但是我们车辆不会向前移动

因此我们需要修改有效停车范围判定

profiles/default/modules/planning/scenarios/stop_sign_unprotected/conf/scenario_conf.pb.txt

#原
max_valid_stop_distance: 2.0
#修改后
max_valid_stop_distance: 3.0

可以发现车辆停止在停止线后2.5m左右了,且车辆可以顺利进入路口了,但又出现了新问题

进入路口后问题,车辆会卡在这里,这里是路径优化的不是很平滑导致,需要优化路径

路径优化:profiles/default/modules/planning/tasks/lane_follow_path/conf/default_conf.pb.txt

#原
l_weight: 1.0
#修
l_weight: 10.0

重启planning模块后重新仿真即可完成该任务

代码打包&代码提交

可查看该教程

https://apollo.baidu.com/community/article/1045

代码提交

https://apollo.baidu.com/community/competition/49

停车距离日志输出

下载源码

buildtool install planning-traffic-rules-stop-sign

插入日志代码代码

路径modules/planning/traffic_rules/stop_sign/stop_sign.cc

AINFO << "stop_sign_distance: "<< config_.stop_distance();

编译代码:

buildtool build -p modules/planning/

其他插件代码可以访问如下连接

https://apollo.baidu.com/docs/apollo/latest/md_collection_2planning_2README__cn.html

标志场景处理技术文档

整体流程图

一、场景概述

场景定义

主车在行驶中检测到停止标志时,需根据交通规则执行完整停车流程。场景处理分为两个核心模块:

  • StopSign:交通规则判断模块
  • StopSignUnprotectedScenario:无保护路口场景执行模块

处理流程

完整处理流程包含4个阶段:

PRE_STOP → STOP → CREEP → INTERSECTION_CRUISE

核心参数速查表

交通规则配置(StopSignConfig)

参数

作用阶段

实际影响

stop_distance

PRE_STOP阶段

车辆到停止线的距离


场景配置(ScenarioStopSignUnprotectedConfig)

参数

作用阶段

实际影响

start_stop_sign_scenario_distance

场景触发

进入该场景的距离

max_valid_stop_distance

PRE_STOP阶段

有效停车范围判定

stop_duration_sec

STOP阶段

最低停车持续时间

stop_timeout_sec

STOP阶段

最大等待时间

creep_timeout_sec

CREEP阶段

最大缓行时间


配置参数关联流程图

二、核心插件解析

2.1 StopSign 交通规则模块

2.1.1 代码结构

class StopSign : public TrafficRule {
public:
bool Init(...) override;
Status ApplyRule(...) override;
private:
void MakeDecisions(...);
StopSignConfig config_;
};

2.1.2 关键逻辑

  1. 触发条件判断:
const std::vector<PathOverlap>& stop_sign_overlaps =
reference_line->map_path().stop_sign_overlaps();
  1. 决策生成逻辑:
// 关键代码段:检测停止标志
const std::vector<PathOverlap>& stop_sign_overlaps =
reference_line_info->reference_line().map_path().stop_sign_overlaps();
for (const auto& stop_sign_overlap : stop_sign_overlaps) {
if (stop_sign_overlap.end_s <= adc_back_edge_s) continue;
// 创建虚拟障碍物
util::BuildStopDecision(
virtual_obstacle_id,
stop_sign_overlap.start_s,
config_.stop_distance(), // 配置参数
StopReasonCode::STOP_REASON_STOP_SIGN,
wait_for_obstacle_ids,
Getname(),
frame,
reference_line_info);
}
  1. 状态管理:
// 使用PlanningContext保持场景状态
auto& stop_sign_status =
injector_->planning_context()->mutable_planning_status()->mutable_stop_sign();

2.2 StopSignUnprotectedScenario 场景插件

2.2.1 阶段状态机

阶段

类名

行为描述

PRE_STOP

StopSignUnprotectedStagePreStop

减速至停止线前

STOP

StopSignUnprotectedStageStop

完全停止并观察

CREEP

StopSignUnprotectedStageCreep

低速接近路口

INTERSECTION_CRUISE

StopSignUnprotectedStageIntersectionCruise

安全通过路口


2.2.2 状态转换条件

PLANTUML
[*] --> PRE_STOP: 检测到停止标志
PRE_STOP --> STOP: 到达停止距离
STOP --> CREEP: 完成3秒停车+环境安全
CREEP --> INTERSECTION_CRUISE: 进入路口区域
INTERSECTION_CRUISE --> [*]: 完全通过路口

三、协同工作机制

3.1 模块交互流程

TEXT
[感知层]检测停止标志
↓
[StopSign]生成虚拟障碍物/停车决策
↓
[场景管理器]激活StopSignUnprotectedScenario
↓
[阶段控制器]执行各阶段行为

原创声明,本文由作者授权发布于Apollo开发者社区,未经许可,不得转载。
发表评论已发表 0 条评论
登录后可评论,请前往 登录
暂无评论~快去发表自己的独特见解吧!
目录
相关练习赛:
操作步骤:
标志场景处理技术文档
整体流程图
一、场景概述
二、核心插件解析
三、协同工作机制