1
2
https://github.com/eleurent/highway-env
https://github.com/MCZhi/Driving-IRL-NGSIM/blob/main/NGSIM_env/envs/ngsim_env.py

1301,3725,511,1118847351400,20.428,717.996,6451628.438,1872868.223,11,4.5,2,31.39,-10.61,2,NA,NA,NA,NA,NA,NA,1289,1304,51.13,1.63,us-101

NGSIM数据集包含四个不同的场景:US-101、I-80、Lankershim与Peachtree。US-101与I-80记录了车辆在高速公路上的行驶轨迹,Lankershim与Peachtree记录了车辆在城市道路上的行驶轨迹

字段名 描述
Vehicle_Id 车辆识别号(根据进入该区域的时间升序),可重复利用。
Frame_Id 该条数据在某一时刻的帧(按开始时间升序),同一Vehicle_ID的帧号不会重复。
Total_Frame 该车出现在此数据集的总帧数。
Global_Time 时间戳(ms)。
Local_X 车辆前部中心的横向(X)坐标,以英尺为单位,相对于截面在行驶方向上的最左侧边缘。
Local_Y 车辆前部中心的纵向(Y)坐标,以英尺为单位,相对于截面在行驶方向上的相对于路段入口的纵向边缘。
Local_X,Local_Y 采集区域内的坐标,采集区域不同,坐标系不同,会有不同的零点。
Global_X, Global_Y 全局坐标,只有一个零点,可用作数据筛选(以英尺为单位)。
v_length 车辆长度(以英尺为单位)。
v_Width 车辆宽度(以英尺为单位)。
v_Class 车辆类型:1-摩托车,2-汽车,3-卡车。
v_Vel 车辆瞬时速度,以英尺/秒为单位。
v_Acc 车辆的瞬时加速度,以英尺/秒平方为单位。
Lane_ID 车辆的当前车道位置。 第1车道是最左边的车道,第5车道是最右边的车道。
O_Zone 车辆的起点区域,即车辆进入跟踪系统的位置。 研究区域有11个起源,编号从101到111。有关更多详细信息,请参阅数据分析报告。
D_Zone 车辆的目的地区域,即车辆离开跟踪系统的地方。 研究区域中有10个目的地,从201到211编号。起点102是单向出口,因此,没有关联的目标号码202。请参阅数据分析报告以获取更多详细信息。
Int_ID 车辆行驶的路口。 交叉点的编号为1到4,交叉点1位于最南端,交叉点4位于研究区域的最北端。 值为“ 0”表示该车辆不在交叉路口的附近,而是该车辆标识为Lankershim Boulevard的一段(下面的Section_ID)。请参阅数据分析报告以获取更多详细信息。
Section_ID 车辆行驶的路段。 Lankershim Blvd分为五个部分(路口1的南部;路口1和2、2和3、3和4之间;路口4的北部)。 值为0表示该车辆未识别出Lankershim Boulevard的一段,并且该车辆紧邻交叉路口(上述Int_ID)。 请参阅数据分析报告以获取更多详细信息。
Direction 车辆的行驶方向。 1-东行(EB),2-北行(NB),3-西行(WB),4-南行(SB)。
Movement 车辆的运动。 1-通过(TH),2-左转(LT),3-右转(RT)。
Preceding 同道前车的车辆编号。数值为0表示没有前面的车辆-发生在研究段的末尾和出匝道。
Following 在同一车道上跟随本车辆的车辆的车辆ID。 值0表示没有跟随的车辆-在研究部分的开头和匝道发生。
Space_Headway 间距提供了车辆的前中心到前一辆车辆的前中心之间的距离(英尺)。
Time_Headway 时间进度(以秒为单位)提供了从车辆的前中心(以车辆的速度)行进到前一辆车辆的前中心的时间。
Location 街道名称或高速公路名称。
    v_Vel  v_Acc  Lane_ID     x_prime    y_prime  v_Class  Space_Headway

