Step1:场景编写
基于 OpenSCENARIO 2.0 的场景描述简短易读,且表达能力丰富,如对于一个 NPC 变道场景,其描述如下:
import basic.osc
scenario top:
path: Path
path.set_map("Town04")
path.path_min_driving_lanes(3)
ego_vehicle: Model3
npc: Rubicon
event start
event end
event left
event right
do serial:
get_ahead: parallel(duration: 15s):
ego_vehicle.drive(path) with:
speed(20kph)
lane(1, at: start)
npc.drive(path) with:
lane(right_of: ego_vehicle, at: start)
position(15m, behind: ego_vehicle, at: start)
position(20m, ahead_of: ego_vehicle, at: end)
change_lane: parallel(duration: 5s):
ego_vehicle.drive(path)
npc.drive(path) with:
change_lane(lane_changes:[1..2], side: left)
slow: parallel(duration: 20s):
ego_vehicle.drive(path)
npc.drive(path) with:
speed(20kph)
Step2:运行Carla
docker run -d --privileged --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix:rw -p "2000-2003":"2000-2003" carlasim/carla:0.9.14 ./CarlaUE4.sh -nosound
Step3:运行场景
git clone git@github.com:carla-simulator/scenario_runner.git
cd scenario_runner
python manual_control.py -a --rolename=ego_vehicle
打开另一个终端运行编写的场景文件:
python scenario_runner.py --openscenario2 srunner/examples/change_lane.osc
示例场景代码简要说明
scenario top - 场景执行入口
path: Path - 场景运行的路径
path.set_map("Town04") - 内置函数,设置地图
path.path_min_driving_lanes(3) - 内置函数,用于约束场景发生的路同一方向至少有三条车道。
ego_vehicle: Model3 - 定义主车为Model3
npc: Rubicon - 定义NPC车辆为Rubicon
# start事件和end事件分别表示某个时间段的开始和结束。left事件和right事件可以用在变道函数中。
event start
event end
event left
event right
# 场景事件可以为serial:顺序执行;parallel:并行执行;one_of:执行其中一个
# 此场景中有三个顺序事件,get_ahead, change_lane, slow, 可以自定义名称
do serial
# duration 指定此阶段时间持续15s
get_ahead: parallel(duration: 15s):
...
# 主车保持正常行驶,npc执行change_lane的变道操作。
# npc会从2车道变道到1车道,并且在5秒内完成。
change_lane: parallel(duration: 5s):
...
# 主车和npc正常行驶20秒,然后场景结束
slow: parallel(duration: 20s):
...
本文通过OpenScenario2.0场景描述和Carla运行示例,帮助您应用更先进的标准概念和自动驾驶仿真工具链,促进开发符合业务需求和复杂场景的应用。
参考链接
OpenSCENARIO V2.0.0标准发布地址:https://www.asam.net/standards/detail/openscenario/v200