和 SUMO 进行联合模拟

Carla 与 SUMO 开发了联合模拟功能。这允许随意分配任务,并利用每个模拟的功能来支持用户。


必备条件

首先,需要 安装 SUMO 才能运行联合模拟。建议从源代码构建而不是简单安装,因为有新功能和修复可以改进协同模拟。

完成后,设置 SUMO 环境变量。

echo "export SUMO_HOME=/usr/share/sumo" >> ~/.bashrc && source ~/.bashrc

SUMO 已准备好运行联合模拟。 Co-Simulation/Sumo/examples 中有一些 Town01, Town04Town05 的示例。这些文件描述了模拟的配置(例如网络、路线、车辆类型...)。使用其中之一来测试联合模拟。该脚本有不同的选项,下面 将详细介绍。现在,让我们为 Town04 运行一个简单的示例。

使用 Town04 运行 Carla 模拟。

cd ~/carla
./CarlaUE4.sh
cd PythonAPI/util
python3 config.py --map Town04

然后,运行 SUMO 联合模拟示例。

cd ~/carla/Co-Simulation/Sumo
python3 run_synchronization.py examples/Town04.sumocfg  --sumo-gui

笔记

运行时候可能报错:module 'traci' has no attribute 'sumolib',是因为sumolib是独立的包,不在traci里面,需要把carla/Co-Simulation/Sumo/sumo_integration/sumo_simulation.py的304行的这一句代sumo_net = traci.sumolib.net.readNet(net_file)码改成sumo_net = sumolib.net.readNet(net_file)


运行自定义联合模拟

创建 Carla vtypes

使用脚本 Co-Simulation/Sumo/util/create_sumo_vtypes.py 用户可以基于 Carla 蓝图库创建 vtypes,相当于 Carla 蓝图。

  • --carla-host (默认值:127.0.0.1) — Carla 主机服务器的 IP。
  • --carla-port (默认值:2000) — 要侦听的 TCP 端口。
  • --output-file (默认值:carlavtypes.rou.xml) — 生成的包含 vtypes 的文件。

该脚本使用 data/vtypes.json 存储的信息来创建 SUMO vtypes。这些可以通过编辑所述文件来修改。

笔记

必须运行 Carla 模拟才能执行该脚本。

创建 SUMO 网络

创建与 Carla 同步的 SUMO 网络推荐方法是使用脚本 Co-Simulation/Sumo/util/netconvert_carla.py. 这就要利用 SUMO 提供的 netconvert工具了。为了运行该脚本,需要一些参数。

  • xodr_file — OpenDRIVE 文件 .xodr
  • --output' (默认值:net.net.xml) — 输出文件 .net.xml
  • --guess-tls (默认值:false) — SUMO 只能为道路中的特定车道设置交通灯,但 Carla 不能。如果设置为 True,SUMO 将不会区分特定车道的交通信号灯,并且这些信号灯将与 Carla 同步。

该脚本的输出将是.net.xml可以使用 NETEDIT 进行编辑的。使用它来编辑路线、添加需求,并最终准备一个可以保存为 .sumocfg

在此过程中提供的示例可能会有所帮助。看一眼Co-Simulation/Sumo/examples。对于每个example.sumocfg文件,都有多个同名的相关文件。所有这些都包含一个联合模拟示例。

运行同步

一旦模拟准备就绪并保存为.sumocfg,就可以运行了。有一些可选参数可以更改协同模拟的设置。

  • sumo_cfg_file — SUMO 配置文件。
  • --carla-host (默认值:127.0.0.1) — Carla 主机服务器的 IP
  • --carla-port (默认值:2000) — 要侦听的 TCP 端口
  • --sumo-host (默认值:127.0.0.1) — SUMO 主机服务器的 IP。
  • --sumo-port (默认值:8813) — 要侦听的 TCP 端口。
  • --sumo-gui — 打开一个窗口以可视化 SUMO 的 GUI 版本。
  • --step-length (默认值:0.05s) — 设置模拟时间步长的固定增量秒。
  • --sync-vehicle-lights (默认值:False) — 同步车灯。
  • --sync-vehicle-color (默认值:False) — 同步车辆颜色。
  • --sync-vehicle-all (默认值:False) — 同步所有车辆属性。
  • --tls-manager (默认值:none) — 选择哪个模拟器应管理交通灯。另一个将相应地更新这些内容。选项有 carla, sumonone。如果选择 none ,交通信号灯将不同步。每辆车只会遵守生成它的模拟器中的交通灯。
python3 run_synchronization.py <SUMOCFG FILE> --tls-manager carla --sumo-gui

笔记

要停止联合模拟,请在运行脚本的终端按 Ctrl+C


由 SUMO 控制的 NPC 生成

与 SUMO 的联合模拟带来了一项附加功能。车辆可以通过 SUMO 在 Carla 中生成,并由后者进行管理,就像交通管理器一样。

脚本 spawn_npc_sumo.py 几乎等同于已知的 generate_traffic.py。该脚本根据 Carla 中的活动城镇自动在临时文件夹中生成 SUMO 网络。该脚本将创建随机路线并让车辆四处漫游。

当脚本运行同步仿并在其中生成车辆时,参数与run_synchronization.pygenerate_traffic.py 中出现的参数相同。

  • --host (默认值:127.0.0.1) — 主机服务器的 IP。
  • --port (default: 2000) — 要侦听的 TCP 端口。
  • -n,--number-of-vehicles (默认值:10) — 生成的车辆数量。
  • --safe — 避免生成车辆容易发生事故。
  • --filterv (默认值:"vehicle.")* — 过滤生成的车辆的蓝图。
  • --sumo-gui — 打开一个窗口来可视化 SUMO。
  • --step-length (默认值:0.05s) — 设置模拟时间步长的固定增量秒。
  • --sync-vehicle-lights (默认值:False) — 同步车灯状态。
  • --sync-vehicle-color (默认值:False) — 同步车辆颜色。
  • --sync-vehicle-all (默认值: False) — 同步所有车辆属性。
  • --tls-manager (默认值: none) — 选择哪个模拟器来更改交通灯的状态。另一个将相应地更新它们。如果是none,交通信号灯将不同步。
# 生成 10 辆车,由 SUMO 管理,而不是交通管理器
python3 spawn_sumo_npc.py -n 10 --tls-manager carla --sumo-gui

SUMO TraCI接口文档


到目前为止,这就是与 Carla 进行 SUMO 联合模拟的全部内容。

打开 Carla 并闲逛一会儿。如果有任何疑问,请随时在论坛中发布。