From c484cbb09d445e2ab30ea011c6d2ffd87202bb26 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 23 十月 2020 18:05:34 +0800
Subject: [PATCH] 添加可用户配置的评判参数。

---
 lib/src/main/cpp/test_items2/road_exam.cpp |   75 ++++++++++++++-----------------------
 1 files changed, 29 insertions(+), 46 deletions(-)

diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index 0a3f627..f3164f5 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -69,11 +69,6 @@
 static const int CROSSING_TURN_THRESHOLD = 35;
 static const int TURN_THRESHOLD = 3;
 
-const double SLIDE_DISTANCE_THRESHOLD_RED = 0.3;
-const double SLIDE_DISTANCE_THRESHOLD_YELLOW = 0.1;
-
-const double EXAM_RANGE = 2700.0;                       // 鑷冲皯椹鹃┒璺濈
-
 static bool occurOverSpeed;
 static bool occurSecondBreak;
 
@@ -137,18 +132,6 @@
 static int startTurnYaw, prevYaw;
 static int turnCnt, turnTimeCnt;
 static int prevTurnWise;
-
-static const uint32_t GEAR_N_SLIDE_TIMEOUT = D_SEC(10);
-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_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);
-
-
-static const double MAX_SPEED = 60.0 * 1000.0 / 3600.0;         // 瓒呴�熺‘璁�
-static const double DEC_MAX_SPEED = 55.0 * 1000.0 / 3600.0;     // 瓒呴�熷彇娑�
-static const int SPEED_GEAR_TABLE[][2] = {{0, 20}, {5, 30}, {15, 40}, {25, 10000}, {35, 10000}};
 
 static void ItemExam(road_exam_map &RoadMap, int roadIndex, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime, double straight, double road_end);
 static void ItemExam2(road_exam_map &RoadMap, int roadIndex, const car_model *car, LIST_CAR_MODEL &CarModelList);
@@ -901,7 +884,7 @@
                 checkCrashGreenTimeout = 1;
                 crashGreenRunTime = *rtkTime;           // 杩愬姩涓帇铏氱嚎鐨勫紑濮嬫椂闂寸偣
             } else if (checkCrashGreenTimeout == 1) {
-                if (TimeGetDiff(rtkTime, &crashGreenRunTime) >= CRASH_DOTTED_LINE_TIMEOUT) {
+                if (TimeGetDiff(rtkTime, &crashGreenRunTime) >= examParam.crash_dotted_line_cumulative_time) {
                     DEBUG("闀挎椂闂村帇铏氱嚎");
                     checkCrashGreenTimeout = 2;
                     // 闀挎椂闂撮獞杞ц溅閬撳垎鐣岀嚎琛岄┒锛屼笉鍚堟牸
@@ -946,7 +929,7 @@
                     // 娌℃墦鐏紝涓嶅悎鏍�
                     AddExamFault(13, rtkTime);
                 } else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) <
-                           TURN_SIGNAL_LAMP_ADVANCE) {
+                           examParam.turn_signal_min_advance) {
                     DEBUG("杞悜鐏椂闂翠笉瓒� %02d-%02d-%02d %02d:%02d:%02d.%03d  -> %02d-%02d-%02d %02d:%02d:%02d.%03d",
                           crashGreenStartTime.YY, crashGreenStartTime.MM, crashGreenStartTime.DD,
                           crashGreenStartTime.hh, crashGreenStartTime.mm, crashGreenStartTime.ss,
@@ -963,7 +946,7 @@
                     // 娌℃墦鐏紝涓嶅悎鏍�
                     AddExamFault(13, rtkTime);
                 } else if (TimeGetDiff(&crashGreenStartTime, &turnSignalStatus.time) <
-                           TURN_SIGNAL_LAMP_ADVANCE) {
+                        examParam.turn_signal_min_advance) {
                     DEBUG("杞悜鐏椂闂翠笉瓒� %02d-%02d-%02d %02d:%02d:%02d.%03d  -> %02d-%02d-%02d %02d:%02d:%02d.%03d",
                           crashGreenStartTime.YY, crashGreenStartTime.MM, crashGreenStartTime.DD,
                           crashGreenStartTime.hh, crashGreenStartTime.mm, crashGreenStartTime.ss,
@@ -975,7 +958,7 @@
                 }
             }
 
-            if (((ChangeLane.gain < 0 && gain < 0) || (ChangeLane.gain > 0 && gain > 0)) && TimeGetDiff(rtkTime, &ChangeLane.time) < CHANGE_LANE_MIN_INTERVAL) {
+            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);
             }
