From 27c78b3431a38878b8c8b1b81c79694cea4a2bcf Mon Sep 17 00:00:00 2001 From: yy1717 <fctom1215@outlook.com> Date: 星期四, 23 七月 2020 10:07:51 +0800 Subject: [PATCH] 20200723 --- lib/src/main/cpp/test_items2/road_exam.cpp | 69 ++++++++++++++++++++++++++++++---- 1 files changed, 61 insertions(+), 8 deletions(-) diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp index f7b028d..4b9a859 100644 --- a/lib/src/main/cpp/test_items2/road_exam.cpp +++ b/lib/src/main/cpp/test_items2/road_exam.cpp @@ -48,7 +48,7 @@ const double SLIDE_DISTANCE_THRESHOLD_YELLOW = 0.1; const double CHANGE_LANE_RANGE = 100.0; const double OVERTAKE_RANGE = 150.0; -const double OVERTAKE_HOLD_RANGE = 30.0; // 鍦ㄨ秴杞﹂亾琛岄┒鐨勪竴娈佃窛绂� +const int OVERTAKE_HOLD_TIME = D_SEC(11); // 鍦ㄨ秴杞﹂亾琛岄┒鐨勪竴娈垫椂闂� const double EXAM_RANGE = 3000.0; // 鑷冲皯椹鹃┒璺濈 static const double LASTEST_BREAK_POINT = 30.0; @@ -84,6 +84,7 @@ static struct drive_timer gearErrorTimePoint; static struct drive_timer gearNSlideTimePoint; static struct drive_timer startCarLeftTurnSignalTime; +static struct drive_timer overTakeCmpTime; static int gearErrorTime; static int gearNSlideTime; @@ -95,7 +96,7 @@ static PointF roadItemStartPoint; static struct drive_timer roadItemStartTime; static bool overtake = false; - +static bool checkTurn = false; static bool checkDoor = false; static bool handBreakActive = false; static bool reportRPMOver = false; @@ -122,7 +123,7 @@ static const uint32_t GEAR_N_SLIDE_TIMEOUT = D_SEC(5); static const uint32_t GEAR_ERROR_TIMEOUT = D_SEC(15); static const uint32_t STOP_CAR_TIME = D_SEC(2); -static const uint32_t CHANGE_ROAD_MIN_INTERVAL = D_SEC(10); +static const uint32_t CHANGE_LANE_MIN_INTERVAL = D_SEC(10); static const uint32_t CRASH_DOTTED_LINE_TIMEOUT = D_SEC(10); static const uint32_t TURN_SIGNAL_LAMP_ADVANCE = D_SEC(3); @@ -200,6 +201,7 @@ laneChanging = false; nextRoadId = -1; + checkTurn = false; ClearAll(RoadMap); odoGraph = 0.0; @@ -584,6 +586,7 @@ free(area.point); } if (currExamMapIndex == FIND_POSITION) { + DEBUG("鎼滅储閬撹矾"); for (int i = 0; i < RoadMap.roads.size(); ++i) { Polygon area; int n = 0; @@ -633,13 +636,14 @@ AddExamFault(3, rtkTime); } nextRoadId = -1; + checkTurn = false; break; } free(area.point); } if (currExamMapIndex < 0) { - currExamMapIndex = INVALID_POSITION; + currExamMapIndex = FIND_POSITION;//INVALID_POSITION; DEBUG("鎼滃鏈灉"); } } else if (currExamMapIndex == INVALID_POSITION) { @@ -701,7 +705,7 @@ crashGreenCmpTime.sec, crashGreenCmpTime.msec * 10); - if (diff < CHANGE_ROAD_MIN_INTERVAL) { + if (diff < CHANGE_LANE_MIN_INTERVAL) { DEBUG("===================== 杩炵画鍙橀亾 ============!!"); // 杩炵画鍙橀亾锛屼笉鍚堟牸 AddExamFault(15, rtkTime); @@ -763,7 +767,8 @@ } else if (currRoadItem != NULL && currRoadItem->active == ROAD_ITEM_OVERTAKE) { if (CurrentLane.lane > lane.lane) { DEBUG("瓒呰溅鍙橀亾瀹屾垚"); - + overtake = true; + Rtk2DriveTimer(overTakeCmpTime, rtkTime); } else { DEBUG("鍙抽亾瓒呰溅锛岄敊璇�"); AddExamFault(3, rtkTime); @@ -802,6 +807,51 @@ if (CrashTheLine(RoadMap.roads[currExamMapIndex].stopLine, car, CarModelList)) { DEBUG("涓嬩竴涓洰鏍囪矾 id = %d", RoadMap.roads[currExamMapIndex].targetRoad); nextRoadId = RoadMap.roads[currExamMapIndex].targetRoad; + checkTurn = true; + } + + if (checkTurn) { + // 妫�鏌ユ槸鍚︽寔缁浆鍚� + char turnDirect = CheckCarTurn(CarModelList); + if (turnDirect == 'L') { +// PlayTTS("宸�1"); + if (currTurnSignalStatus != LEFT_TURN_LIGHT) { + if (!reportTurnSignalError) { + DEBUG("娌℃墦宸﹁浆鐏�"); + // 娌℃墦宸﹁浆鐏紝涓嶅悎鏍� + reportTurnSignalError = true; + ReportTurnSignalError(13, rtkTime); + } + } else if (TimeGetDiff(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10, + turnSignalChangeTime.hour, turnSignalChangeTime.min, turnSignalChangeTime.sec, turnSignalChangeTime.msec*10) < TURN_SIGNAL_LAMP_ADVANCE) { + if (!reportTurnSignalError) { + DEBUG("杞悜鐏椂闂翠笉瓒�"); + // 涓嶈冻3绉掞紝涓嶅悎鏍� + reportTurnSignalError = true; + ReportTurnSignalError(14, rtkTime); + } + } + } else if (turnDirect == 'R') { +// PlayTTS("鍙�1"); + if (currTurnSignalStatus != RIGHT_TURN_LIGHT) { + if (!reportTurnSignalError) { + DEBUG("娌℃墦鍙宠浆鐏�"); + // 娌℃墦鍙宠浆鐏紝涓嶅悎鏍� + reportTurnSignalError = true; + ReportTurnSignalError(13, rtkTime); + } + } else if (TimeGetDiff(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10, + turnSignalChangeTime.hour, turnSignalChangeTime.min, turnSignalChangeTime.sec, turnSignalChangeTime.msec*10) < TURN_SIGNAL_LAMP_ADVANCE) { + if (!reportTurnSignalError) { + DEBUG("杞悜鐏椂闂翠笉瓒�"); + // 涓嶈冻3绉掞紝涓嶅悎鏍� + reportTurnSignalError = true; + ReportTurnSignalError(14, rtkTime); + } + } + } else { + reportTurnSignalError = false; + } } } @@ -882,7 +932,10 @@ DEBUG("瓒呰溅璺濈瓒呮爣"); AddExamFault(3, rtkTime); currRoadItem = NULL; - } else if (overtake && DistanceOf(car->basePoint, roadItemStartPoint) > OVERTAKE_HOLD_RANGE) { + } else if (overtake && TimeGetDiff(rtkTime->hh, rtkTime->mm, rtkTime->ss, + rtkTime->mss * 10, + overTakeCmpTime.hour, overTakeCmpTime.min, + overTakeCmpTime.sec, overTakeCmpTime.msec * 10) > OVERTAKE_HOLD_TIME) { DEBUG("鍥炲師杞﹂亾"); PlayTTS("璇疯繑鍥炲師杞﹂亾"); currRoadItem = NULL; @@ -1484,7 +1537,7 @@ crashGreenCmpTime.hour, crashGreenCmpTime.min, crashGreenCmpTime.sec, crashGreenCmpTime.msec * 10); - if (diff < CHANGE_ROAD_MIN_INTERVAL) { + if (diff < CHANGE_LANE_MIN_INTERVAL) { DEBUG("===================== 杩炵画鍙橀亾 ============!!"); // 杩炵画鍙橀亾锛屼笉鍚堟牸 AddExamFault(15, rtkTime); -- Gitblit v1.8.0