跳转至

Evaluation

Evaluation模块用于实时评估车辆所处的场景。其包含了五个维度的评价指标,评价结果可以用于决策,也可以用于场景提取,为后续的测试提供数据。

下面我们分别介绍这五个维度

Consumption

我们应用如下公式来计算车辆的能量消耗情况:

\[ P = (v*a)^2 + v^3 \]

这里 \(v\)\(a\) 分别是车辆的速度和加速度。

自由驾驶(巡航)情况下,车辆速度较大,加速度较小,整体能耗较高,速度占主导项; 当前方有紧急情况需要刹车时,速度急剧变小,加速度比较大,整体能耗消耗较低但是出现不连续变化。

Collision

我们使用二维TTC(Time-to-Collision)来计算可能的碰撞, 二维TTC定义为:假设两车以当前的速度的和方向继续行驶,两车碰撞所需要的时间。 TTC显示了潜在的碰撞危险,其可以用来评估轨迹规划算法的安全性。

这里我们参考了nuplan的实现并根据数据格式进行了简化。

Orientation

我们用车辆偏离车道中心线的方向(速度方向与车道中心线的夹角)作为orientation。

\[ (\sin(\theta_{ego}) - \sin(\theta_{ref}))^2 \]

其中,\(\theta_{ego}\)\(\theta_{ref}\) 分别是自车和自车在参考线上投影点的角度(世界坐标系),这里有三点需要注意: 1. 为了展示方便,我们使用 \(\sin\) 进行归一化 2. 在路口内考虑偏向角意义不大,因此这里的 \(\theta_{ref}\) 实际上指的是“历史轨迹中,最近的,在NormalLane上对应的点” 3. 同样是为了展示方便,我们增加了delay项,使得转弯显示地更加顺滑。

orientation可以体现出车辆的转弯行为,特别是需要无保护左转场景时,可以利用Orientation的结果筛选出一些场景来进行测试。

Discomfort

我们用jerk 的平方来表示discomfort,

\[ \left(\frac{da}{dt}\right)^2 \]

这里 \(a\) 是加速度。 jerk可以表现出车辆在运动时出现的急刹以及突然启动对乘客的影响。

Offset

我们以车辆偏离车道中心线(在junction里面,我们不会计算此项)距离的平方作为offset。

\[ d^2 \]

这里 \(d\) 是车辆在Frenet坐标系下的横坐标(lateral coordinate).

offset可以用以检测车辆变道的行为。由于LimSim 提供的默认规划器是建立在frenet坐标系下的,因此这一项可以很方便地计算出来。

Visualization

我们使用五星图来可视化上面五个维度的结果,为了使结果表现出一致性,我们对结果进行了适当的变换。

Data Retrieval

我们将实时评估的结果存储在数据库中,用以进行场景提取和分析。我们可以使用如下代码将评估结果转化为DataFrame:

from utils.load_data import load_data_from_database

evaluation_df = load_data_from_data_base(path_to_data_base, 'evaluation')