提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
python环境:python 3.9
额外安装依赖:lxml
一、R157 Cutin泛化源码
import os
import numpy as np
import lxml.etree as ET
def scenario_generlization(PATH, FILE, NAMESPACE, file_new, targets):
"""
根据具体场景泛化场景
:param PATH: 原始场景所在目录
:param FILE: 原始场景文件名称
:param NAMESPACE: 原始场景文件命名空间
:param file_new: 泛化生成的场景文件名称
:param targets: 需要更改的标签与数值
:return:
"""
path_file = os.path.join(PATH, FILE)
tree = ET.parse(path_file)
root = tree.getroot()
for param, target in targets.items():
for element in root.iter():
if target['tag_name_upper'] in element.tag and target['element_id'] in element.attrib.values():
for child in element:
if NAMESPACE+target['tag_name'] in child.tag:
child.text = target['set_value']
path_file = os.path.join(PATH, file_new)
tree.write(path_file)
print('Scenario:【{}】 generated!'.format(path_file))
return tree
if __name__ == '__main__':
%根据实际情况写原始Scenario文件路径
PATH = '../Parameterization/MOD_Traffic/Pool/Environment/Scenario'
NAMESPACE = '{http://www.dspace.com/XMLSchema/ScenarioAccess/Scenario/Traffic}'
FILE = 'DrivingModel_CutinDemo.xml'
# Scenario Cutin Parameters
cutin_ego_velocities = [60, 50, 40, 30, 20]
cutin_rel_velocities = [10, 20, 30, 40]
cutin_long_dists = np.linspace(1, 60, 60)
cutin_lat_durations = np.around((3.5/np.linspace(0.1, 3, 30)), 2)
counter = 0
for vel_ego in cutin_ego_velocities:
for vel_rel in cutin_rel_velocities:
if vel_ego - vel_rel < 10:
break
for dist in cutin_long_dists:
for dur in cutin_lat_durations:
targets = {
'long_dist': {
'tag_name_upper': 'Condition',
'element_id': 'i200',
'tag_name': 'Value',
'set_value': str(dist)
},
'lat_duration': {
'tag_name_upper': 'Duration',
'element_id': 'i188',
'tag_name': 'Value',
'set_value': str(dur)
}
}
file_new = 'DM_CIN_EGOV-{}_RELV-{}_D-{}_T-{}.xml'.format(str(vel_ego), str(vel_rel), str(dist), str(dur))
scenario_generlization(PATH, FILE, NAMESPACE, file_new, targets)
总共2520个场景,预计1~2G空间
二.脚本验证
ModelDesk可打开,且符合预期