“ 经常有朋友问如何学习仿真测试,于是想着把自己的一些经验和理解分享出来,希望能有所帮助。不过视野和技术有限,所说不一定对,供大家批评和参考。这是第22篇,CARLA的交通场景。”
上一篇介绍了如何在CARLA中加载道路,本篇介绍如何在仿真世界中加载基于OpenSCENARIO的动态场景。
交通场景指的是交通参与者在仿真世界中多样的动态行为,通过这些动态行为对运行在其中的自动驾驶车辆进行充分测试。交通场景的丰富性依赖于交通参与者的种类和其能实现的动态行为,CARLA支持轿车、SUV、客车、卡车、摩托车、自行车、行人等多种动态参与者及锥桶、售货机等多种静态参与者,动态参与者的行为可通过预先定义的场景和在线运行的交通流来控制。
ScenarioRunner的安装
ScenarioRunner是由CARLA官方提供的、与CARLA配合使用的场景解析和运行工具,支持CARLA自定义的scenario格式、route格式和OpenSCENARIO格式等多种预定义场景文件的运行,本书主要使用其OpenSCENARIO场景运行功能。OpenSCENARIO目前已经发布1.2和2.0版本,其中1.0和2.0版本都在ScenarioRunner中得到了支持。
OpenSCENARIO是德国自动化及测量系统标准协会ASAM提供的一个描述动态场景的标准格式,关于OpenSCENARIO格式的内容,大家可以看下之前对OpenSCENARIO的格式介绍和实例分析。
SR的安装步骤如下:
(1)下载源码
SR的github上提供了与CARLA版本相配合的Release版本[ https://github.com/carla-simulator/scenario_runner/releases],如SR0.9.13与CARLA 0.9.13相配合。这是因为SR需要使用PythonAPI从CARLA获取信息并对CARLA中的交通参与者、天气等进行控制,如果版本不匹配的话会操作失败。为了获取最新的特性,我们这里使用下载源码的方式进行安装。
大家可以选择将SR下载到任何位置,为了方便起见这里下载到CARLA文件夹下。
cd /path/to/carla
clone https://github.com/carla-simulator/scenario_runner.git git
(2)依赖库安装
进入scenario_runner文件夹,并根据其中的requirements.txt安装依赖库:
cd scenario_runner
#若安装过networkx则先将其卸载 sudo apt remove python3-networkx
pip3 install -r requirements.txt
按照以上步骤安装依赖后,若本地numpy版本高于1.20,运行时可能有包含如下字符的报错:......networkx/readwrite/graphml.py......module 'numpy' has no attribute 'int'...... 。这是因为requirements.txt中指定的networkx 2.2版本使用了np.int,该用法在nump 1.20版本以上已经不再支持。读者可以根据实际情况安装高版本networkx或者低版本的numpy。
#以下两种方法选一即可
1.卸载networkx,并重新安装新版本
pip3 uninstall networkx
pip3 install networkx
2.卸载numpy,并重新安装低版本
pip3 uninstall numpy
pip3 install numpy==1.20
(3)设置环境变量
为了在运行时能够找到相关的文件,需要设置一些环境变量。打开~/.bashrc文件,并在其结尾加入如下内容:
export CARLA_ROOT=/path/to/carla
export SCENARIO_RUNNER_ROOT=$CARLA_ROOT/scenario_runner
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla
大家请注意将其中路径修改为自己电脑上的实际路径,然后运行source ~/.bashrc使设置生效。
至此用于运行OpenSCENARIO 1.0文件(以下简称xosc文件)的安装工作都已完成,大家可尝试按照下一节的方法运行相关文件。若想运行OpenSCENARIO 2.0文件(以下简称osc文件),还需要进行如下操作。
(4)安装OpenSCENARIO 2.0相关依赖
安装JDK
sudo apt install openjdk-17-jdk
安装Antlr
https://www.antlr.org/download/antlr-4.10.1-complete.jar curl -O
local/lib/ sudo cp antlr-4.10.1-complete.jar /usr/
pip3 install antlr4-python3-runtime==4.10
打开~/.bashrc文件,并在其结尾加入如下内容,然后运行source ~/.bashrc使设置生效。
export CLASSPATH=".:/usr/local/lib/antlr-4.10.1-complete.jar:$CLASSPATH"
alias antlr4='java -jar /usr/local/lib/antlr-4.10.1-complete.jar'
alias grun='java org.antlr.v4.gui.TestRig'xport CARLA_ROOT=/path/to/carla
export SCENARIO_RUNNER_ROOT=$CARLA_ROOT/scenario_runner
export PYTHONPATH=$PYTHONPATH:$CARLA_ROOT/PythonAPI/carla
运行OpenSCENARIO文件
使用SR运行xosc/osc文件的步骤十分简单,首先启动CARLA,然后运行SR并指定xosc/osc文件即可:
(1)启动CARLA:
cd /path/to/carla
./CarlaUE4.sh
(2)配置ego车
实际测试时应由被测算法控制ego车,此处为了进行演示,通过SR自带的manual_control.py为ego车配置自动驾驶:
cd /path/to/scenario_runner
加载xosc文件示例时使用
python3 manual_control.py -a
加载osc文件示例时使用
python3 manual_control.py -a --rolename ego_vehicl
需要注意的是,manual_control.py根据rolename查找ego车辆并为其配置自动驾驶,默认ego车辆的rolename为“hero”,在下面的xosc文件示例中ego车辆的rolename恰好为“hero”,故无需配置“--rolename”参数,而osc文件示例中ego车辆的rolename为“ego_vehicle”,从而需要指定“--rolename”。
(3)运行ScenarioRunner
cd /path/to/scenario_runner
运行xosc文件示例
python3 scenario_runner.py --output --openscenario srunner/examples/FollowLeadingVehicle.xosc
运行osc文件示例
python3 scenario_runner.py --outpu --openscenario2 srunner/examples/cut_in_and_slow_range.osc
运行上述命令后,可以在CARLA渲染窗口中观察到地图根据xosc文件中定义变更,同时生成了ego车和其前方的障碍车。
命令中的“--output”用于设置在运行结束后输出如下图所示的结果信息,若不输入该命令则运行结束后不输出结果信息。
结果信息中的第一行显示了该场景的名称和测试结果,接着是ego车辆和交通车辆的信息,然后是运行时间的总体情况,最后是一些评价项目的结果。
命令中的“--openscenario”和“--openscenario2”用于设置SR运行xosc/osc模式,并加载紧跟其后的xosc/osc文件。
运行SR时,还可输入其他参数配置,读者可运行“python3 scenario_runner.py --help”获取所有参数配置和其说明,下表对其中较重要的内容进行了简要说明。