Apollo -- Planning (二) 框架设计

1、planning框架介绍

总结起来就是

通过scenario update然后执行stage下的task,task全部执行完就算一个scenario的结束,同时会有个线程去执行生成轨迹参考线,然后task将障碍物、速度等信息往轨迹参考线上挂,最后通过ADCTrajectry发送给控制端。

同时会做强化学习的在线训练以及离线数据缓存

2、支持场景

目前planning支持以下几种场景:

  • apollo::planning::LaneFollowScenario: 车道保持场景,是默认的自动驾驶场景,在这个场景中车辆沿着路由线路行驶,遇到障碍物根据情况在当前车道线内绕行,或者借道到相邻的车道绕行,并根据routing中的路线信息换道行驶。对道路上的交通标志,如停止,让行标志,人行道或减速带等,根据交通规则进行减速或停止让行。
  • apollo::planning::PullOverScenario: 靠边停车场景,如果参数配置 enable_pull_over_at_destination 设置为 true, 当车辆到达终点附近时,将自动切入 PullOverScenario 并完成靠边停车。
  • apollo::planning::BareIntersectionUnprotectedScenario: 无保护交通路口场景,在交通路口既没有停止标志,也没有交通灯,车辆在路口前一段距离范围内切换到此场景。
  • apollo::planning::TrafficLightProtectedScenario: 有保护的交通灯路口场景,在这种路口对前行,左转,右转都有明确的交通灯指示。
  • apollo::planning::TrafficLightUnprotectedLeftTurnScenario: 无保护的交通灯左转,这种场景下,车辆在交通灯路口左转时,仍然会有对向车辆通过路口,这时车辆需要让行。所以TrafficLightUnprotectedLeftTurnScenario场景设计思路与有保护交通灯的区别是,在通过交通路口时,需要增加减速慢行阶段(Creep),以便观察对向车辆,并根据情况让行。
  • apollo::planning::TrafficLightUnprotectedRightTurnScenario: 无保护的交通灯右转,这种场景下,车辆在交通灯右转时,可能会有对向车辆通过,这时车辆需要缓行,并观察红绿灯情况,在安全的前提下右转。
  • apollo::planning::StopSignUnprotectedScenario: 无保护停止标志路口场景,这种场景下的路口,只有一个双向停止标志,车辆在通过路口前,需要观察路口来往车辆,在路口通行车辆密度较小时才通过路口。
  • apollo::planning::YieldSignScenario: 路口有让行标志的场景,在车辆遇到让行标志时,对向有车辆时,要先让对向车辆先行。
  • apollo::planning::ValetParkingScenario: 代客泊车入库的场景,当planning的输入命令RoutingResponse中包含了parking_id的信息时,即是指定将车辆泊入地图中parking_id对应的停车位中。
  • apollo::planning::EmergencyPullOverScenario: 紧急停车场景,车辆在行驶过程中如果收到PadMessage命令“PULL_OVER”,车辆就近找到合适的位置在当前车道内停车,相比于直接停止,这样保证了行驶过程中的停车安全。
  • apollo::planning::ParkAndGoScenario: 车辆辆靠边停车后,从当前位置起步向指定的下一个目标行驶的命令,这种场景适用于巴士接驳的情况。场景中使用了Open Space的算法,保证车辆能够安全从指定位置泊出。

详细功能列表如下:

功能名称功能描述功能相关代码包功能图示
lane follow车辆沿指令中的路由线路行驶,从地图中查询路由中的车道信息,规划沿车道线行驶的轨迹。LaneFollowScenario
LaneFollowPath

nudge如果道路前方有静止或低速障碍物占据车道,但当前车道内还有足够空间,车辆可以在当前车道内绕过障碍物行驶。LaneFollowScenario
LaneFollowPath

image (10).png

lane change车辆沿RoutingResponse中的路由线路行驶的过程中,从一个车道切换到相邻车道。LaneFollowScenario
LaneChangePath

lane borrow如果道路前方有障碍物长时间停留阻塞道路,车辆无法通过在当前车道内绕过,需要往相邻车道借道,绕过当前障碍物。当车辆经过障碍物之后,车辆会立即回到原车道行驶。LaneFollowScenario
LaneBorrowPath

image (12).png

pull over当车辆接近终点时,可以通过配置选择是否在终点处靠边停车。如果使能终点靠边停车,车辆在终点附近查找一个可以停车的位置,并将车辆停在这个位置上。如果这个位置前后有其他障碍物,车辆可以通过 OpenSpace 的泊车算法,将车辆停在这个位置。PullOverScenario
PullOverPath

image.png

park and go如果车辆停车位置不在道路上,再次启动的时候,车辆会先从当前位置使用OpenSpace规划算法(如有必要)先行驶到车道线上,然后再正常沿道路行驶。ParkAndGoScenario

image (1).png

crosswalk当车辆行驶到人行道前时,如果有行人通过,车辆会停车等待行人通过后再通行。Crosswalk