@@ -1196,23 +1179,23 @@
                 switch (act) {
                     case ROAD_ACTIVE_FORWARD:
                         DEBUG("璺彛鎻愮ず 鐩磋");
-                        PlayTTS("鍓嶆柟璺彛璇风洿琛�", NULL);
+                        PlayTTS(examParam.crossing_go_straight_tts, NULL);
                         break;
                     case ROAD_ACTIVE_TURN_LEFT:
                         DEBUG("璺彛鎻愮ず 宸﹁浆");
-                        PlayTTS("鍓嶆柟璺彛璇峰乏杞�", NULL);
+                        PlayTTS(examParam.crossing_turn_left_tts, NULL);
                         break;
                     case ROAD_ACTIVE_TURN_RIGHT:
                         DEBUG("璺彛鎻愮ず 鍙宠浆");
-                        PlayTTS("鍓嶆柟璺彛璇峰彸杞�", NULL);
+                        PlayTTS(examParam.crossing_turn_right_tts, NULL);
                         break;
                     case ROAD_ACTIVE_TURN_BACKWARD:
                         DEBUG("璺彛鎻愮ず 鎺夊ご");
-                        PlayTTS("鍓嶆柟璺彛璇锋帀澶�", NULL);
+                        PlayTTS(examParam.crossing_turn_back_tts, NULL);
                         break;
                     default:
                         DEBUG("璺彛鎻愮ず 鏈厤缃�");
-                        PlayTTS("鍓嶆柟璺彛鍚暀缁冩寚浠�", NULL);
+                        PlayTTS(examParam.crossing_turn_unknown_tts, NULL);
                         break;
                 }
             }
@@ -1308,14 +1291,14 @@
         RingBreak();
 
         // 瓒呴�熸娴�
-        if (speed > MAX_SPEED) {
+        if (ConvertMs2KMh(speed) > examParam.road_max_speed) {
             if (!occurOverSpeed) {
                 occurOverSpeed = true;
                 // 瓒呴�燂紝涓嶅悎鏍�
                 DEBUG("瓒呴�� %f", ConvertMs2KMh(speed));
                 AddExamFault(10, rtkTime);
             }
-        } else if (speed < DEC_MAX_SPEED) {
+        } else if (ConvertMs2KMh(speed) < examParam.road_max_speed - 5) {
             occurOverSpeed = false;
         }
 
@@ -1358,32 +1341,32 @@
                 }
                 break;
             case GEAR_1:
-                if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[0][0] ||
-                    ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[0][1]) {
+                if (ConvertMs2KMh(speed) < examParam.gear_speed_table[0][0] ||
+                    ConvertMs2KMh(speed) > examParam.gear_speed_table[0][1]) {
                     currGearError = true;
                 }
                 break;
             case GEAR_2:
-                if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[1][0] ||
-                    ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[1][1]) {
+                if (ConvertMs2KMh(speed) < examParam.gear_speed_table[1][0] ||
+                    ConvertMs2KMh(speed) > examParam.gear_speed_table[1][1]) {
                     currGearError = true;
                 }
                 break;
             case GEAR_3:
-                if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[2][0] ||
-                    ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[2][1]) {
+                if (ConvertMs2KMh(speed) < examParam.gear_speed_table[2][0] ||
+                    ConvertMs2KMh(speed) > examParam.gear_speed_table[2][1]) {
                     currGearError = true;
                 }
                 break;
             case GEAR_4:
-                if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[3][0] ||
-                    ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[3][1]) {
+                if (ConvertMs2KMh(speed) < examParam.gear_speed_table[3][0] ||
+                    ConvertMs2KMh(speed) > examParam.gear_speed_table[3][1]) {
                     currGearError = true;
                 }
                 break;
             case GEAR_5:
-                if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[4][0] ||
-                    ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[4][1]) {
+                if (ConvertMs2KMh(speed) < examParam.gear_speed_table[4][0] ||
+                    ConvertMs2KMh(speed) > examParam.gear_speed_table[4][1]) {
                     currGearError = true;
                 }
                 break;
@@ -1398,7 +1381,7 @@
                 gearNSlideTimePoint = *rtkTime;
             }
             if (GearNSlideStatus == 1 &&
-                TimeGetDiff(rtkTime, &gearNSlideTimePoint) > GEAR_N_SLIDE_TIMEOUT) {
+                TimeGetDiff(rtkTime, &gearNSlideTimePoint) > examParam.gear_n_allow_time) {
                 // 绌烘。婊戣瓒�5绉掞紝涓嶅悎鏍�
                 DEBUG("鎸′綅婊戣锛岃秴杩�5绉�");
                 AddExamFault(8, rtkTime);
@@ -1415,7 +1398,7 @@
                   ReadCarStatus(GEAR), ConvertMs2KMh(speed));
             gearErrorTime += TimeGetDiff(rtkTime, &gearErrorTimePoint);
         }
