场景编辑
标准用例

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 并配置。
-
打开 CodeMeter,点击右下角 WebAdmin。

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

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

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

-
运行仿真用例。
交通流用例-如何使用DST_API控制
DST(Dynamic Simulation Translator) API 和交通流数据的通信是通过 socket 通信来完成的。一般使用情况下,为保证数据传输效率,建议将发送数据的进程与 SimOne 放于同一机器。
在此前提下,socket 通信的 IP 地址是 127.0.0.1,端口是 21568。目前一帧里交通参与者的数据会以 JSON 字符串的方式发往 DST。
基本工作流程
-
创建 socket,绑定 IP 地址和端口以建立连接。
-
获取交通参与者数据并通过 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:此交通灯的持续秒数,为必须项。
-
建议用恒定频率发送数据,推荐 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):
-
必须字段:
字段 |
名称 |
单位 |
说明 |
---|---|---|---|
编号 |
ID |
无 |
交通参与者唯一编号 |
时间戳 |
Time |
秒(s) |
记录每个轨迹点对应的时刻 |
位置X坐标 |
PositionX |
米(m) |
局部世界坐标X分量 |
位置Y坐标 |
PositionY |
米(m) |
局部世界坐标Y分量 |
-
可选字段:
字段 |
名称 |
单位 |
说明 |
---|---|---|---|
速度 |
Speed |
m/s |
速度 |
交通参与者朝向 |
PIS |
rad |
弧度制朝向 |
交通参与者大类 |
Category |
无 |
车辆、行人、自行车、动物、静态障碍物:vehicle、bike、pedestrian、animal、static |
交通参与者型号 |
Type |
无 |
具体型号,比如car、man,详细见下表 |
是否主车 |
Ego |
无 |
是否作为自动驾驶主车,是:Y,否:N |
-
交通参与者大类(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 |
路障:水马、路桩、隔离栏等 窖井盖 路面覆盖物:落叶、泥土、积水等 残缺标记牌 残缺车道线 |