赛事技术培训第二期——慢速车绕行
一、关于报名:
1、关于报名注意事项:双平台报名,注意两个平台报名的时候所有信息务必填写一致,团队名称,指导老师名称,指导老师电话等信息,在百度Apollo赛事官网报名的时候一定要写清楚院校,队长信息(名字,电话),否则将视为无效赛队!
2、关于修改报名信息:
组委会官网—请到赛事QQ群,找到群公告,扫描问卷星二维码,反馈信息;
百度Apollo—请在百度Apollo赛事官网后台自行修改
3、关于附件:
百度Apollo赛项无需提交附件
4、关于报名、比赛时间安排
5、关于发票:
单位名称:学校
纳税人识别号:学校
(纳税人识别号填写学校名称即可在网上或者购物软件搜到)
二、慢速车绕行场景
场景描述:
当主车前方出现其他车辆时,前车速度大于3 m/s 则跟随前车行驶,前车速度小于3m/s,通过左侧车道对前车绕行。
场景图示:
图1:慢速车跟车 图2:慢速车绕行
评判标准
前车车速高于3m/s,主车进行超车,或者低于3m/s,主车未超车,或者未通过左侧车道进行超车本场景计0分。
运行视频回放
【百度Apollo星火自动驾驶大赛城市道路预选赛——慢速车绕行】
技术详解
交通灯场景运行流程框图
一、lane follow
在Apollo的默认场景中,"lane follow"是指车辆跟随车道行驶的模式。Apollo的规划模块运行机制是一个双层状态机,每个阶段都有相应的任务。每个任务可以看作是一个决策,而在"lane follow"场景下,有许多决策需要做出。
lane follow 场景的决策器:
stage_type: LANE_FOLLOW_DEFAULT_STAGEstage_config: {stage_type: LANE_FOLLOW_DEFAULT_STAGEenabled: truetask_type: LANE_CHANGE_DECIDERtask_type: PATH_REUSE_DECIDERtask_type: PATH_LANE_BORROW_DECIDERtask_type: PATH_BOUNDS_DECIDERtask_type: PIECEWISE_JERK_PATH_OPTIMIZERtask_type: PATH_ASSESSMENT_DECIDERtask_type: PATH_DECIDERtask_type: RULE_BASED_STOP_DECIDERtask_type: SPEED_BOUNDS_PRIORI_DECIDERtask_type: SPEED_HEURISTIC_OPTIMIZERtask_type: SPEED_DECIDERtask_type: SPEED_BOUNDS_FINAL_DECIDERtask_type: PIECEWISE_JERK_SPEED_OPTIMIZER# task_type: PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZERtask_type: RSS_DECIDER}
这段配置文件是关于Apollo中"lane follow"默认场景的设置。它定义了一系列阶段和任务类型,用于实现车辆在车道中的安全行驶。这些任务包括车道变更决策、路径规划和优化、速度控制和边界设置等,以及使用规则和RSS进行安全评估。通过这些任务的执行和决策,Apollo可以在"lane follow"场景下使车辆保持在车道内,并确保行驶的安全和效率。
二、前方有障碍物
当自动驾驶车辆前方有障碍物时,首先会判断该障碍物是否为静止的障碍物。在路径决策器范围内的情况下,满足以下条件之一,路径决策器会认为该障碍物需要绕行:
障碍物不是虚拟障碍物(即真实存在的障碍物)。
障碍物没有忽略决策的标记,即障碍物具有纵向和横向决策,并且没有被忽略。
障碍物是静止的,即没有移动,或者障碍物的速度低于设定的静态障碍物速度阈值。
当满足以上条件时,路径决策器会认为该障碍物在路径决策的范围内,需要进行绕行操作。
bool IsWithinPathDeciderScopeObstacle(const Obstacle& obstacle) {// Obstacle should be non-virtual.if (obstacle.IsVirtual()) {return false;}// Obstacle should not have ignore decision.if (obstacle.HasLongitudinalDecision() && obstacle.HasLateralDecision() &&obstacle.IsIgnore()) {return false;}// Obstacle should not be moving obstacle.if (!obstacle.IsStatic() ||obstacle.speed() > FLAGS_static_obstacle_speed_threshold) {return false;}return true;}
根据题意,当自动驾驶车辆前方的障碍物速度降至3m/s时,需要进行借道绕行。我们可以根据上述代码的原理进行如下设置:
在modules/planning/common/planning_gflags.cc文件中搜索static_obstacle_speed_threshold的全局变量定义,可以找到默认值为0.5的设定,即将速度小于0.5的障碍物视为静态障碍物。
DEFINE_double(static_obstacle_speed_threshold, 0.5,"The speed threshold to decide whether an obstacle is static ""or not.");
我们可以将阈值设定为3.0,以满足题意。请将配置文件modules/planning/conf/planning.conf中的内容修改如下:
--static_obstacle_speed_threshold=3.0
通过在配置文件中添加该参数并将其设定为3.0,我们可以改变static_obstacle_speed_threshold的默认值。
这样做有两个好处:一是可以减少编译时间,二是方便找到该代码并进行修改。
通过将static_obstacle_speed_threshold设定为3.0,自动驾驶车辆将会将速度小于3.0m/s的障碍物视为静态障碍物,并进行相应的借道绕行操作。这样的设置可以满足题目要求。
三、准备绕行
当设置前方车辆速度小于3m/s后,自动驾驶车辆会进入准备绕行的阶段。在进行绕行之前,还会判断是否有足够的绕行区域。
在绕行前的判断过程中,车辆会考虑以下因素来评估绕行区域是否足够:
- 车道宽度:检查当前车道的宽度是否足够容纳车辆进行绕行操作。
- 障碍物位置:评估障碍物与车辆所在车道的相对位置,确保绕行操作不会与障碍物发生碰撞。
- 绕行路径规划:利用路径规划算法确定绕行路径,并确保路径不会与其他障碍物或交通规则发生冲突。
- 障碍物速度:考虑障碍物的速度,确保在绕行过程中障碍物不会产生突发变化,影响绕行的安全性。
综合考虑以上因素,如果判断存在足够的绕行区域,车辆将继续执行绕行操作;否则,车辆可能选择其他策略,如减速或停车等,以确保行驶安全。这样的判断机制可以保证在绕行操作前充分考虑绕行区域的可行性。
根据场景的运行情况,如果车道宽度足够但仍然无法绕行,我们可以考虑障碍物的位置是否影响了绕行路径规划。在代码中可以找到相关参数的默认值,例如obstacle_lat_buffer
,它决定了用于确定路径边界的障碍物横向缓冲区域的大小。
DEFINE_double(obstacle_lat_buffer, 0.4,
"obstacle lateral buffer (meters) for deciding path boundaries");
通过调整这个参数的值,我们可以增加或减少用于确定路径边界的障碍物横向缓冲区域的大小。默认值为0.4米,我们可以根据需要进行调整。如果障碍物的位置与路径规划发生冲突,我们可以增加这个缓冲区域的大小,以便在路径规划时更好地考虑障碍物的位置,从而找到适合的绕行路径。
例如,我们可以将这个参数增大到1.5米。请将配置文件modules/planning/conf/planning.conf
中的内容修改如下:
--obstacle_lat_buffer=1.50
这样做有两个好处:一是可以减少编译时间,二是方便找到该代码并进行修改。
通过增加障碍物横向缓冲区域的大小到1.5米,路径规划器将更加关注障碍物的位置,从而更准确地确定可行的绕行路径。这样的调整可以帮助解决因障碍物位置导致无法进行绕行的问题。通过修改配置文件中的参数,我们可以灵活调整路径规划器对障碍物位置的考虑程度,以获得更好的绕行结果。
四、绕行决策
当所有修改都完成后,我们可以让自动驾驶车辆进入绕行阶段。确保终端处于Docker环境中,然后可以使用以下编译指令:
buildtool build -p modules/planning
对代码进行编译,以确保修改后的代码被正确构建。
编译完成后,我们可以在Dreamview中观察画面。Dreamview是Apollo的可视化界面,用于监视和控制自动驾驶车辆的行为。通过Dreamview,我们可以实时查看车辆的状态、感知结果、路径规划和执行结果等。
在Dreamview中,我们可以选择对应的场景,打开相应的模块,然后观察车辆在绕行阶段的行为。我们可以注意车辆是否正确判断前方障碍物的速度和位置,并根据设置的参数进行绕行决策。
通过编译和Dreamview的观察,我们可以验证修改后的代码是否能够使自动驾驶车辆按照预期的逻辑进行绕行操作。这样的测试过程可以帮助我们验证和调优修改后的绕行逻辑。
绕行决策分析:
五、跟车决策
如果车辆速度大于3m/s或者障碍物的位置影响了绕行路径规划,或者障碍物横向缓冲区域不够大导致车辆无法进行绕行,那么车辆将进入跟车决策阶段。
在跟车决策阶段,车辆会采取跟随前方车辆的策略,以保持与前车的安全距离和速度一致。通过车辆感知系统获取前车的信息,包括位置、速度和加速度等,然后根据这些信息进行跟车决策。
跟车决策通常涉及以下方面的考虑:
- 与前车的安全距离:车辆需要保持与前车的安全距离,以避免碰撞。这个安全距离可以根据车速、反应时间和制动能力等因素来计算和调整。
- 跟车速度:车辆需要调整自身的速度,与前车保持一定的速度差,以便保持跟车的稳定性和响应性。
- 跟车策略:根据前车的行为和交通状况,选择合适的跟车策略,如保持恒定的跟车距离、根据前车的速度进行自适应调整等。
通过跟车决策,车辆可以在无法进行绕行时保持安全且合理的行驶状态,遵循前车的行驶轨迹并保持适当的距离。这样的决策策略可以在道路交通复杂或无法绕行的情况下确保车辆的安全和稳定。
绕行方案
方案一:
在绕行操作的部分,添加代码以实现向左绕行的决策。确保在绕行时车辆与左侧车道的其他车辆和障碍物保持安全距离,并遵守交通规则。为了增加绕行的成功率和安全性,可以考虑在绕行过程中增加绕行缓冲。默认情况下,不会主动选择向左绕行。