作者 | 李慢慢1990  编辑 | 车路漫漫

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【仿真测试】技术交流群

本文只做学术分享,如有侵权,联系删文

1、前言

Carla是一个开放源代码的自动驾驶仿真平台,用于研究和开发自动驾驶技术。它提供了一个完整的仿真环境,包括3D地图、车辆模型、车辆控制器、传感器模型等,为自动驾驶研究提供了一个完整的环境。

在Carla中运行仿真,需要其自定义格式的静态地图(比如Town05.pcd),和在该地图上通过API控制NPC行为形成的动态场景。这种场景配置方式和目前主流的OpenX系列的标准(OpenDRIVE格式静态地图文件,OpenSCENARIO格式的动态场景文件)有很大不同,导致主流的场景库很难切换到Carla中使用。进而无法有效进行大规模批量测试,发挥不出仿真测试的威力。因此,打破Carla和OpenX系列标准之间的壁垒,或将使Carla迎来新生。

上一期《Carla中如何加载OpenDrive地图?》研究了Carla中使用OpenDRIVE格式的地图,有了一定的效果。

本期继续研究Carla中如何使用OpenSCENARIO格式的动态场景。这种格式的场景文件需要特定的解析工具,才能将其中xml格式的标签式描述文本转化成仿真软件中的车辆行为,主流的商用仿真软件如VTD、PreScan等均有内置的解析模块,但是Carla中没有,于是Carla官方后来推出了一个叫做Scenario Runner的工具,可以解析该格式,并将解析后的内容发送到Carla的Server端进行渲染。所以,这个Scenario Runner是Carla运行Open SCENARIO格式的场景文件的关键。

2、官方介绍


Scenario Runner的官方介绍如下:

https://carla-scenariorunner.readthedocs.io/en/latest/

81fc441b1902747f6d46825190471eba.png

翻译一下:ScenarioRunner 是一个允许为 CARLA 模拟器定义和执行交通场景的模块。场景可以通过 Python 接口或OpenSCENARIO 标准来定义。通过轻松创建复杂的交通场景和路线供代理来导航,ScenarioRunner 还可用于”AD代理“的评估。

3、本地试验环境


接下来,本文按照官方的说明文档,尝试下ScenarioRunner的运行效果。

先简单说下我个人电脑使用环境吧。

操作系统:Windows 10

Python版本:3.7.9

Carla版本:0.9.13(预编译版)

ScenarioRunner版本:0.9.13

Carla的安装十分简单,安装包是从官方直接下载的预编译版的压缩包,解压即可使用。

99bc21baaeb0ab4651be4738687b1f2d.png

ScenarioRunner的安装、环境配置、和使用都是严格参考官方教程:

https://carla-scenariorunner.readthedocs.io/en/latest/

4、软件下载

官方的“Get ScenarioRunner”里说的还是很清楚的,您要下载的ScenarioRunner和您本地安装的Carla版本一定要匹配,比如我本地是Carla 0.9.13, 那么我也需要下载ScenarioRunner 0.9.13。

747c171f4de6b7bfa4bd16e92a513ea8.png

下载后解压的目录如下:

ca60f818bcf8b15c021ededd99d200ce.png


5、环境变量设置


设置环境变量是为了添加公有路径参数,然后Carla和ScenarioRunner可以通过这个路径参数互相访问到对方,这里的设置非常重要。下方的设置方法是从官方copy来的,里面的具体路径一定要跟着你自己的安装路径来。

# %CARLA_ROOT% is the CARLA installation directory
# %SCENARIO_RUNNER% is the ScenarioRunner installation directory
# <VERSION> is the correct string for the Python version being used
# In a build from source, the .egg files may be in: ${CARLA_ROOT}/PythonAPI/dist/ instead of ${CARLA_ROOT}/PythonAPI
set CARLA_ROOT=\path\to\your\carla\installation
set SCENARIO_RUNNER_ROOT=\path\to\your\scenario\runner\installation
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla\dist\carla-<VERSION>.egg
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla

可以看看我这里设置成功后的检查。

68cd3ccf6a2aaeb41ed1f0afb3146e1b.png

附:设置PYTHONPATH的好处是,后续可以在python脚本中直接import进来carla的pythonAPI和carla库。

6、软件使用

终于可以使用软件了。

这里还是要说明下Carla和ScenarioRunner的配合模式,不然后面操作很多,读者很难理解每一步到底是什么意思。

Carla的本质还是Server-Client模式,所以一定会运行一个Sever端,双击打开CarlaUE4.exe后就是打开了一个Server端。

然后Client端需要运行两个。

一个Client是ScenarioRunner模块本身(它解析OpenSCENARIO文件并发送到Server端)。

一个Client(比如运行manual_control.py)的作用是给主车一个agent(即控制主车行驶)并获得可视化效果,有了可视化效果我们才知道OpenSCENARIO场景最终呈现的样子。

附:

OpenSCENARIO中一般不会定义主车的行为(因为主车是自动驾驶),它会定义主车之外的其它NPC的行为或者天气环境等等。

