class utils.observation.ObjectStatus(*, x=0, y=0, v=0, a=0, yaw=0, width=0, length=0)
EgoStatus的基类,用于描述仿真中物体的状态
-
Attributes:
-
x : float
物体在与底图匹配的局部坐标系下的横坐标,单位:
m -
y : float
物体在与底图匹配的局部坐标系下的纵坐标,单位:
m -
v : float
物体的移动速率,单位:
m/s取值范围大于等于0
-
a : float
物体移动纵向加速度,单位:
m/s^2 -
yaw : float
物体移动航向角,单位:
rad以x轴正方向为0,顺时针方向增加,取值范围为0~2π
-
width : float
物体的宽度,单位:
m -
length : float
物体的长度,单位:
m
-
-
Methods:
-
update(self, **kwargs)用于更新类内的各种参数取值
-
class utils.observation.EgoStatus(*, x=0, y=0, v=0, a=0, yaw=0, width=0, length=0, rot=0)
以ObjectStatus为基类,用于描述仿真中主车的状态
-
Attributes:
-
rot : float
主车的前轮转角,单位:
rad以主车行驶方向为0,顺时针方向为正
-
-
Methods:
-
update(self, **kwargs)用于更新类内的各种参数取值
-
class utils.observation.Observation()
用于描述仿真中背景要素的当前状态信息
-
Sources:
class Observation(): def __init__(self): self.ego_info: EgoStatus = EgoStatus() self.object_info: Dict[str, Dict[str, ObjectStatus]] = { 'vehicle': {}, 'bicycle': {}, 'pedestrian': {}, } self.light_info = "" self.test_info = { "t": 0.00, "dt": 0.00, "end": -1, } ...
-
Attributes:
-
ego_info : EgoStatus
仿真中主车(被测物)的车辆状态
-
object_info : Dict[str, Dict[str, ObjectStatus]]
用于描述仿真环境中的背景要素状态
字典结构如下:
{ "vehicle": { "veh_name": ObjectStatus(), ... } "bicycle": { "bic_name": ObjectStatus(), ... } "pedetrian": { "ped_name": ObjectStatus(), ... } }- 一级键:表示背景要素类型,
"vehicle"为背景车辆、"bicycle"为自行车、"pedestrain"为行人 - 二级键:表示背景要素的名称,类型为
str - 二级值:表示对应背景要素的状态信息,类型为
ObjectStatus
- 一级键:表示背景要素类型,
-
light_info : str
表示仿真环境当前与主车通行相关的信号灯灯色
"green"为绿灯可通行、"yellow"为黄灯、"red"为红灯禁止通行当前回传的信号灯信息仅为主车即将经过的下一信控路口按任务设置行驶方向的信号灯灯色
-
test_info : dict
描述当前仿真环境的状态信息
key value "t" 类型为 float,单位为s,表示当前仿真的时间戳"dt" 类型为 float,单位为s,表示当前仿真步长"end" 类型为 int,表示当前仿真运行状态。-1表示仿真在运行中,1表示主车完成测试任务(抵达目标区域),2表示仿真超时,3表示主车与背景要素发生碰撞,4表示主车驶出可行驶范围
-
-
Methods:
-
update_ego_info(self, **kwargs)用于更新ego_info属性的值
Parameters:
- 与EgoStatus的属性一致
-
erase_object_info(self)用于初始化object_info属性的值
初始化后值为
{"vehicle": {}, "bicycle": {}, "pedestrian": {}} -
update_object_info(self, category, obj_name, **kwargs)用于更新object_info属性的值
Parameters:
-
category: str对应object_info属性的一级键,表示待更新的背景要素类型
-
obj_name: str对应object_info属性的二级键,表示待更新的背景要素名称
-
其余参数与ObjectStatus类内属性一致
-
-
update_light_info(self, light_info)用于更新light_info属性的值
Parameters:
-
light_info: str待更新的红绿灯灯色
-
-
update_test_info(self, **kwargs)用于更新test_info属性的值
-
class utils.ScenarioManager.ScenarioInfo()
用于描述测试任务相关信息,服务于以ScenarioManagerBase为基类的各类
-
Attributes:
-
num : int
测试场景编号
-
name : str
测试场景名称
-
type : str
测试场景类型,取值为
"REPLAY" | "FRAGMENT" | "SERIAL"不同场景类型对应不同的测试能力,上述三个取值分别对应回放测试、片段式双向交互测试、连续式双向交互测试
-
source_file : Dict[str, str]
测试任务相关的源文件路径
key value "xodr"OpenDrive静态地图文件路径 "xosc"OpenScenario动态场景文件路径 "json"红绿灯信息json文件路径 "tess"TessNG仿真器运行所需tess文件路径 字典中对应字段为空字符串时表示无相应源文件
-
output_path : str
测试任务结果输出文件的路径
-
task_info : dict
测试场景任务相关参数
键值对说明如下:
-
"startPos": List[float]表明主车的初始位置,列表包含两个浮点值,分别对应加载位置横、纵坐标
-
"targetPos": List[List[float]]表明测试任务目标区域,列表包含两个点对,用于定位矩形目标区域位置
-
"waypoints": Dict[str, List[float]]表明测试任务的参考轨迹点序列,形式如下:
{ "1": [-352.40, 236.60], "2": [-355.12, 234.67], "3": [-358.38, 232.08], ... }目前仅用于
SERIAL连续式双向交互测试 -
"dt": float表明测试任务的步长,单位为
s
-
-
additional_info : dict
用于记录除上述信息的其他测试任务相关的字段
注:该属性在调用
format()方法时不会被加入字典中返回
-
-
Methods:
-
update(self, **kwargs)用于更新类内的各种参数取值
-
format(self)将测试任务相关的信息以字典形式进行返回
Return type: dict
Returns :
- 返回字典的键为:
num,name,type,source_file,output_path,task_info - 返回字典的值为:与键对应类内属性的值
- 返回字典的键为:
-
class utils.ScenarioManager.ScenarioManagerBase(config)
各测试方法对应测试场景管理工具的基类,如ScenarioManagerForReplay等
-
Attributes:
-
skip_exist : bool, default: False
是否在运行时跳过在输出文件夹中已有输出文件的场景
-
record : dict
用于记录加载失败的场景名称及其报错信息
-
scenario_type : str
测试场景类型,取值为
"REPLAY" | "FRAGMENT" | "SERIAL" -
tasks : List[str]
本轮测试的任务列表,列表中每一项为场景名称
-
output_path : str
测试任务结果输出文件夹路径
输出文件默认保存在
./outputs/文件夹 -
cur_scene_num : int
当前测试的任务场景编号,即其在tasks属性中的位置
-
cur_scene : ScenarioInfo
当前测试任务场景的相关信息
-
tot_scene_num : int
加载到的测试任务总数
-
-
Methods:
-
next(self)用于加载下一个测试任务场景,执行后会更新cur_scene_num和cur_scene的值
Return type: bool
Returns :
- 返回为
True表示下一测试场景加载成功,为False表示所有测试任务已经加载完成
- 返回为
-
_struct_scene_info(self)用于更新类内cur_scene的属性,不同的测试类型有不同的更新方法,需要在子类中复写
Return type: ScenarioInfo
Returns :
返回 tasks[cur_scene_num] 对应的完整测试任务信息
-
_is_exist(self, scenario_name)检测该场景的输出文件是否已经在结果文件夹中存在
Parameters :
-
scenario_name: str待检测的场景名称
Return type : bool
Returns :
返回为
True表示该场景的输出文件已经在结果文件夹中存在,反之则否 -
-
_find_file_with_suffix(self, dir, suffix)**寻找场景中特定后缀文件的路径
Parameters :
-
dir: str待寻找的文件夹路径
-
suffix: str待寻找的文件后缀*(不包含)*
Return type : str
Returns :
返回待寻找文件夹中相应后缀文件路径,为空字符串时表示文件夹中无使用此后缀的文件
-
-
class utils.ScenarioManager.ScenarioManagerForReplay(scenario_dir, config)
ScenarioManagerBase的子类,用于无回放测试的测试任务管理
-
Methods:
-
_struct_scene_info(self)用于更新当前测试任务信息,具体内容包括:
属性 取值说明 type"REPLAY" num与cur_scene_num属性相同 name对应 ./scenario/replay文件夹下某子文件夹名称source_file需要寻找 xodr,xosc,json三个文件路径,其中json文件用于记录主车相关交通信号灯信息,在部分场景中不存在output_path输出文件以 {type}_{num}_{name}_result.csv的形式命名task_info从xosc文件中解析主车初始位置 startPos、目标行驶区域targetPos和仿真步长dt的值Return type: ScenarioInfo
Returns :
-
返回 tasks[cur_scene_num] 对应的完整测试任务信息
class utils.ScenarioManager.ScenarioManagerForFragment(scenario_dir, config)
ScenarioManagerBase的子类,用于片段式双向交互测试的测试任务管理
-
Methods:
-
_struct_scene_info(self)用于更新当前测试任务信息,具体内容包括:
属性 取值说明 type"FRAGMENT" num与cur_scene_num属性相同 name对应 ./scenario/fragment文件夹下某子文件夹名称source_file需要寻找 xodr,xosc,tess三个文件路径output_path输出文件以 {type}_{num}_{name}_result.csv的形式命名task_info从xosc文件中解析主车初始位置 startPos、目标行驶区域targetPos和仿真步长dt的值additional_info从xosc文件中解析所有背景要素的初始状态信息以字典的形式保存在键 vehicle_init_status中,用于仿真初始场景的构建Return type: ScenarioInfo
-
Returns :
返回 tasks[cur_scene_num] 对应的完整测试任务信息
class utils.ScenarioManager.ScenarioManagerForSerial(scenario_dir, config)
ScenarioManagerBase的子类,用于无限里程双向交互测试的测试任务管理
-
Methods:
-
_struct_scene_info(self)用于更新当前测试任务信息,具体内容包括:
属性 取值说明 type"SERIAL" num与cur_scene_num属性相同 name对应 ./scenario/serial/tasks文件夹下json文件的文件名(不包含.json后缀)source_file需要寻找 xodr,tess两个文件路径output_path输出文件以 {type}_{num}_{name}_result.csv的形式命名task_info从任务 json文件中获取主车初始位置startPos和目标行驶区域targetPos及途径点waypoints序列信息,从config配置文件中获取仿真步长dt的值Return type: ScenarioInfo
-
Returns :
返回 tasks[cur_scene_num] 对应的完整测试任务信息
class planner.plannerBase.PlannerBase(ABC)
作为选手编写自定义规控器的抽象基类,定义了必须进行重载的抽象方法
-
Definition:
from abc import ABC, abstractmethod from typing import List from utils.observation import Observation class PlannerBase(ABC): def __init__(self) -> None: pass @abstractmethod def init(self, scenario_info: dict) -> None: pass @abstractmethod def act(self, observation: Observation) -> List[float]: pass
-
Methods:
-
__init__(self)构造函数,用于初始化自定义规控器模块的相关属性设置
-
-
Abstract Methods:
-
init(self, scenario_info)初始化函数,通过
scenario_info参数传入当前测试任务信息,可用于进行地图解析等工作Parameters :
-
scenario_info: dict测试任务场景相关信息,其值为
ScenarioInfo::format()方法的返回值,关于该字典中键值对的简单描述如下:Key Type Value "num"int 测试场景编号 "name"str 测试场景名称 "type"str 测试模式,取值为`"REPLAY" "output_path"str 测试结果输出路径 "source_file"dict 场景相关源文件路径,包含 xodr,xosc,json,tess四种后缀文件"task_info"dict 测试场景任务相关参数,包含主车初始位置 startPos、目标行驶区域targetPos、途径点waypoints序列和仿真步长dt
Raises:
NotImplementedError: 子类必须实现这个初始化函数 -
-
act(self, observation)响应函数,读入当前时刻的仿真环境状态信息,进行相关规划控制运算并返回主车的控制量
Parameters :
-
observation: Observation仿真中背景要素的当前状态信息,关于该对象的属性简单描述如下:
Key Type Value ego_infoEgoStatus 仿真中主车的车辆状态 object_infoDict[str, Dict[str, ObjectStatus]] 仿真环境中的各背景要素状态,包含背景车、非机动车和行人 light_infostr 仿真环境当前与主车通行相关的信号灯灯色 test_infodict 仿真环境的状态信息,包括当前时间戳 t、仿真步长dt和仿真运行状态end
Return type : List[float]
Returns :
以列表的形式返回主车在当前背景交通流环境下的控制量,该返回列表中各值的描述如下:
index 类型 控制参数 单位 说明 0 float 纵向加速度 m/s^21 float 前轮转角 rad以主车行驶方向为0,顺时针方向为正 Raises:
NotImplementedError: 子类必须实现这个初始化函数 -
-