| | |
| | | if (newLineType >= 100) { |
| | | newLineType -= 100; |
| | | DEBUG("非法跨越分道线"); |
| | | AddExamFault(11, rtkTime); |
| | | AddExamFault(30119, rtkTime); |
| | | } |
| | | if (newLineType == LINE_SOLID && CrashLineType != LINE_SOLID) { |
| | | // 车辆行驶中骑轧车道中心实线或者车道边缘实线,不合格 |
| | | DEBUG("撞道路边缘线"); |
| | | AddExamFault(11, rtkTime); |
| | | AddExamFault(30119, rtkTime); |
| | | } |
| | | if (newLineType == LINE_BOUNDARY && CrashLineType != LINE_BOUNDARY) { |
| | | // 车辆越界,逃跑了,不合格 |
| | | DEBUG("车辆越界"); |
| | | AddExamFault(3, rtkTime); |
| | | AddExamFault(30103, rtkTime); |
| | | } |
| | | |
| | | if (newLineType == LINE_DOTTED || newLineType == LINE_HALF_SOLID_LEFT || newLineType == LINE_HALF_SOLID_RIGHT) { |
| | |
| | | DEBUG("长时间压虚线"); |
| | | checkCrashGreenTimeout = 2; |
| | | // 长时间骑轧车道分界线行驶,不合格 |
| | | AddExamFault(12, rtkTime); |
| | | AddExamFault(30120, rtkTime); |
| | | } |
| | | } |
| | | } else { |
| | |
| | | if (turnSignalStatus.value != LEFT_TURN_LIGHT) { |
| | | DEBUG("变调未打灯!!"); |
| | | // 没打灯,不合格 |
| | | AddExamFault(13, rtkTime); |
| | | AddExamFault(30121, rtkTime); |
| | | } else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) < |
| | | examParam.turn_signal_min_advance) { |
| | | DEBUG("转向灯时间不足 %02d-%02d-%02d %02d:%02d:%02d.%03d -> %02d-%02d-%02d %02d:%02d:%02d.%03d", |
| | |
| | | turnSignalStatus.time.mm, turnSignalStatus.time.ss, turnSignalStatus.time.mss * 10); |
| | | |
| | | // 不足3秒,不合格 |
| | | AddExamFault(14, rtkTime); |
| | | AddExamFault(30122, rtkTime); |
| | | } |
| | | } else { |
| | | if (turnSignalStatus.value != RIGHT_TURN_LIGHT) { |
| | | DEBUG("变调未打灯!!"); |
| | | // 没打灯,不合格 |
| | | AddExamFault(13, rtkTime); |
| | | AddExamFault(30121, rtkTime); |
| | | } else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) < |
| | | examParam.turn_signal_min_advance) { |
| | | DEBUG("转向灯时间不足 %02d-%02d-%02d %02d:%02d:%02d.%03d -> %02d-%02d-%02d %02d:%02d:%02d.%03d", |
| | |
| | | turnSignalStatus.time.YY, turnSignalStatus.time.MM, turnSignalStatus.time.DD, turnSignalStatus.time.hh, |
| | | turnSignalStatus.time.mm, turnSignalStatus.time.ss, turnSignalStatus.time.mss * 10); |
| | | // 不足3秒,不合格 |
| | | AddExamFault(14, rtkTime); |
| | | AddExamFault(30122, rtkTime); |
| | | } |
| | | } |
| | | |
| | | if (((ChangeLane.gain < 0 && gain < 0) || (ChangeLane.gain > 0 && gain > 0)) && TimeGetDiff(rtkTime, &ChangeLane.time) < examParam.continuous_change_lane_min_time) { |
| | | DEBUG("连续变道"); |
| | | AddExamFault(15, rtkTime); |
| | | AddExamFault(30125, rtkTime); |
| | | } |
| | | ChangeLane.gain = gain; |
| | | ChangeLane.time = *rtkTime; |
| | |
| | | occurOverSpeed = true; |
| | | // 超速,不合格 |
| | | DEBUG("超速 %f", ConvertMs2KMh(speed)); |
| | | AddExamFault(10, rtkTime); |
| | | AddExamFault(30118, rtkTime); |
| | | } |
| | | } else if (ConvertMs2KMh(speed) < examParam.road_max_speed - 5) { |
| | | occurOverSpeed = false; |
| | |
| | | if (!occurSecondBreak) { |
| | | DEBUG("副刹车动作了"); |
| | | occurSecondBreak = true; |
| | | AddExamFault(17, rtkTime); |
| | | AddExamFault(30132, rtkTime); |
| | | } |
| | | } else { |
| | | occurSecondBreak = false; |
| | |
| | | if (currGear != GEAR_N && prevGear == GEAR_N) { |
| | | // 一次换挡 |
| | | if (gearChange == currGear && TimeGetDiff(rtkTime, &gearChangeTimePoint) < D_SEC(5)) { |
| | | AddExamFault(7, rtkTime); |
| | | AddExamFault(30113, rtkTime); |
| | | } |
| | | |
| | | gearChange = currGear; |
| | |
| | | TimeGetDiff(rtkTime, &gearNSlideTimePoint) > examParam.gear_n_allow_time) { |
| | | // 空档滑行超5秒,不合格 |
| | | DEBUG("挡位滑行,超过5秒"); |
| | | AddExamFault(8, rtkTime); |
| | | AddExamFault(30114, rtkTime); |
| | | GearNSlideStatus = 2; |
| | | } |
| | | } else if (GearNSlideStatus != 0) { |
| | |
| | | if (gearErrorTime > examParam.gear_speed_error_cumulative_time) { |
| | | // 累计15秒,挡位-车速不匹配,不合格 |
| | | DEBUG("挡位错误超过15秒"); |
| | | AddExamFault(6, rtkTime); |
| | | AddExamFault(30112, rtkTime); |
| | | gearErrorTime = 0; |
| | | } |
| | | |
| | |
| | | |
| | | if (slideNormalDistance) { |
| | | // 后滑,扣10分 |
| | | AddExamFault(18, rtkTime); |
| | | AddExamFault(30202, rtkTime); |
| | | DEBUG("后滑超过10厘米, 但不超过30厘米"); |
| | | } |
| | | |
| | |
| | | if (TimeGetDiff(rtkTime, &stopTimepoint) >= CorrectPauseCriteria(examParam.road_pause_criteria) && !StopCarOnRedArea && |
| | | StopOnRedArea(RoadMap, car)) { |
| | | // 停车超2秒,停在红区,不合格 |
| | | AddExamFault(16, rtkTime); |
| | | AddExamFault(30128, rtkTime); |
| | | DEBUG("禁停区停车"); |
| | | StopCarOnRedArea = true; |
| | | } |
| | |
| | | |
| | | if (slideDistance > examParam.road_slide_red_distance && !slideLongDistance) { |
| | | // 后滑超过30厘米, 不合格 |
| | | AddExamFault(5, rtkTime); |
| | | AddExamFault(30107, rtkTime); |
| | | DEBUG("后滑超过30厘米"); |
| | | slideLongDistance = true; |
| | | slideNormalDistance = false; |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | ExitTarget(RoadMap, car, CarModelList, rtkTime); |
| | | |
| | | if (RoadMap.calibrate == 0) { |
| | |
| | | if (!GetErrorLaneRpt(currExamMapIndex, stop_line_index)) { |
| | | DEBUG("不按规定车道标向行驶 %d: %d 期望 = %d guide = %d", currExamMapIndex, |
| | | stop_line_index, act, Lane.guide); |
| | | AddExamFault(9, rtkTime); |
| | | AddExamFault(30117, rtkTime); |
| | | SetErrorLaneRpt(currExamMapIndex, stop_line_index, true); |
| | | } |
| | | } |
| | |
| | | |
| | | road_end_point_t ep = NearbyRoadEndPoint(currExamMapIndex, RoadMap, car); |
| | | // 提示路口怎么走 |
| | | HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance); |
| | | if (forward == 1) { |
| | | HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance); |
| | | } |
| | | |
| | | double freeSepDis = SeparateLength(RoadMap, Lane, car); |
| | | |
| | |
| | | freeRunExceptDistance = 60.0; |
| | | } else if (RoadExamStatus == ROAD_EXAM_ITEM_CAR_STOP) { |
| | | // 考试结束 |
| | | MA_SendExamStatus(1, 1); |
| | | MA_SendExamStatus(0, 0); |
| | | PlayTTS("考试结束", NULL); |
| | | } else { |
| | | freeRunExceptDistance = 2;//250.0; |
| | | } |
| | |
| | | if (turnSignalStatus.value != LEFT_TURN_LIGHT) { |
| | | DEBUG("变调未打灯!!"); |
| | | // 没打灯,不合格 |
| | | AddExamFault(13, rtkTime); |
| | | AddExamFault(30121, rtkTime); |
| | | } else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) < |
| | | examParam.turn_signal_min_advance) { |
| | | DEBUG("转向灯时间不足"); |
| | | // 不足3秒,不合格 |
| | | AddExamFault(14, rtkTime); |
| | | AddExamFault(30122, rtkTime); |
| | | } |
| | | } else { |
| | | if (turnSignalStatus.value != RIGHT_TURN_LIGHT) { |
| | | DEBUG("变调未打灯!!"); |
| | | // 没打灯,不合格 |
| | | AddExamFault(13, rtkTime); |
| | | AddExamFault(30121, rtkTime); |
| | | } else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) < |
| | | examParam.turn_signal_min_advance) { |
| | | DEBUG("转向灯时间不足"); |
| | | // 不足3秒,不合格 |
| | | AddExamFault(14, rtkTime); |
| | | AddExamFault(30122, rtkTime); |
| | | } |
| | | } |
| | | } else if (turnTimeCnt > D_SEC(10)) { |
| | |
| | | } |
| | | } |
| | | |
| | | // DEBUG("检查触发点 道 %d 路 %d", RoadMap.examScheme[0].triggerLines[0].road, RoadMap.roads[index].id); |
| | | |
| | | for (int j = 0; j < RoadMap.examScheme[0].triggerLines.size(); ++j) { |
| | | if (RoadMap.examScheme[0].triggerLines[j].road == RoadMap.roads[index].id) { |
| | | |
| | |
| | | |
| | | TriggerDetect.insert(pair<int, trigger_detect_t>(j, up)); |
| | | |
| | | DEBUG("观察子<%d> 加入 %f", j, MAX(dist1, dist2)); |
| | | DEBUG("观察子<%d> road_id %d 加入 (%f,%f)", j, RoadMap.roads[index].id, RoadMap.examScheme[0].triggerLines[j].points[0].X, RoadMap.examScheme[0].triggerLines[j].points[0].Y); |
| | | } |
| | | } |
| | | } |