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