【车辆仿真】dSPACE Scenario批量泛化脚本

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

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可打开,且符合预期
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值