创建新场景教程
本教程介绍如何使用 ScenarioRunner 和 ScenarioManager 套件创建和运行新场景。
我们将新场景称为 NewScenario。要创建它,只需要几个步骤。
创建一个空的 Python 类
转到 Scenarios 文件夹并使用新 Python 文件中的 NewScenario
名称创建一个新的 Python 类 new_scenario.py
。类应该从 BasicScenario
类派生。结果,该类应如下所示:
class NewScenario(BasicScenario):
"""
Some documentation on NewScenario
:param world is the CARLA world
:param ego_vehicles is a list of ego vehicles for this scenario
:param config is the scenario configuration (ScenarioConfiguration)
:param randomize can be used to select parameters randomly (optional, default=False)
:param debug_mode can be used to provide more comprehensive console output (optional, default=False)
:param criteria_enable can be used to disable/enable scenario evaluation based on test criteria (optional, default=True)
:param timeout is the overall scenario timeout (optional, default=60 seconds)
"""
# some ego vehicle parameters
# some parameters for the other vehicles
def __init__(self, world, ego_vehicles, config, randomize=False, debug_mode=False, criteria_enable=True,
timeout=60):
"""
Initialize all parameters required for NewScenario
"""
# Call constructor of BasicScenario
super(NewScenario, self).__init__(
"NewScenario",
ego_vehicles,
config,
world,
debug_mode,
criteria_enable=criteria_enable)
def _create_behavior(self):
"""
Setup the behavior for NewScenario
"""
def _create_test_criteria(self):
"""
Setup the evaluation criteria for NewScenario
"""
填充Python类
在 NewScenario
类中,您必须定义代码示例中提到的以下方法。
初始化方法
初始化方法旨在设置场景和所有车辆所需的所有参数。这包括选择正确的车辆、在正确的位置生成它们等。为了简化这一点,您可能需要使用basic_scenario.py
中定义的 setup_vehicle()
方法。
CreateBehavior 方法
此方法应设置包含场景期间所有非自我车辆行为的行为树。行为树应该使用atomic_scenario_behavior.py
和 atomic_scenario_behavior.py
中定义的原子行为。
CreateTestCriteria 方法
此方法应设置一个包含场景的所有评估标准的列表。该标准应基于 atomic_scenario_criteria.py
中定义的原子标准。
注意: 从此列表py_tree
中将自动创建并行!
添加场景配置
最后,场景配置应添加到该 examples/
文件夹中。如果扩展已经存在的场景模块,则只需扩展相应的 XML,否则添加新的 XML 文件。在这种情况下,您可以使用任何现有的 XML 文件作为蓝图。
如果您想为一个场景添加多个自我车辆,请确保它们使用不同的参与者名称,例如
<scenario name="MultiEgoTown03" type="FreeRide" town="Town03">
<ego_vehicle x="207" y="59" z="0" yaw="180" model="vehicle.lincoln.mkz_2017" rolename="hero"/>
<ego_vehicle x="237" y="-95.0754252474" z="0" yaw="90" model="vehicle.tesla.model3" rolename="hero2"/>
</scenario>