Scenic

本指南概述了如何将 Scenic 与 Carla 结合使用,通过单个场景定义生成多个不同的场景。它假设用户事先了解场景语法。如果您需要了解有关 Scenic 的更多信息,请阅读他们的 “Scenic 入门” 指南,并查看他们有关创建 静态动态 场景的教程。

在本指南结束时,您将了解:

  • 在 Carla 上运行 Scenic 脚本所需的最低要求。
  • 如何编写简单的场景定义来生成大量场景仿真。
  • 如何在 Carla 上运行 Scenic 脚本。
  • 用于在 Carla 上配置场景仿真的参数。


在你开始之前

在将 Scenic 与 Carla 结合使用之前,您需要满足以下要求:


Scenic 域

Scenic 有一个通用驾驶域,允许用户定义可以在任何驾驶仿真器上运行的场景。此外,它还有特定于每个仿真器的其他域。请在 此处 查看有关 Scenic 域的更多信息。

每个领域中特别重要的是行为和动作的定义。检查以下链接,获取有关 Scenic 驾驶域和 Carla 域的行为和操作的参考材料:


创建与 Carla 一起使用的 Scenic 场景

本节将介绍如何编写基本的场景脚本,其中领头车辆由于道路上的障碍物而突然减速。然后,本车需要突然制动以避免与前车发生碰撞。完整的脚本 以及涉及更复杂道路网络的其他示例可以在 Scenic 存储库中找到。

1. 设置地图参数并声明场景使用的模型:

  • 应将 .xodr 文件设置为 map 参数值,稍后将使用该文件生成道路网络信息。
  • 参数 carla_map 是指您想要在仿真中使用的 Carla 地图的名称。如果已定义,则 Scenic 将加载地图的所有资产(建筑物、树木等),如果未定义,则将使用 OpenDRIVE 独立模式
  • 该模型包括特定于 Carla 上运行场景的所有实用程序。这应该在您想要在 Carla 上运行的所有脚本中定义。
## SET MAP AND MODEL
param map = localPath('../../../tests/formats/opendrive/maps/CARLA/Town01.xodr')
param carla_map = 'Town01'
model scenic.simulators.carla.model

2. 定义场景中要使用的常量:

该场景涉及两辆车,领头车辆和自我车辆。我们将定义自我车辆模型、两辆车的速度、制动距离阈值以及制动量。

## CONSTANTS
EGO_MODEL = "vehicle.lincoln.mkz_2017"
EGO_SPEED = 10
EGO_BRAKING_THRESHOLD = 12

LEAD_CAR_SPEED = 10
LEADCAR_BRAKING_THRESHOLD = 10

BRAKE_ACTION = 1.0

3. 定义场景行为:

在这种情况下,我们将使用 Scenic 行为库 来指示自我车辆以预定义的速度沿着车道行驶,然后在与另一辆车相距一定距离时紧急制动。领先的车辆也会以预定的速度沿着车道行驶,并在距离任何物体一定距离内紧急制动:

## DEFINING BEHAVIORS
# EGO BEHAVIOR: Follow lane, and brake after passing a threshold distance to the leading car
behavior EgoBehavior(speed=10):
    try:
        do FollowLaneBehavior(speed)

    interrupt when withinDistanceToAnyCars(self, EGO_BRAKING_THRESHOLD):
        take SetBrakeAction(BRAKE_ACTION)

# LEAD CAR BEHAVIOR: Follow lane, and brake after passing a threshold distance to obstacle
behavior LeadingCarBehavior(speed=10):
    try: 
        do FollowLaneBehavior(speed)

    interrupt when withinDistanceToAnyObjs(self, LEADCAR_BRAKING_THRESHOLD):
        take SetBrakeAction(BRAKE_ACTION)

4. 生成路网:

Scenic 道路库 用于生成道路网络几何形状和交通信息。道路网络由 Network 类的实例表示,并由脚本开头定义的文件生成。

## DEFINING SPATIAL RELATIONS
# make sure to put '*' to uniformly randomly select from all elements of the list, 'lanes'
lane = Uniform(*network.lanes)

5. 设置场景:

我们现在将定义车辆的起始位置和物体的放置。

  • 在车道中间放置垃圾桶:
obstacle = Trash on lane.centerline
  • 将领先车辆以预定速度沿道路行驶,距离障碍物后方 50 至 30 米:
leadCar = Car following roadDirection from obstacle for Range(-50, -30),
        with behavior LeadingCarBehavior(LEAD_CAR_SPEED)
  • 将本车以预定速度沿着道路行驶,距离前车 15 到 10 米:
ego = Car following roadDirection from leadCar for Range(-15, -10),
        with blueprint EGO_MODEL,
        with behavior EgoBehavior(EGO_SPEED)
  • 要求场景发生在距路口 80 米以上的位置:
require (distance to intersection) > 80

6. 设置结束点,以便脚本知道场景何时完成:

当自我车辆的速度低于每秒 0.1 米并且距离障碍物不到 30 米时,该场景将结束。

terminate when ego.speed < 0.1 and (distance to obstacle) < 30

运行场景

要运行 Scenic 场景:

1. 启动 Carla 服务器。

2. 运行以下命令:

scenic path/to/scenic/script.scenic --simulate

将出现一个 pygame 窗口,并且场景将重复播放,每次都会在脚本中设置的限制范围内生成一个独特的场景。要停止场景生成,请在终端中按ctrl + C


附加参数

Carla 模型提供了几个全局参数,可以在使用 param 语句 或通过命令行使用 --param option 选项的场景中覆盖这些参数。

下面是 Carla 模型中的可配置参数表:

名称 描述
carla_map str 要使用的 Carla 地图的名称(例如“Town01”)。如果设置为None,Carla 将尝试使用 map 参数中定义的 .xodr 文件在 OpenDRIVE 独立模式下创建世界。
timestep float 用于仿真的时间步长(Scenic 中断 Carla 运行行为、检查需求等的频率)以秒为单位。默认值为 0.1 秒。
weather strdict 用于天气的仿真。可以是标识 Carla 天气预设之一的字符串(例如“ClearSunset”),也可以是指定所有 天气参数 的字典。默认值是所有天气预设的均匀分布。
address str 连接到 Carla 的 IP 地址。默认值为本地主机 (127.0.0.1)。
port int 连接至 Carla 的端口。默认值为 2000。
timeout float 尝试连接到 Carla 时等待的最长时间(以秒为单位)。默认值为 10。
render int 是否让 Carla 创建一个窗口,从自我客体的角度显示仿真:1是,0否。默认1
record str 如果非空,则保存用于重放仿真的 Carla 记录文件的文件夹。