场景编辑

标准用例

ID

项目

描述

1

用例名

展示用例的名称

2

保存按钮

当对用例进行编辑后,点击此按钮可保存用例

3

运行用例按钮

当用例编辑器中有编辑相关的操作时,点击此按钮,弹出新建任务弹框,用户选择主车类型即可直接运行用例。

4

吸附到车道线中心

激活此按钮,将给主车或动态元素添加路径点时,路径点会默认添加到用户移动到的车道线的中心

5

跟随模式

预览轨迹时,视窗会跟随主车移动

6

前进一步/后退一步

恢复到上一步/下一步的操作

7

资源列表

在右侧用例编辑器展示的内容所在列表

8

用例编辑视窗操作

包括放大、缩小和定位到主车

9

测距工具

击标尺按钮后,鼠标变成十字光标,在地图区域<br>点击鼠标左键后松开同时移动鼠标即可看到长度,测距工具支持多段测量<br>再次点击鼠标左键可记录距离上一点距离,点击鼠标右键/ESC键退出测量|

10

用例编辑视窗

可在此视窗内编辑案例,包括拖入主车、动态元素、静态元素并设置其路径或参数等

11

主车属性设置面板

可对主车的参数进行调整,包括主车的类型和控制器的选择

12

Tab切换

包括初始状态和行为规划两种

13

主车对手车属性

给主车或对手车添加动作、设置初始状态等

14

播放控制栏

从左至右依次是循环播放按钮、设置数据播放速率、刷新按钮、跳转至起点按钮、跳转至上一帧按钮播放/暂停按钮,跳转至终点按钮、播放进度条、已播放时间/总时间、自定义的预览时长设置

15

用例资源库列表

可以用于数据驱动用例编辑的资源

16

文本编辑器

弹出文本编辑模式方便用户编辑

17

用例资源展示

点击左侧用例资源库列表里的资源,右侧展示对应的用例资源

18

隐藏路径点

调节隐藏路径点,添加到用例编辑器中的主车、动态元素的路径点将统一被隐藏,仅展示路径

19

帮助中心

点击此按钮可弹出帮助中心的文档

20

退出编辑器

点击此按钮,可退出主车编辑器弹框

交通流用例

ID

项目

描述

1

用例名

展示用例的名称

2

删除按钮

选中用例资源列表树中的资源点击此按钮可删除资源

3

用例资源列表树

将向用例添加的资源显示在用例编辑器左侧的用例资源列表数中

4

保存按钮

当对用例进行编辑后,点击此按钮可保存用例

5

运行用例按钮

当用例编辑器中有编辑相关的操作时点击此按钮,弹出新建任务弹框,用户选择主车类型即可直接运行用例。

6

增加路径点

当选中主车、静态元素或动态元素后,此按钮被激活,点击会沿着路径新增一个对应类型的途径点

7

删除路径点

当选中主车、静态元素或动态元素后,此按钮被激活,点击会删除一个对应类型的途径点

8

吸附到车道线中心

激活此按钮,将给主车或动态元素添加路径点时,路径点会默认添加到用户移动到的车道线的中心

9

前进一步

恢复到上一步的操作

10

后退一步

恢复到下一步的操作

11

用例编辑视窗

可在此视窗内编辑用例,包括拖入主车、动态元素、静态元素、触发器并设置其路径或参数等

12

用例编辑器参数面板

可对用例编辑视窗中的对象进行参数设置

13

状态栏

展示比例尺和鼠标坐标及一些错误等信息提示

14

用例资源库列表

点击左侧的用例资源列表,右侧展示资源,鼠标拖拽资源可拖拽资源至用例编辑器中|

15

用例资源展示

点击左侧的用例资源库列表,右侧即展示选中的文件夹中的资源|

交通流用例-如何使用Vissim

Step 1 安装Vissim软件

安装Vissim软件10版(注意不要安装其他的版本,目前只有这个版本可以用于SimOne的仿真);

Step 2 安装 CodeMeter7.10a 并配置。

  1. 打开 CodeMeter,点击右下角 WebAdmin。

  1. 在弹出网页中点击上面一行中的 Configration 菜单,将 Server Search List 中清空(点击垃圾桶图标),点击 Apply 确定。

Step 3 在 SimOne 中配置使用 Vissim

  1. 目前公开版本中支持Vissim的地图只有三车道路口,如要使用Vissim仿真,请在构建用例时选择该地图。

  1. 选择用例类型为交通流用例,并在交通流配置里选择Vissim。

  1. 运行仿真用例。

交通流用例-如何使用DST_API控制

DST(Dynamic Simulation Translator) API 和交通流数据的通信是通过 socket 通信来完成的。一般使用情况下,为保证数据传输效率,建议将发送数据的进程与 SimOne 放于同一机器。

在此前提下,socket 通信的 IP 地址是 127.0.0.1,端口是 21568。目前一帧里交通参与者的数据会以 JSON 字符串的方式发往 DST。

基本工作流程

  1. 创建 socket,绑定 IP 地址和端口以建立连接。

  2. 获取交通参与者数据并通过 socket 发送给 DST。参考下面的例子,交通参与者的数据信息包括:

    1)通用数据:

    (1)TimeStamp:交通参与者当前所在帧的时间戳,单位是秒,为必须项;

    (2)ObjectId:交通参与者的用户自定义id,具有唯一性,为必须项;

    (3)ObjectType:交通参与者的具体类别,可取值Vehicle、Pedestrian、Bike或TrafficLight,为必须项;

    (4)Position:交通参与者坐标,X、Y、Z单位是米,其中X、Y为必须项,Z为可选项;

    2)车辆行人自行车专属数据:

    (1)Speed:交通参与者的速度,单位是米/秒,为可选项;

    (2)PIS:交通参与者的航向度,单位是弧度,为可选项;

    (3)AssetId:具体交通参与者的类型id,用于加载SimOne内部模型,取值要参考SimOne内部的agents.json并结合ObjectType,为可选项,默认为agents.json中随机Vehicle的id。

    3)交通灯专属数据:

    Attributes字段:其中包含 OpenDriveLightId、Signal 及 CountDown 三个子字段。

    (1)OpenDriveLightId:opendrive中对应交通灯的id,为必须项;

    (2)Signal: 此交通灯的颜色,取值“R”、"Y"或"G",表示红、黄或绿,为必须项;

    (3)CountDown:此交通灯的持续秒数,为必须项。

  3. 建议用恒定频率发送数据,推荐 10HZ。

