巡线任务

任务介绍

在CyberTorcs中,巡线任务被定义为让自控车辆沿着道路中线前进的任务,主要用于测试控制算法的精度和稳定性。

在具体实验过程中,一般会随机选取5~6条赛道,要求编写一套算法,能让自控车辆沿着赛道跑完全程,并记录运行过程中的一些物理量的数值,作为量化评价算法效果的指标。

预瞄点计算示意图

评价规则

CyberTorcs在评价模型的巡线表现时,使用了以下定量表达式:

  • 速度:使用单圈完成时间和碰撞损失之和表示
\[ \textrm{Total_T} = \textrm{Time} + \textrm{Damage} / 10 \]
  • 精度:用车体偏离道路中线的偏差表示,在时间纬度上进行累积,为了去除距离的量纲除以车长
\[ \textrm{Total_E} = \textrm{Error} / \textrm{CarLength} \]

总评分 \(\textrm{Total_T&E}\)为上述两个指标的加权求和,速度指标除以4是经验值。

\[ \textrm{Total_T&E} = \textrm{Total_T} / 4 + \textrm{Total_E} \]
/* 以下为Total_E中Error的具体计算方式 */

float error = 0;

double midlineError = \
    sqrt(midline[0][0] * midline[0][0] + midline[0][1] * midline[0][1]);

error += abs(midlineError) + \
    abs((abs((carLength / 2.0) * tan(yaw)) + (carWidth / 2.0)) / cos(yaw)) - \
    (carWidth / 2.0);

接口定义

控制模型的输入变量

变量 说明
float midline[k][2] 预瞄点,沿道路中线 k 米处的相对于当前车辆坐标系的坐标值。
例如,(midline[10][0], midline[10][1])
表示沿道路中线前方10米处的点相对于当前车辆坐标系的 (x,y) 坐标,
考虑到实际感知技术的极限,目前设定 k <= 200
float yaw 偏航角(弧度),指车头朝向与车辆中心到道路中心线最近点的切线的夹角。
float yawrate 角速度(弧度/秒)
float speed 车速(公里/小时)
float acc 加速度(米/秒2
float width 道路宽度(米)
float gearbox 档位,选项 {0, 1, 2, 3, 4, 5, 6},0为空挡。
float rpm 发动机转速(转/分钟)

控制模型的输出变量

变量 说明
float *cmdAcc 油门控制,范围 [0.0, 1.0],0.0 表示不踩油门,1.0表示踩满油门。
float *cmdBrake 刹车控制,范围 [0.0, 1.0],0.0 表示不踩刹车,1.0表示踩满刹车。
float *cmdSteer 转向控制,范围 [-1.0, 1.0],-1.0 表示方向盘向右打满,1.0表示方向盘向左打满。
float *cmdGear 变速箱档位,选项 {0, 1, 2, 3, 4, 5, 6},0为空挡。