为了方便查看OpenSCENARIO的效果,官方自带的manual_control.py,可以很方便的以键盘控制主车行驶,也能看得到主车周围的场景反馈。

理解了原理,接下来开干:

1、打开一个终端,切换到Carla安装目录下,我这里喜欢以低质量模式快速启动Carla的Server端;

.\CarlaUE4.exe --quality-level=Low

打开后如下(carla的server端,虽然像素很低,效果很差,但是对电脑显卡消耗小,启动迅速)。

ca2fde41409c92edb11a590dd6e1d8fc.png

2、再打开一个终端,切换到ScenarioRunner的安装目录下,运行OpenSCENARIO场景。官方给出的demo指令如下:

python scenario_runner.py --scenario FollowLeadingVehicle_1 --reloadWorld

运行后发现Server端的地图变了,效果如下。

ad2211d623681e656c0943fa4f82a155.png

3、再打开一个终端,切换到ScenarioRunner的安装目录下,去运行manual_control.py,指令如下。

python manual_control.py

运行后,会新打开一个pygame的窗口,显示一辆静止的车辆,这个就是主车。

27a3040da405d208861359c7b9856a00.png

此时通过键盘上的WASD键,比如W键,让主车加速,然后,前方就会出现一辆目标车。(注意要切换到英文输入法,不然按键无效的)。

10a343da0ad5f2f5fc17f685d86de4a8.png

好了,到了这里基本已经复现了官方的demo。事实上,网上的教程大多也只到这里了。

阶段性胜利啦。

终于用ScenarioRunner联合Carla跑起来了一个场景。

但是。

这里我有一点疑惑:

这个FollowLeadingVehicle到底描述了个什么场景,或者说ScenarioRunner启动时指定的FollowLeadingVehicle_1 参数到底指向什么地方?

python scenario_runner.py --scenario FollowLeadingVehicle_1 --reloadWorld

研究了好久才知道这个demo运行的竟然是下面这个python文件中定义的东东。

315f57b68ee06df5cb5345fb2599a209.png

然后官方的说明中也证实了这一点:

d3a335682d9136275d3cb7c6df8f65a9.png

OK,结论就是:上面的demo中,ScenarioRunner运行的场景文件,是用另一个python文件定义的车辆行为,并不是OpenSCENARIO格式的文件

心累。

所以,ScenarioRunner是否可以调用一个OpenSCENARIO文件呢?

简单通过--help查看ScenarioRunner的使用方法,结果如下:

python scenario_runner.py --help

a24b137f75f358816722de4995d2c189.png

参照提示,尝试运行一个官方提供的OpenSCENARIO场景文件:

python scenario_runner.py --openscenario youropennscenariopath.xosc

发现是可以成功的,而且根据自己的需要,修改相应xosc文件内容后,也能马上看到运行的效果,和我预期中的表现一致。

以下录了个视频,记录了下上述Carla中运行OpenSCENARIO文件的过程,方便回看。

视频中调用的脚本如下:

python scenario_runner.py --openscenario .\srunner\examples\FollowLeadingVehicle.xosc
python scenario_runner.py --openscenario .\srunner\examples\LaneChangeSimple.xosc
python scenario_runner.py --openscenario .\srunner\examples\PedestrianCrossingFront.xosc

7、报错记录


1、关于PYHTONPATH

官方给的PYTHONPATH系统路径设置后,运行ScenarioRunner总是报错:module 'carla' has no attribute 'WeatherParameters'。查看官方isuue后得知需要多添加一些PYTHONPATH:

set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla\dist\carla-<VERSION>.egg
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla\agents
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI

2、关于import carla

set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla\dist\carla-<VERSION>.egg

添加这一句虽然可以不用安装就能直接使用carla模块,但是我这里import carla没有问题,但是使用却有问题,报错内容是找不到libcarla这个东西。最后我是删除了这个路径设置,直接‘pip install carla==0.9.13’来解决问题的。我猜测,这个egg包可能有所损坏,直接install网上的carla库是没问题的。

3、关于键盘无法控制车辆

启动manual_control.py后按键WASD或者上下左右键后主车怎么着也不动,一开始总是以为是自己哪里的设置不对,环境不对,搞了好久才幸运地发现,要把输入法切换到英文输入法,就能解决问题。。。

8、总结

Carla中是能运行OpenSCENARIO格式的场景的,不过需要另一个python工具(ScenarioRunner)来对OpenSCENARIO内容进行解析,并发送到Carla的Server端,我们才能通过自控的Client端看到其应用的效果。这个过程虽然比较曲折,但总归是实现了。笔芯。

本文完,瑞斯拜。

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合多传感器标定多传感器融合多模态3D目标检测点云3D目标检测目标跟踪Occupancy、cuda与TensorRT模型部署协同感知语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码即可学习

209b8b6f9842e721852c84280968c0ae.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

c8593cbb67d98ac7005491763b92f6ea.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

d31f05abcf92d2fb7b53742dab061515.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

688f671f4ce27096fff332e30c40fc0b.jpeg

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