-        if (gearErrorTime > GEAR_ERROR_TIMEOUT) {
+        if (gearErrorTime > examParam.gear_speed_error_cumulative_time) {
             // 绱15绉掞紝鎸′綅-杞﹂�熶笉鍖归厤锛屼笉鍚堟牸
             DEBUG("鎸′綅閿欒瓒呰繃15绉�");
             AddExamFault(6, rtkTime);
@@ -1453,7 +1436,7 @@
             prevMoveDirect = moveDirect;
         } else if (moveDirect == 0) {
             // 鎸佺画鍋滆溅
-            if (TimeGetDiff(rtkTime, &stopTimepoint) >= STOP_CAR_TIME && !StopCarOnRedArea &&
+            if (TimeGetDiff(rtkTime, &stopTimepoint) >= examParam.road_pause_criteria && !StopCarOnRedArea &&
                 StopOnRedArea(RoadMap, car)) {
                 // 鍋滆溅瓒�2绉掞紝鍋滃湪绾㈠尯锛屼笉鍚堟牸
                 AddExamFault(16, rtkTime);
@@ -1465,11 +1448,11 @@
             if (occurSlide) {
                 double slideDistance = DistanceOf(stopPoint, car->basePoint);
 
-                if (slideDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) {
+                if (slideDistance > examParam.road_slide_yellow_distance) {
                     slideNormalDistance = true;
                 }
 
-                if (slideDistance > SLIDE_DISTANCE_THRESHOLD_RED && !slideLongDistance) {
+                if (slideDistance > examParam.road_slide_red_distance && !slideLongDistance) {
                     // 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍�
                     AddExamFault(5, rtkTime);
                     DEBUG("鍚庢粦瓒呰繃30鍘樼背");
@@ -1629,7 +1612,7 @@
             }
 
             if (!not_complete) {
-                if (road_end > 200 && ReadOdo() > EXAM_RANGE) {
+                if (road_end > 200 && ReadOdo() > examParam.road_total_distance) {
                     RoadExamStatus = ROAD_EXAM_ITEM_CAR_STOP;
                     StartStopCarExam();
                     return;
@@ -1818,7 +1801,7 @@
                         // 娌℃墦鐏紝涓嶅悎鏍�
                         AddExamFault(13, rtkTime);
                     } else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) <
-                               TURN_SIGNAL_LAMP_ADVANCE) {
+                            examParam.turn_signal_min_advance) {
                         DEBUG("杞悜鐏椂闂翠笉瓒�");
                         // 涓嶈冻3绉掞紝涓嶅悎鏍�
                         AddExamFault(14, rtkTime);
@@ -1829,7 +1812,7 @@
                         // 娌℃墦鐏紝涓嶅悎鏍�
                         AddExamFault(13, rtkTime);
                     } else if (TimeGetDiff(&beginTurnTime, &turnSignalStatus.time) <
-                               TURN_SIGNAL_LAMP_ADVANCE) {
+                            examParam.turn_signal_min_advance) {
                         DEBUG("杞悜鐏椂闂翠笉瓒�");
                         // 涓嶈冻3绉掞紝涓嶅悎鏍�
                         AddExamFault(14, rtkTime);

--
Gitblit v1.8.0