From b3608d75b6dd9d74aa1a71e1a2ef2a970e6a050c Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期三, 18 三月 2020 23:29:48 +0800
Subject: [PATCH] 挡位匹配.
---
lib/src/main/cpp/test_items2/road_exam.cpp | 65 +++++++++++++++++++++++++++++++-
1 files changed, 62 insertions(+), 3 deletions(-)
diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index c0b82e3..80da3de 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -22,6 +22,8 @@
static const int TURN_THRESHOLD = 10;
static const int TURN_CHECK_INTERVAL = D_SEC(1);
+const double SLIDE_DISTANCE_THRESHOLD_RED = 0.3;
+const double SLIDE_DISTANCE_THRESHOLD_YELLOW = 0.1;
static bool occurCrashRedLine;
static bool occurCrashGreenLine;
@@ -36,6 +38,10 @@
static bool reportStopCarOnRedArea;
static PointF stopPoint;
+static bool slideLongDistance;
+static bool slideNormalDistance;
+static bool occurSlide;
+
static struct drive_timer {
int hour;
int min;
@@ -49,6 +55,7 @@
static const uint32_t TURN_SIGNAL_LAMP_ADVANCE = D_SEC(3);
static const double MAX_SPEED = 40.0 * 1000.0 / 3600.0;
+static const int SPEED_SHIFT_TABLE[][2] = {{0, 20}, {5, 30}, {15, 40}, {25, 10000}, {35, 10000}};
static void Rtk2DirveTimer(struct drive_timer &tm, const struct RtkTime *rtkTime);
static char isTurn(int currYaw, int prevYaw);
@@ -71,6 +78,9 @@
prevMoveDirect = 0;
reportStopCarOnRedArea = false;
+ occurSlide = false;
+ slideLongDistance = false;
+ slideNormalDistance = false;
}
void TestRoadGeneral(LIST_ROAD_MAP &RoadMapList, const car_model *car, LIST_CAR_MODEL &CarModelList, double speed, int moveDirect, const struct RtkTime *rtkTime)
@@ -85,14 +95,40 @@
occurOverSpeed = false;
}
+ // 鎸′綅鍖归厤妫�娴�
+ switch (ReadCarStatus(SHIFT)) {
+ case SHIFT_N:
+ if (moveDirect != 0) {
+
+ }
+ break;
+ case SHIFT_1:
+ if (ConvertMs2KMs(speed) < SPEED_SHIFT_TABLE[0][0] || ConvertMs2KMs(speed) > SPEED_SHIFT_TABLE[0][1]) {
+
+ }
+ break;
+ case SHIFT_2:
+ break;
+ case SHIFT_3:
+ break;
+ case SHIFT_4:
+ break;
+ case SHIFT_5:
+ break;
+ default:break;
+ }
+
+ // 璧锋鍚庢粦
if (moveDirect != prevMoveDirect) {
if (moveDirect == 0) {
stopTimepoint = TimeMakeComposite(rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss*10);
reportStopCarOnRedArea = false;
DEBUG("鍋滆溅浜� %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
- } else if (moveDirect == -1) {
-
+ } else if (moveDirect == -1 && prevMoveDirect == 0) {
+ DEBUG("寮�濮嬪悗婊�");
+ stopPoint = car->basePoint;
+ occurSlide = true;
}
prevMoveDirect = moveDirect;
} else if (moveDirect == 0) {
@@ -104,8 +140,31 @@
DEBUG("涓�斿仠杞�");
reportStopCarOnRedArea = true;
}
+ } else if (moveDirect == -1) {
+ if (occurSlide) {
+ double slideDistance = DistanceOf(stopPoint, car->basePoint);
- stopPoint = car->basePoint;
+ if (slideDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) {
+ slideNormalDistance = true;
+ }
+
+ if (slideDistance > SLIDE_DISTANCE_THRESHOLD_RED && !slideLongDistance) {
+ // 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍�
+ AddExamFault(5, rtkTime);
+ DEBUG("鍚庢粦瓒呰繃30鍘樼背");
+ slideLongDistance = true;
+ }
+ }
+ } else {
+ if (slideNormalDistance) {
+ // 鍚庢粦锛屾墸10鍒�
+ AddExamFault(18, rtkTime);
+ DEBUG("鍚庢粦瓒呰繃10鍘樼背, 浣嗕笉瓒呰繃30鍘樼背");
+ }
+
+ slideNormalDistance = false;
+ slideLongDistance = false;
+ occurSlide = false;
}
switch (ReadCarStatus(TURN_SIGNAL_LAMP)) {
--
Gitblit v1.8.0