image (2).png

bare intersection车辆行驶到无交通灯和停止标志的交通路口,因为对向车辆没有明确通行指示,所以需要车辆根据路口交通情况决定是否通行。BareIntersectionUnprotectedScenario

traffic light protected/unprotected车辆经过有红绿灯的交通灯路口时,如果交通灯有左转/右转通行箭头,车辆在红灯亮起时停止,绿灯亮起时通行;如果交通灯不是箭头指示灯,车辆在通过路口时可能还有对向车辆经过,这时就需要在通过路口前减速慢行,没有冲突时再通过路口。TrafficLight
TrafficLightProtectedScenario
TrafficLightUnprotectedLeftTurnScenario
TrafficLightUnprotectedRightTurnScenario

stop sign当车辆前方有停止标志时,先停车观察,没有其他行人或车辆冲突时再通行。StopSign
StopSignUnprotectedScenario

image (5).png

yield sign当车辆在没有交通灯的路口,有让行标志时,优先让其他对向车辆通行后自车再通行。YieldSign
YieldSignScenario

keep clear area车辆经过Keep Clear Area区域时,不能在这个区域内停车。KeepClear

image (7).png

rerouting如果车辆在道路上被阻塞超出一段时间后,planning发出重新路由的请求以便脱困。Rerouting

image (33).png

valet parking给定地图上某一个停车位的id,车辆从当前位置导航到停车位,并泊车入库。ValetParkingScenario

image (32).png

emergency pull over在车辆行驶过程中,可以接收外部命令紧急靠边停车。EmergencyPullOverScenario

image (9).png

3、规划器

planning 支持两种规划模式:OnLanePlanning 和 NaviPlanning,前者是基于高精地图的轨迹规划,也是默认的规划模式;后者是相对地图导航规划,主要用于交通规则较简单的高速公路。

每种规划模式可以通过 PlannerDispatcher 选择使用的 Planner ,目前 planning 模块中共有 4 种 Planner:

  • apollo::planning::PublicRoadPlanner: 于高精地图的规划器;
  • apollo::planning::NaviPlanner: 于实时相对地图的规划器;
  • apollo::planning::LatticePlanner: 于网格算法的规划器
  • apollo::planning::RTKReplayPlanner: 于录制轨迹的规划器

planning模块中有两个主要的线程,一个是根据输入环境和车辆信息,进行轨迹规划的主流程;另外一个是根据地图和输入的全局路线,生成参考线信息,这个线程是周期运行的线程,主流程规划都是在它生成的参考线基础上进行的。

在planning主流程中,默认使用OnLanePlanning->PublicRoadPlanner进行轨迹规划,在PublicRoadPlanner中,根据周围环境信息,切换到不同的场景中,规划生成轨迹并发送给control模块。

4、输入输出

输入

Planning 模块需要获取外部环境信息,车辆自身信息进行轨迹规划,以下是 planning 的外部输入信息:

信息分类信息说明数据类型topic name
外部环境信息障碍物预测信息perception 模块输出的障碍物信息,经过 prediction 处理后增添速度,加速度,和预测轨迹等信息。prediction::PredictionObstacles/apollo/prediction
交通灯感知信息perception 模块输出的交通灯感知信息,包含交通灯亮起的颜色,id 等信息。perception::TrafficLight/apollo/perception/traffic_light
车辆信息车辆定位localization 输出的车辆位姿信息。localization::LocalizationEstimate/apollo/localization/pose
底盘状态canbus 模块输出的车辆底盘信息,包含底盘速度,油门,刹车,档位,灯光等状态。canbus::Chassis/apollo/canbus/chassis

此外,planning 模块还需要外部输入的导航命令信息,用户首先向 external_command 发送导航命令请求,external_command 再将这些命令进行处理后转发给 planning 模块。下面介绍用户可以发送的几种导航命令:

信息分类信息说明数据类型topic name

外部命令
沿车道线行驶命令基于高精地图导航的命令,给定终点的位置或朝向,从当前车辆位置导航到目标终点位置。external_command::LaneFollowCommand/apollo/external_command/lane_follow
泊车命令从当前位置导航泊车到停车位上。external_command::ValetParkingCommand/apollo/external_command/valet_parking
流程操作命令HMI发送的流程操作命令,包括紧急靠边停车(PULL_OVER),紧急停车(STOP),继续行驶(CRUISE)等命令,目前只对PULL_OVER和STOP命令响应。planning::ActionCommand/apollo/external_command/action

输出

信息说明数据类型topic name
规划轨迹输出规划轨迹,包含轨迹点,速度和时间等信息。planning::ADCTrajectory/apollo/planning
导航状态导航命令的执行状态。external_command::CommandStatus/apollo/planning/command_status
重新路由的请求在道路被阻塞,换道失败超时时,发送重新路由的申请。external_command::LaneFollowCommand/apollo/external_command/lane_follow

具体后面写走读代码再说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值