附录 DST API Sample 代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import socket
import json
import time

if __name__ == '__main__':
    dstSocket = socket.socket()
    dstSocket.connect(("127.0.0.1", 21568))
    print("start data process node...\n")
    print("connect dst ip: 127.0.0.1 port:21568")
    index = 0
    tick = 0
    pulse = 0.1

    while True:
        start = time.time()
        dataPackage = {}
        dataPackage['Data'] = []
        asset = {}
        asset['TimeStamp'] = str(tick)
        objects = []
        position = {}
        position['X'] = float(-46 + 0.25 * index)
        position['Y'] = -3.44
        actor = {}
        actor["ObjectId"] = '23562'
        actor['AssetId'] = "1000006"
        actor['ObjectType'] = 'Vehicle'
        actor['Position'] = position
        objects.append(actor)
        asset['Objects'] = objects
        dataPackage['Data'].append(asset)

        try:
            sendData = json.dumps(dataPackage).encode('utf-8')
            dstSocket.send(sendData)
        except:
            print('dst Socket is closed!!')
        index = index + 1
        end = time.time()
        if pulse > (end - start):
            time.sleep(pulse - (end - start))
        tick = tick + pulse

附录 DST 一帧数据的 JSON 格式样例:

FrameData = {
    "Data": [
        {
            "TimeStamp": "51.0",
            "Objects": [
                {
                    # 只写必须字段的例子
                    "ObjectId":"23562",
                    "ObjectType": "Vehicle",
                    "Position": {
                        "X": 575,
                        "Y": 268
                    }
                },
                {
                    # 字段写全的例子
                    "ObjectId": "23562",
                    "ObjectType": "Vehicle",
                    "Position": {
                        "X": 575,
                        "Y": 268,
                        "Z": 0
                    },
                    "Speed": "30",
                    "PIS": 1,
                    "AssetId": "1000049"
                },
                {
                    "ObjectId": "73088",
                    "ObjectType": "Vehicle",
                    "Position": {
                        "X": 575,
                        "Y": 280
                    }
                },
                {
                    "ObjectId": "73088",
                    "ObjectType": "Vehicle",
                    "Position": {
                        "X": 575,
                        "Y": 280
                    }
                },
                {
                    # 交通灯的例子,使id为9的交通灯设为红灯,并使之持续10秒
                    "ObjectId": "74000",
                    "ObjectType": "TrafficLight",
                    "Attributes": {
                        "OpenDriveLightId": 9,
                        "Signal": "R",
                        "CountDown": 10
                    }
                    "Position": {
                        "X": 600,
                        "Y": 300
                    }
                }
            ]
        }
    ]
}

数据驱动案例

ID

项目

描述

1

数据重建

数据重建可对原始数据进行清理。用户的数据源中由于设备、环境或其他原因可能包含噪点和跳变,数据重建可使转换后的数据曲线更平滑,更易编辑。重建分为两部分,可对主车和对手元素分别重建。当对手元素被勾选时,主车也会默认被勾选,反之不会。这样做是为了避免当用户直接测试转换后案例时,主车仍然为原始数据而导致的无效测试

2

显示原始路径

显示数据转化重建之前的轨迹

3

主车文件夹属性

主车和元素文件夹上的有两个ICON, 表示原始数据表示重建后数据,这两个ICON使用状态互斥即当在右侧属性面板选择数据源为原始数据时, 原始数据ICON点亮,重建后数据的ICON则变成灰置状态。当数据源选择重建后数据时原始数据变成灰置状态,最终进行测试的数据类型取决于数据源选择哪种类型

数据驱动支持的原始数据格式(CSV XLSX):

  1. 必须字段:

字段

名称

单位

说明

编号

ID

交通参与者唯一编号

时间戳

Time

秒(s)

记录每个轨迹点对应的时刻

位置X坐标

PositionX

米(m)

局部世界坐标X分量

位置Y坐标

PositionY

米(m)

局部世界坐标Y分量

  1. 可选字段:

字段

名称

单位

说明

速度

Speed

m/s

速度

交通参与者朝向

PIS

rad

弧度制朝向

交通参与者大类

Category

车辆、行人、自行车、动物、静态障碍物:vehicle、bike、pedestrian、animal、static

交通参与者型号

Type

具体型号,比如car、man,详细见下表

是否主车

Ego

是否作为自动驾驶主车,是:Y,否:N

  1. 交通参与者大类(Category)与交通参与者型号(Type)对照关系:

Category

Type

说明

vehicle

car mixed_truck truck coach van_truck tricycle motor

小轿车 水泥搅拌车等工程车辆 大卡车 大巴 小型厢式货车 电动三轮车 摩托车

bike

normal electric

普通自行车 电动自行车

pedestrian

man woman child

成年男性行人 成年女性行人 儿童

animal

dog

static

obstacle holecover cover pole roadmark

路障:水马、路桩、隔离栏等 窖井盖 路面覆盖物:落叶、泥土、积水等 残缺标记牌 残缺车道线