id
10_436 43.82 -1.59 1 93.445584 -1.861718 2 0.00
12_443 35.26 4.49 1 77.581354 -1.745590 2 52.05
13_432 39.48 6.21 2 100.954027 -5.892089 2 98.13
14_515 36.66 -11.20 5 106.701336 -15.726461 3 0.00
18_291 41.14 0.15 5 78.375053 -15.703906 2 92.93
20_414 40.01 0.00 3 61.464749 -8.023250 2 123.13
21_439 43.55 7.14 4 85.675927 -11.882628 2 82.24
22_441 34.92 0.09 2 80.107841 -5.302910 2 68.39
23_438 37.55 0.00 1 61.004501 -1.665427 2 54.39
25_436 44.98 0.00 4 55.262678 -11.570208 2 99.78
26_438 34.99 0.00 2 65.094002 -4.779874 2 49.26
27_432 40.00 0.00 1 34.377782 -1.819046 2 87.36
2_437 44.99 0.00 2 130.865270 -5.408676 2 0.00
31_465 35.02 -0.23 5 60.066326 -15.641117 2 60.07
32_438 34.41 -1.74 2 50.624842 -4.710684 2 47.47
34_451 40.01 0.28 4 37.907366 -11.704015 2 56.94
35_280 31.20 -2.39 5 43.132858 -16.138246 2 55.56
39_450 41.50 0.02 1 21.973032 -0.281026 2 40.70
40_391 43.69 -10.63 4 20.277430 -12.428220 2 57.84
47_428 40.00 0.00 3 14.348765 -8.414309 2 154.58
48_507 35.08 -1.87 5 32.537400 -15.481097 2 34.76
5_452 38.55 0.00 4 129.526284 -12.498629 2 0.00
8_448 39.97 0.09 4 110.742070 -12.588850 2 61.63
9_409 45.88 -6.52 3 98.994163 -8.774887 2 0.00

image-20230314102459825

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
def test_make_data_loader():
"""Tests data loader produces same results for same input in different formats."""
trajs = [
types.Trajectory(
obs=np.array([0, 1]),
acts=np.array([100]),
infos=None,
terminal=True,
),
types.Trajectory(
obs=np.array([4, 5, 6]),
acts=np.array([102, 103]),
infos=None,
terminal=True,
),
types.Trajectory(
obs=np.array([10, 11, 12, 13]),
acts=np.array([104, 105, 106]),
infos=None,
terminal=False,
),
]
trans = types.Transitions(
obs=np.array([0, 4, 5, 10, 11, 12]),
acts=np.array([100, 102, 103, 104, 105, 106]),
next_obs=np.array([1, 5, 6, 11, 12, 13]),
dones=np.array([True, False, True, False, False, False]),
infos=np.array([{}] * 6),
)
trans_mapping = [
{
"obs": np.array([0, 4]),
"acts": np.array([100, 102]),
"next_obs": np.array([1, 5]),
"dones": np.array([True, False]),
"infos": np.array([{}, {}]),
},
{
"obs": np.array([5, 10]),
"acts": np.array([103, 104]),
"next_obs": np.array([6, 11]),
"dones": np.array([True, False]),
"infos": np.array([{}, {}]),
},
{
"obs": np.array([11, 12]),
"acts": np.array([105, 106]),
"next_obs": np.array([12, 13]),
"dones": np.array([False]),
"infos": np.array([{}, {}]),
},
]

for data in [trajs, trans, trans_mapping]:
data_loader = base.make_data_loader(
data,
batch_size=2,
data_loader_kwargs=dict(shuffle=False, drop_last=False),
)
for batch, expected_batch in zip(data_loader, trans_mapping):
assert batch.keys() == expected_batch.keys()
for k in batch.keys():
v = batch[k]
if isinstance(v, th.Tensor):
v = v.numpy()
assert np.all(v == expected_batch[k])

  1. Of course you don’t have to generate the demonstrations. This is just done in the examples to make them more self-contained. You can pass your trajectories as a sequence of imitation.data.types.Trajectory to GAIL/AIRL.