From 611f51ed073de48e83f46d47c82cd5ebe61258d7 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 16 九月 2020 18:14:27 +0800
Subject: [PATCH] 加入地图标定模式
---
lib/src/main/cpp/master/comm_if.h | 14 +
lib/src/main/cpp/test_items2/road_exam.h | 3
lib/src/main/cpp/driver_test.cpp | 45 ++
lib/src/main/cpp/master/comm_if.cpp | 154 ++++++++--
lib/src/main/cpp/native-lib.cpp | 4
lib/src/main/cpp/test_items2/through_something.cpp | 113 ++++---
lib/src/main/cpp/test_items2/road_exam.cpp | 440 +++++++++++++++++++------------
lib/src/main/cpp/rtk_module/rtk.cpp | 2
lib/src/main/cpp/driver_test.h | 30 +
9 files changed, 524 insertions(+), 281 deletions(-)
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index e15aaa6..e596990 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -54,7 +54,8 @@
enum {
TEST_TYPE_AREA = 2,
TEST_TYPE_ROAD_DUMMY_LIGHT,
- TEST_TYPE_ROAD_TRUE_LIGHT
+ TEST_TYPE_ROAD_TRUE_LIGHT,
+ TEST_TYPE_ROAD_CALIBRATE
};
static bool ExamStart = false;
@@ -109,7 +110,8 @@
RoadMap.roads.clear();
RoadMap.specialAreas.clear();
- RoadMap.triggerLines.clear();
+ RoadMap.forbidLines.clear();
+ RoadMap.examScheme.clear();
CarSensorInit();
@@ -192,18 +194,22 @@
vector<road_t>().swap(RoadMap.roads);
vector<special_area_t>().swap(RoadMap.specialAreas);
- vector<trigger_line_t>().swap(RoadMap.triggerLines);
+ vector<forbid_line_t>().swap(RoadMap.forbidLines);
+ vector<scheme_t>().swap(RoadMap.examScheme);
}
-void SetRoadMap(road_exam_map &map)
+void SetRoadMap(road_exam_map &map, vector<scheme_t> &scheme)
{
if (ExamStart) return;
RoadMap.roads.assign(map.roads.begin(), map.roads.end());
RoadMap.specialAreas.assign(map.specialAreas.begin(), map.specialAreas.end());
- RoadMap.triggerLines.assign(map.triggerLines.begin(), map.triggerLines.end());
+// RoadMap.triggerLines.assign(map.triggerLines.begin(), map.triggerLines.end());
RoadMap.forbidLines.assign(map.forbidLines.begin(), map.forbidLines.end());
- DEBUG("寰楀埌鏂扮殑璺�冨湴鍥� 璺暟閲� %d 鐗规畩鍖哄煙鏁伴噺 %d 瑙﹀彂绾挎暟閲� %d 鍏朵粬绂佹绾挎暟閲� %d", RoadMap.roads.size(), RoadMap.specialAreas.size(), RoadMap.triggerLines.size(), RoadMap.forbidLines.size());
+
+ RoadMap.examScheme.assign(scheme.begin(), scheme.end());
+
+ DEBUG("寰楀埌鏂扮殑璺�冨湴鍥� 璺暟閲� %d 鐗规畩鍖哄煙鏁伴噺 %d 鍏朵粬绂佹绾挎暟閲� %d 椤圭洰鏁伴噺 %d", RoadMap.roads.size(), RoadMap.specialAreas.size(), RoadMap.forbidLines.size(), RoadMap.examScheme.size());
}
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
@@ -402,12 +408,18 @@
if (type == TEST_TYPE_ROAD_DUMMY_LIGHT) {
exam_dummy_light = 0; //0
+ RoadMap.calibrate = 0;
}
if (type == TEST_TYPE_ROAD_TRUE_LIGHT) {
+ RoadMap.calibrate = 0;
InitRoadExam(RoadMap);
}
if (type == TEST_TYPE_AREA) {
InitAreaExam();
+ }
+ if (type == TEST_TYPE_ROAD_CALIBRATE) {
+ RoadMap.calibrate = 1;
+ InitRoadExam(RoadMap);
}
}
MA_SendExamStatus(1, 0);
@@ -865,6 +877,27 @@
return true;
}
+void RoadChange(int road, int status)
+{
+ struct roadStatusBrief brief;
+
+ brief.road_id = road;
+ brief.status = status;
+
+ MA_SendRoadStatus(&brief);
+}
+
+void CrossingChange(int road, int crossing, int status)
+{
+ struct crossingStatusBrief brief;
+
+ brief.road_id = road;
+ brief.crossing_index = crossing;
+ brief.status = status;
+
+ MA_SendCrossingStatus(&brief);
+}
+
void AddExamFault(int wrong, const struct RtkTime *rtkTime)
{
struct ExamFault fault;
diff --git a/lib/src/main/cpp/driver_test.h b/lib/src/main/cpp/driver_test.h
index 524fccc..d19c35b 100644
--- a/lib/src/main/cpp/driver_test.h
+++ b/lib/src/main/cpp/driver_test.h
@@ -137,16 +137,14 @@
} separate_t;
typedef struct {
- int active;
- string tts;
bool stopFlag;
Line line;
+ bool centrePointValid;
PointF centrePoint;
} stop_line_t;
typedef struct {
int id;
- Line startLine;
// Line stopLine;
// int active; // 鍒拌揪璺彛灏鹃儴鐨勮杩涙柟鍚�
bool activeBreak; // 璺彛鍒硅溅鍑忛��
@@ -175,15 +173,9 @@
} special_area_t;
typedef struct {
- int id;
int road;
int active;
- int time; // 椤圭洰鏈�澶у畬鎴愭椂闂�
- int distance; // 椤圭洰鏈�澶у畬鎴愯窛绂�
- string tts;
- bool cmp;
std::vector<PointF> points;
- std::vector<PointF> leftPoints; // 瀵瑰簲鍒伴亾璺乏渚х殑鐐�
} trigger_line_t;
typedef struct {
@@ -192,11 +184,25 @@
std::vector<PointF> points;
} forbid_line_t;
+typedef struct {
+ int road_id;
+ int index;
+ int active;
+} crossing_active_t;
+
+typedef struct {
+ std::string name;
+ std::vector<crossing_active_t> crossingActive;
+ std::vector<trigger_line_t> triggerLines;
+} scheme_t;
+
struct road_exam_map {
+ int calibrate;
std::vector<road_t> roads;
std::vector<special_area_t> specialAreas;
- std::vector<trigger_line_t> triggerLines;
+// std::vector<trigger_line_t> triggerLines;
std::vector<forbid_line_t> forbidLines;
+ std::vector<scheme_t> examScheme;
};
struct area_exam_map {
@@ -218,7 +224,7 @@
void CleanRoadMap(void);
-void SetRoadMap(road_exam_map &map);
+void SetRoadMap(road_exam_map &map, vector<scheme_t> &scheme);
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
@@ -228,6 +234,8 @@
void UpdateRTKInfo(const rtk_info *s);
void AddExamFault(int wrong, const struct RtkTime *rtkTime);
+void RoadChange(int road, int status);
+void CrossingChange(int road, int crossing, int status);
void SystemShutdown(int event, int timeout);
diff --git a/lib/src/main/cpp/master/comm_if.cpp b/lib/src/main/cpp/master/comm_if.cpp
index c81177e..0468b02 100644
--- a/lib/src/main/cpp/master/comm_if.cpp
+++ b/lib/src/main/cpp/master/comm_if.cpp
@@ -64,6 +64,9 @@
#define ID_SM_DISTANCE 0x0020
#define ID_SM_CARSENSOR 0x0013
+#define ID_MS_ROAD_BRIEF 0x0015 // 绉戠洰涓夐」鐩爣瀹氾紝杩涘嚭鏌愭潯璺殑鎻愮ず
+#define ID_MS_CROSSING_BRIEF 0x0016 // 绉戠洰涓夐」鐩爣瀹氾紝鎺ヨ繎/椹剁鏌愬悇璺彛鐨勬彁绀�
+
#define MA_OUT_GPS_BRIEF 0x0001
#define MA_OUT_RTK_BRIEF 0x0002
#define MA_OUT_CAR_BRIEF 0x0004
@@ -438,6 +441,38 @@
writer.EndObject();
SendMsgToMainProcIndep(ID_SM_DISTANCE, sb.GetString());
+}
+
+void MA_SendRoadStatus(const struct roadStatusBrief *brief)
+{
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+ writer.Key("road_id");
+ writer.Int(brief->road_id);
+ writer.Key("status");
+ writer.Int(brief->status);
+ writer.EndObject();
+
+ SendMsgToMainProcIndep(ID_MS_ROAD_BRIEF, sb.GetString());
+}
+
+void MA_SendCrossingStatus(const struct crossingStatusBrief *brief)
+{
+ StringBuffer sb;
+ Writer<StringBuffer> writer(sb);
+
+ writer.StartObject();
+ writer.Key("road_id");
+ writer.Int(brief->road_id);
+ writer.Key("crossing_index");
+ writer.Int(brief->crossing_index);
+ writer.Key("status");
+ writer.Int(brief->status);
+ writer.EndObject();
+
+ SendMsgToMainProcIndep(ID_MS_CROSSING_BRIEF, sb.GetString());
}
void MA_SendExamWrong(vector<ExamFault> &ExamFaultList)
@@ -844,10 +879,6 @@
road_exam_map map;
- map.roads.clear();
- map.specialAreas.clear();
- map.triggerLines.clear();
-
if (doc.HasMember("road")) {
const Value &a = doc["road"];
@@ -860,23 +891,6 @@
DEBUG("璺痠d %d", s.GetInt());
road.id = s.GetInt();
}
- if (itr->HasMember("start_line")) {
- const Value &a2 = (*itr)["start_line"];
-
- PointF p1, p2;
- int n = 0;
-
- for (Value::ConstValueIterator itr2 = a2.Begin(); itr2 != a2.End(); ++itr2, ++n) {
- DEBUG("璧峰绾� %d", (*itr2).GetInt());
- if (n == 0) {
- p1 = mapPoints[(*itr2).GetInt()];
- } else if (n == 1) {
- p2 = mapPoints[(*itr2).GetInt()];
- }
- }
-
- MakeLine(&road.startLine, &p1, &p2);
- }
if (itr->HasMember("crossing")) {
const Value &a2 = (*itr)["crossing"];
@@ -887,20 +901,12 @@
if (!itr2->IsObject()) {
break;
}
- if (itr2->HasMember("active")) {
- const Value &s = (*itr2)["active"];
- temp.active = s.GetInt();
- DEBUG("璺彛鍔ㄤ綔 %d", temp.active);
- }
if (itr2->HasMember("stop_flag")) {
const Value &s = (*itr2)["stop_flag"];
temp.stopFlag = s.GetInt();
DEBUG("璺彛鍋滆溅 %d", temp.stopFlag);
- }
- if (itr2->HasMember("tts")) {
- const Value &s = (*itr2)["tts"];
- temp.tts = s.GetString();
- DEBUG("璺彛鎻愮ず %s", temp.tts.c_str());
+ } else {
+ temp.stopFlag = false;
}
if (itr2->HasMember("line")) {
const Value &s = (*itr2)["line"];
@@ -920,8 +926,10 @@
}
if (itr2->HasMember("center_point")) {
const Value &s = (*itr2)["center_point"];
-
temp.centrePoint = mapPoints[s.GetInt()];
+ temp.centrePointValid = true;
+ } else {
+ temp.centrePointValid = false;
}
crossing.push_back(temp);
}
@@ -1092,7 +1100,7 @@
map.specialAreas.push_back(specialArea);
}
}
- if (doc.HasMember("trigger_line")) {
+ /*if (doc.HasMember("trigger_line")) {
const Value &a = doc["trigger_line"];
for (Value::ConstValueIterator itr = a.Begin();
@@ -1139,7 +1147,7 @@
map.triggerLines.push_back(trigger);
}
- }
+ }*/
if (doc.HasMember("red_line")) {
const Value &a = doc["red_line"];
@@ -1169,10 +1177,86 @@
}
}
+ vector<scheme_t> schemes;
+
+ if (doc.HasMember("scheme")) {
+ const Value &a = doc["scheme"];
+
+ for (Value::ConstValueIterator itr = a.Begin();
+ itr != a.End(); ++itr) {
+ scheme_t scheme;
+ if (itr->HasMember("name")) {
+ const Value &s = (*itr)["name"];
+ scheme.name = s.GetString();
+ }
+ if (itr->HasMember("crossing_active")) {
+ const Value &a2 = (*itr)["crossing_active"];
+
+ for (Value::ConstValueIterator itr2 = a2.Begin();
+ itr2 != a2.End(); ++itr2) {
+ crossing_active_t act;
+
+ if (itr2->HasMember("road")) {
+ const Value &s = (*itr2)["road"];
+ act.road_id = s.GetInt();
+ }
+ if (itr2->HasMember("idx")) {
+ const Value &s = (*itr2)["idx"];
+ act.index = s.GetInt();
+ }
+ if (itr2->HasMember("active")) {
+ const Value &s = (*itr2)["active"];
+ act.active = s.GetInt();
+ }
+
+ scheme.crossingActive.push_back(act);
+ }
+ }
+ if (itr->HasMember("trigger_line")) {
+ const Value &a2 = (*itr)["trigger_line"];
+
+ for (Value::ConstValueIterator itr2 = a2.Begin();
+ itr2 != a2.End(); ++itr2) {
+ trigger_line_t ins;
+
+ if (itr2->HasMember("x_y")) {
+ const Value &a3 = (*itr2)["x_y"];
+ if (a3.IsArray()) {
+ PointF point;
+ int n = 0;
+ for (Value::ConstValueIterator itr3 = a3.Begin();
+ itr3 != a3.End(); ++itr3) {
+ if (n == 0) {
+ point.X = (*itr3).GetDouble();
+ n = 1;
+ } else if (n == 1) {
+ point.Y = (*itr3).GetDouble();
+ ins.points.push_back(point);
+ n = 0;
+ }
+ }
+ }
+ }
+ if (itr2->HasMember("road")) {
+ const Value &s = (*itr2)["road"];
+ ins.road = s.GetInt();
+ }
+ if (itr2->HasMember("type")) {
+ const Value &s = (*itr2)["type"];
+ ins.active = s.GetInt();
+ }
+
+ scheme.triggerLines.push_back(ins);
+ }
+ }
+ schemes.push_back(scheme);
+ }
+ }
+
DEBUG("鍦板浘瑙f瀽瀹屾瘯");
CleanRoadMap();
- SetRoadMap(map);
+ SetRoadMap(map, schemes);
} else {
DEBUG("############## 鍦板浘瑙f瀽鍑洪敊###################");
}
diff --git a/lib/src/main/cpp/master/comm_if.h b/lib/src/main/cpp/master/comm_if.h
index d06868d..a5355e0 100644
--- a/lib/src/main/cpp/master/comm_if.h
+++ b/lib/src/main/cpp/master/comm_if.h
@@ -104,6 +104,17 @@
int pointNum;
};
+struct roadStatusBrief {
+ int road_id;
+ int status;
+};
+
+struct crossingStatusBrief {
+ int road_id;
+ int crossing_index;
+ int status;
+};
+
void MA_MainProcMsgEntry(int cmd, const char *value);
void MA_MainProcBinMsgEntry(int cmd, const uint8_t *value, int length);
@@ -131,4 +142,7 @@
void MA_SendDistance(double l, double r);
+void MA_SendRoadStatus(const struct roadStatusBrief *brief);
+void MA_SendCrossingStatus(const struct crossingStatusBrief *brief);
+
#endif //MYAPPLICATION2_COMM_IF_H
diff --git a/lib/src/main/cpp/native-lib.cpp b/lib/src/main/cpp/native-lib.cpp
index 4738ab8..b8e44e1 100644
--- a/lib/src/main/cpp/native-lib.cpp
+++ b/lib/src/main/cpp/native-lib.cpp
@@ -27,8 +27,8 @@
const int RTK_PLATFORM_PORT = 12125;
const uint8_t phone[] = {0x20,0x19,0x10,0x15,0x00,0x00,0x00,0x01};
-const char *VIRTUAL_RTK_IP = "192.168.1.7";
-const int VIRTUAL_RTK_PORT = 9001;
+const char *VIRTUAL_RTK_IP = "192.168.16.100";
+const int VIRTUAL_RTK_PORT = 9002;
static pthread_mutex_t tts_mutex = PTHREAD_MUTEX_INITIALIZER;
diff --git a/lib/src/main/cpp/rtk_module/rtk.cpp b/lib/src/main/cpp/rtk_module/rtk.cpp
index a5c75d3..b7afde4 100644
--- a/lib/src/main/cpp/rtk_module/rtk.cpp
+++ b/lib/src/main/cpp/rtk_module/rtk.cpp
@@ -214,7 +214,7 @@
}*/
if (RxBufLen > 0) {
-#if 1
+#if 0
const uint8_t *ptr = parseGPS(RxBuf, RxBuf + RxBufLen);
if(ptr != RxBuf) {
memcpy(RxBuf, ptr, RxBufLen - (ptr - RxBuf));
diff --git a/lib/src/main/cpp/test_items2/road_exam.cpp b/lib/src/main/cpp/test_items2/road_exam.cpp
index 53eea6a..0ade5a9 100644
--- a/lib/src/main/cpp/test_items2/road_exam.cpp
+++ b/lib/src/main/cpp/test_items2/road_exam.cpp
@@ -155,7 +155,7 @@
static void DetectTurn(const car_model *car, int moveDirect, const struct RtkTime *rtkTime);
static bool StopOnRedArea(road_exam_map &RoadMap, const car_model *car);
-static int NearbyCrossingGuide(int &stopLineIndex, int roadIndex, road_t &road, const car_model *car);
+static int NearbyCrossingGuide(road_exam_map &RoadMap, int &stopLineIndex, int roadIndex, road_t &road, const car_model *car);
static int EntryItem(int index, road_exam_map &RoadMap, const car_model *car, LIST_CAR_MODEL &CarModelList);
@@ -1109,7 +1109,7 @@
int stop_line_index;
PointF nearbyStopPoint;
- NearbyCrossingGuide(stop_line_index, roadIndex, RoadMap.roads[roadIndex], car);
+ NearbyCrossingGuide(RoadMap, stop_line_index, roadIndex, RoadMap.roads[roadIndex], car);
nearbyStopPoint.X = RoadMap.roads[roadIndex].stopLine[stop_line_index].line.X1;
nearbyStopPoint.Y = RoadMap.roads[roadIndex].stopLine[stop_line_index].line.Y1;
@@ -1159,6 +1159,20 @@
return rec;
}
+int ExamSchemeCrossing(road_exam_map &RoadMap, int roadIndex, int crossIndex)
+{
+ if (roadIndex < 0 || roadIndex >= RoadMap.roads.size() || RoadMap.examScheme.size() == 0) {
+ return -1;
+ }
+ for (int i = 0; i < RoadMap.examScheme[0].crossingActive.size(); ++i) {
+ if (RoadMap.examScheme[0].crossingActive[i].road_id == RoadMap.roads[roadIndex].id &&
+ RoadMap.examScheme[0].crossingActive[i].index == crossIndex) {
+ return RoadMap.examScheme[0].crossingActive[i].active;
+ }
+ }
+ return -1;
+}
+
static void HintCrossing(road_exam_map &RoadMap, int roadIndex, int stopIndex, double distance) {
if (roadIndex < 0 || roadIndex >= RoadMap.roads.size())
return;
@@ -1166,18 +1180,47 @@
if (distance > 5 && distance < 70) {
// 鎻愮ず璺彛鎬庝箞璧�
if (GetCrossingStatus(roadIndex, stopIndex) == CROSSING_NOT_HINT) {
- if (!RoadMap.roads[roadIndex].stopLine[stopIndex].tts.empty()) {
- DEBUG("璺彛鎻愮ず %s", RoadMap.roads[roadIndex].stopLine[stopIndex].tts.c_str());
- PlayTTS(RoadMap.roads[roadIndex].stopLine[stopIndex].tts.c_str(), NULL);
+ // 椤圭洰鏍囧畾妯″紡涓嬶紝杩欓噷鎻愮ず鏍囧畾鏈矾鍙e姩浣�
+ if (RoadMap.calibrate) {
+ CrossingChange(RoadMap.roads[roadIndex].id, stopIndex, 1);
+ } else {
+ int act = ExamSchemeCrossing(RoadMap, roadIndex, stopIndex);
+
+ switch (act) {
+ case ROAD_ACTIVE_FORWARD:
+ DEBUG("璺彛鎻愮ず 鐩磋");
+ PlayTTS("鍓嶆柟璺彛璇风洿琛�", NULL);
+ break;
+ case ROAD_ACTIVE_TURN_LEFT:
+ DEBUG("璺彛鎻愮ず 宸﹁浆");
+ PlayTTS("鍓嶆柟璺彛璇峰乏杞�", NULL);
+ break;
+ case ROAD_ACTIVE_TURN_RIGHT:
+ DEBUG("璺彛鎻愮ず 鍙宠浆");
+ PlayTTS("鍓嶆柟璺彛璇峰彸杞�", NULL);
+ break;
+ case ROAD_ACTIVE_TURN_BACKWARD:
+ DEBUG("璺彛鎻愮ず 鎺夊ご");
+ PlayTTS("鍓嶆柟璺彛璇锋帀澶�", NULL);
+ break;
+ default:
+ DEBUG("璺彛鎻愮ず 鏈厤缃�");
+ PlayTTS("鍓嶆柟璺彛鍚暀缁冩寚浠�", NULL);
+ break;
+ }
}
ChangeCrossingStatus(roadIndex, stopIndex, CROSSING_HAS_HINT);
}
} else if (distance > 75 && GetCrossingStatus(roadIndex, stopIndex) != CROSSING_NOT_HINT) {
ChangeCrossingStatus(roadIndex, stopIndex, CROSSING_NOT_HINT);
+
+ if (RoadMap.calibrate) {
+ CrossingChange(RoadMap.roads[roadIndex].id, stopIndex, 0);
+ }
}
}
-static int NearbyCrossingGuide(int &stopLineIndex, int roadIndex, road_t &road, const car_model *car)
+static int NearbyCrossingGuide(road_exam_map &RoadMap, int &stopLineIndex, int roadIndex, road_t &road, const car_model *car)
{
int guide = 0, stopLine = 0;
double distance;
@@ -1203,7 +1246,7 @@
struct nearby_crossing temp;
temp.stopLine = i;
- temp.guide = road.stopLine[i].active;
+ temp.guide = ExamSchemeCrossing(RoadMap, roadIndex, i);
temp.distance = distance;
set.push_back(temp);
@@ -1253,157 +1296,169 @@
turnSignalStatus = ReadCarSensorValue(TURN_SIGNAL_LAMP);
}
- // 鍒硅溅鎻愮ず闊�
- RingBreak();
+ if (RoadMap.calibrate == 0) {
+ // 鍒硅溅鎻愮ず闊�
+ RingBreak();
- // 瓒呴�熸娴�
- if (speed > MAX_SPEED) {
- if (!occurOverSpeed) {
- occurOverSpeed = true;
- // 瓒呴�燂紝涓嶅悎鏍�
- DEBUG("瓒呴�� %f", ConvertMs2KMh(speed));
- AddExamFault(10, rtkTime);
+ // 瓒呴�熸娴�
+ if (speed > MAX_SPEED) {
+ if (!occurOverSpeed) {
+ occurOverSpeed = true;
+ // 瓒呴�燂紝涓嶅悎鏍�
+ DEBUG("瓒呴�� %f", ConvertMs2KMh(speed));
+ AddExamFault(10, rtkTime);
+ }
+ } else if (speed < DEC_MAX_SPEED) {
+ occurOverSpeed = false;
}
- } else if (speed < DEC_MAX_SPEED ) {
- occurOverSpeed = false;
- }
- // 鍓埞杞︽娴�
- if (ReadCarStatus(SECOND_BREAK) == BREAK_ACTIVE) {
- // 鍓埞杞﹁俯涓嬶紝涓嶅悎鏍�
- if (!occurSecondBreak) {
- DEBUG("鍓埞杞﹀姩浣滀簡");
- occurSecondBreak = true;
- AddExamFault(17, rtkTime);
+ // 鍓埞杞︽娴�
+ if (ReadCarStatus(SECOND_BREAK) == BREAK_ACTIVE) {
+ // 鍓埞杞﹁俯涓嬶紝涓嶅悎鏍�
+ if (!occurSecondBreak) {
+ DEBUG("鍓埞杞﹀姩浣滀簡");
+ occurSecondBreak = true;
+ AddExamFault(17, rtkTime);
+ }
+ } else {
+ occurSecondBreak = false;
}
- } else {
- occurSecondBreak = false;
- }
- // 鎸′綅鍖归厤妫�娴�
- bool currGearError = false;
- bool currGearNSlide = false;
+ // 鎸′綅鍖归厤妫�娴�
+ bool currGearError = false;
+ bool currGearNSlide = false;
- switch (ReadCarStatus(GEAR)) {
- case GEAR_N:
- if (moveDirect != 0) {
- // 绌烘。婊戣
- currGearNSlide = true;
- }
- break;
- case GEAR_1:
- if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[0][0] || ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[0][1]) {
- currGearError = true;
- }
- break;
- case GEAR_2:
- if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[1][0] || ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[1][1]) {
- currGearError = true;
- }
- break;
- case GEAR_3:
- if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[2][0] || ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[2][1]) {
- currGearError = true;
- }
- break;
- case GEAR_4:
- if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[3][0] || ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[3][1]) {
- currGearError = true;
- }
- break;
- case GEAR_5:
- if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[4][0] || ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[4][1]) {
- currGearError = true;
- }
- break;
- default:break;
- }
- // 绌烘。婊戣瓒呮椂
- if (currGearNSlide) {
- if (GearNSlideStatus == 0) {
- DEBUG("妫�娴嬪埌绌烘尅婊戣");
- GearNSlideStatus = 1;
- gearNSlideTimePoint = *rtkTime;
+ switch (ReadCarStatus(GEAR)) {
+ case GEAR_N:
+ if (moveDirect != 0) {
+ // 绌烘。婊戣
+ currGearNSlide = true;
+ }
+ break;
+ case GEAR_1:
+ if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[0][0] ||
+ ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[0][1]) {
+ currGearError = true;
+ }
+ break;
+ case GEAR_2:
+ if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[1][0] ||
+ ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[1][1]) {
+ currGearError = true;
+ }
+ break;
+ case GEAR_3:
+ if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[2][0] ||
+ ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[2][1]) {
+ currGearError = true;
+ }
+ break;
+ case GEAR_4:
+ if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[3][0] ||
+ ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[3][1]) {
+ currGearError = true;
+ }
+ break;
+ case GEAR_5:
+ if (ConvertMs2KMh(speed) < SPEED_GEAR_TABLE[4][0] ||
+ ConvertMs2KMh(speed) > SPEED_GEAR_TABLE[4][1]) {
+ currGearError = true;
+ }
+ break;
+ default:
+ break;
}
- if (GearNSlideStatus == 1 && TimeGetDiff(rtkTime, &gearNSlideTimePoint) > GEAR_N_SLIDE_TIMEOUT) {
- // 绌烘。婊戣瓒�5绉掞紝涓嶅悎鏍�
- DEBUG("鎸′綅婊戣锛岃秴杩�5绉�");
- AddExamFault(8, rtkTime);
- GearNSlideStatus = 2;
- }
- } else if (GearNSlideStatus != 0) {
- GearNSlideStatus = 0;
- DEBUG("绌烘尅婊戣缁撴潫");
- }
-
- // 鎸′綅涓嶅尮閰嶈秴鏃�
- if (currGearError && prevGearError) {
- DEBUG("鎸′綅閿欒澧炲姞 %ld姣 褰撳墠鎸′綅 %d 鏃堕�� %f", TimeGetDiff(rtkTime, &gearErrorTimePoint), ReadCarStatus(GEAR), ConvertMs2KMh(speed));
- gearErrorTime += TimeGetDiff(rtkTime, &gearErrorTimePoint);
- }
- if (gearErrorTime > GEAR_ERROR_TIMEOUT) {
- // 绱15绉掞紝鎸′綅-杞﹂�熶笉鍖归厤锛屼笉鍚堟牸
- DEBUG("鎸′綅閿欒瓒呰繃15绉�");
- AddExamFault(6, rtkTime);
- gearErrorTime = 0;
- }
-
- prevGearError = currGearError;
- if (prevGearError) {
- gearErrorTimePoint = *rtkTime;
- }
-
- // 璧锋鍚庢粦
- if (moveDirect != prevMoveDirect) {
- if (moveDirect == 0) {
- stopTimepoint = *rtkTime;
- StopCarOnRedArea = false;
-
- DEBUG("鍋滆溅浜� %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
-
- if (slideNormalDistance) {
- // 鍚庢粦锛屾墸10鍒�
- AddExamFault(18, rtkTime);
- DEBUG("鍚庢粦瓒呰繃10鍘樼背, 浣嗕笉瓒呰繃30鍘樼背");
+ // 绌烘。婊戣瓒呮椂
+ if (currGearNSlide) {
+ if (GearNSlideStatus == 0) {
+ DEBUG("妫�娴嬪埌绌烘尅婊戣");
+ GearNSlideStatus = 1;
+ gearNSlideTimePoint = *rtkTime;
}
-
- slideNormalDistance = false;
- slideLongDistance = false;
- occurSlide = false;
- } else if (moveDirect == -1 && prevMoveDirect == 0) {
- DEBUG("寮�濮嬪悗婊�");
- stopPoint = car->basePoint;
- occurSlide = true;
- }
- prevMoveDirect = moveDirect;
- } else if (moveDirect == 0) {
- // 鎸佺画鍋滆溅
- if (TimeGetDiff(rtkTime, &stopTimepoint) >= STOP_CAR_TIME && !StopCarOnRedArea && StopOnRedArea(RoadMap, car)) {
- // 鍋滆溅瓒�2绉掞紝鍋滃湪绾㈠尯锛屼笉鍚堟牸
- AddExamFault(16, rtkTime);
- DEBUG("绂佸仠鍖哄仠杞�");
- StopCarOnRedArea = true;
- }
- } else if (moveDirect == -1) {
- // 鎸佺画鍚庢粦
- if (occurSlide) {
- double slideDistance = DistanceOf(stopPoint, car->basePoint);
-
- if (slideDistance > SLIDE_DISTANCE_THRESHOLD_YELLOW) {
- slideNormalDistance = true;
+ if (GearNSlideStatus == 1 &&
+ TimeGetDiff(rtkTime, &gearNSlideTimePoint) > GEAR_N_SLIDE_TIMEOUT) {
+ // 绌烘。婊戣瓒�5绉掞紝涓嶅悎鏍�
+ DEBUG("鎸′綅婊戣锛岃秴杩�5绉�");
+ AddExamFault(8, rtkTime);
+ GearNSlideStatus = 2;
}
+ } else if (GearNSlideStatus != 0) {
+ GearNSlideStatus = 0;
+ DEBUG("绌烘尅婊戣缁撴潫");
+ }
- if (slideDistance > SLIDE_DISTANCE_THRESHOLD_RED && !slideLongDistance) {
- // 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍�
- AddExamFault(5, rtkTime);
- DEBUG("鍚庢粦瓒呰繃30鍘樼背");
- slideLongDistance = true;
+ // 鎸′綅涓嶅尮閰嶈秴鏃�
+ if (currGearError && prevGearError) {
+ DEBUG("鎸′綅閿欒澧炲姞 %ld姣 褰撳墠鎸′綅 %d 鏃堕�� %f", TimeGetDiff(rtkTime, &gearErrorTimePoint),
+ ReadCarStatus(GEAR), ConvertMs2KMh(speed));
+ gearErrorTime += TimeGetDiff(rtkTime, &gearErrorTimePoint);
+ }
+ if (gearErrorTime > GEAR_ERROR_TIMEOUT) {
+ // 绱15绉掞紝鎸′綅-杞﹂�熶笉鍖归厤锛屼笉鍚堟牸
+ DEBUG("鎸′綅閿欒瓒呰繃15绉�");
+ AddExamFault(6, rtkTime);
+ gearErrorTime = 0;
+ }
+
+ prevGearError = currGearError;
+ if (prevGearError) {
+ gearErrorTimePoint = *rtkTime;
+ }
+
+ // 璧锋鍚庢粦
+ if (moveDirect != prevMoveDirect) {
+ if (moveDirect == 0) {
+ stopTimepoint = *rtkTime;
+ StopCarOnRedArea = false;
+
+ DEBUG("鍋滆溅浜� %d %d %d %d %d %d %d", rtkTime->YY, rtkTime->MM, rtkTime->DD,
+ rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
+
+ if (slideNormalDistance) {
+ // 鍚庢粦锛屾墸10鍒�
+ AddExamFault(18, rtkTime);
+ DEBUG("鍚庢粦瓒呰繃10鍘樼背, 浣嗕笉瓒呰繃30鍘樼背");
+ }
+
slideNormalDistance = false;
+ slideLongDistance = false;
occurSlide = false;
+ } else if (moveDirect == -1 && prevMoveDirect == 0) {
+ DEBUG("寮�濮嬪悗婊�");
+ stopPoint = car->basePoint;
+ occurSlide = true;
}
+ prevMoveDirect = moveDirect;
+ } else if (moveDirect == 0) {
+ // 鎸佺画鍋滆溅
+ if (TimeGetDiff(rtkTime, &stopTimepoint) >= STOP_CAR_TIME && !StopCarOnRedArea &&
+ StopOnRedArea(RoadMap, car)) {
+ // 鍋滆溅瓒�2绉掞紝鍋滃湪绾㈠尯锛屼笉鍚堟牸
+ AddExamFault(16, rtkTime);
+ DEBUG("绂佸仠鍖哄仠杞�");
+ StopCarOnRedArea = true;
+ }
+ } else if (moveDirect == -1) {
+ // 鎸佺画鍚庢粦
+ if (occurSlide) {
+ double slideDistance = DistanceOf(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;
+ slideNormalDistance = false;
+ occurSlide = false;
+ }
+ }
+ } else {
+ // 鍓嶈繘
}
- } else {
- // 鍓嶈繘
}
// 妫�娴嬬寮�姝よ矾娈碉紝鍏ㄨ溅闇�涓嶅湪鑼冨洿鍐�
@@ -1415,6 +1470,15 @@
if (oldid >= 0) {
ResetCrossingStatus(oldid);
ResetErrorLaneRpt(oldid);
+
+ }
+
+ if (RoadMap.calibrate) {
+ if (currExamMapIndex < 0 && oldid >= 0) {
+ RoadChange(oldid, 0);
+ } else if (currExamMapIndex >= 0) {
+ RoadChange(currExamMapIndex, 1);
+ }
}
Lane.guide = 0;
}
@@ -1426,41 +1490,44 @@
}
ExitTarget(RoadMap, car, CarModelList, rtkTime);
- oldid = CrashLineType;
- // 妫�娴嬪帇绾跨姸鎬�
- DetectLine(currExamMapIndex, RoadMap, car, CarModelList, moveDirect, rtkTime);
+ if (RoadMap.calibrate == 0) {
+ oldid = CrashLineType;
+ // 妫�娴嬪帇绾跨姸鎬�
+ DetectLine(currExamMapIndex, RoadMap, car, CarModelList, moveDirect, rtkTime);
- if (oldid != CrashLineType) {
- DEBUG("鍘嬬嚎绫诲瀷鍒囨崲 %d", CrashLineType);
- }
+ if (oldid != CrashLineType) {
+ DEBUG("鍘嬬嚎绫诲瀷鍒囨崲 %d", CrashLineType);
+ }
-
- oldid = Lane.guide;
- DetectLane(RoadMap, car, currExamMapIndex, rtkTime);
+ oldid = Lane.guide;
+ DetectLane(RoadMap, car, currExamMapIndex, rtkTime);
// DEBUG("Lane淇℃伅 road %d sep %d total %d no %d guide %d", Lane.road, Lane.sep, Lane.total, Lane.no, Lane.guide);
- if (Lane.guide > 0 && currExamMapIndex >= 0) {
- int stop_line_index;
- int act = NearbyCrossingGuide(stop_line_index, currExamMapIndex, RoadMap.roads[currExamMapIndex], car);
+ if (Lane.guide > 0 && currExamMapIndex >= 0) {
+ int stop_line_index;
+ int act = NearbyCrossingGuide(RoadMap, stop_line_index, currExamMapIndex,
+ RoadMap.roads[currExamMapIndex], car);
- if (act != 0 && !(act & Lane.guide)) {
- if (!GetErrorLaneRpt(currExamMapIndex, stop_line_index)) {
- DEBUG("涓嶆寜瑙勫畾杞﹂亾鏍囧悜琛岄┒ %d: %d 鏈熸湜 = %d guide = %d", currExamMapIndex, stop_line_index, act, Lane.guide);
- AddExamFault(9, rtkTime);
- SetErrorLaneRpt(currExamMapIndex, stop_line_index, true);
+ if (act != 0 && !(act & Lane.guide)) {
+ if (!GetErrorLaneRpt(currExamMapIndex, stop_line_index)) {
+ DEBUG("涓嶆寜瑙勫畾杞﹂亾鏍囧悜琛岄┒ %d: %d 鏈熸湜 = %d guide = %d", currExamMapIndex,
+ stop_line_index, act, Lane.guide);
+ AddExamFault(9, rtkTime);
+ SetErrorLaneRpt(currExamMapIndex, stop_line_index, true);
+ }
}
}
- }
- if (Lane.guide != oldid) {
- DEBUG("瀵煎悜绫诲瀷鍒囨崲 %d", Lane.guide);
+ if (Lane.guide != oldid) {
+ DEBUG("瀵煎悜绫诲瀷鍒囨崲 %d", Lane.guide);
+ }
}
if (currExamMapIndex >= 0 && Lane.guide == 0) {
BigStraightRoadFree = AnalysisRoad(RoadMap, currExamMapIndex, Lane, car);
road_end_point_t ep = NearbyRoadEndPoint(currExamMapIndex, RoadMap, car);
-
+ // 鎻愮ず璺彛鎬庝箞璧�
HintCrossing(RoadMap, ep.road_index, ep.stop_line_index, ep.distance);
double freeSepDis = SeparateLength(RoadMap, Lane, car);
@@ -1476,10 +1543,15 @@
}
// 棰濆鐨勮浆鍚戞娴�
- DetectTurn(car, moveDirect, rtkTime);
- ItemExam(RoadMap, currExamMapIndex, car, CarModelList, speed, moveDirect, rtkTime, BigStraightRoadFree, TargetFree > RoadCrossingFree? RoadCrossingFree : TargetFree);
- ItemExam2(RoadMap, currExamMapIndex, car, CarModelList);
+ if (RoadMap.calibrate == 0) {
+ DetectTurn(car, moveDirect, rtkTime);
+
+ ItemExam(RoadMap, currExamMapIndex, car, CarModelList, speed, moveDirect, rtkTime,
+ BigStraightRoadFree,
+ TargetFree > RoadCrossingFree ? RoadCrossingFree : TargetFree);
+ ItemExam2(RoadMap, currExamMapIndex, car, CarModelList);
+ }
}
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)
@@ -1605,8 +1677,11 @@
}
}
-void CrossRoadCallback(int road, int stop_line, int active, const car_model *car)
+void CrossRoadCallback(road_exam_map &RoadMap, int road, int stop_line, int active, const car_model *car)
{
+ if (RoadMap.calibrate) {
+ CrossingChange(RoadMap.roads[road].id, stop_line, 0);
+ }
SetErrorLaneRpt(road, stop_line, false);
if (active != ROAD_ACTIVE_FORWARD) {
ResetTurnDetect(car);
@@ -1823,12 +1898,12 @@
static int EntryItem(int index, road_exam_map &RoadMap, const car_model *car, LIST_CAR_MODEL &CarModelList)
{
- if (index < 0 || index >= RoadMap.roads.size())
+ if (index < 0 || index >= RoadMap.roads.size() || RoadMap.examScheme.size() == 0)
return -1;
- for (int i = 0; i < RoadMap.triggerLines.size(); ++i) {
- if (RoadMap.triggerLines[i].road == RoadMap.roads[index].id) {
- Line triggerLine;
+ for (int j = 0; j < RoadMap.examScheme[0].triggerLines.size(); ++j) {
+ if (RoadMap.examScheme[0].triggerLines[j].road == RoadMap.roads[index].id) {
+ /*Line triggerLine;
PointF p2 = CalcProjectionWithRoadEdge(RoadMap.roads[index].leftEdge, RoadMap.triggerLines[i].points[0]);
@@ -1837,6 +1912,25 @@
if (CrashTheLine(triggerLine, car, CarModelList)) {
DEBUG("瑙﹀彂椤圭洰 %d %s (%0.4f, %0.4f)-(%0.4f, %0.4f)", RoadMap.triggerLines[i].active, RoadMap.triggerLines[i].tts.c_str(), triggerLine.X1, triggerLine.Y1, triggerLine.X2, triggerLine.Y2);
return RoadMap.triggerLines[i].active;
+ }*/
+
+ vector<double> vec;
+
+ PointF p1 = CalcProjectionWithRoadEdge(RoadMap.roads[index].rightEdge,
+ car->carXY[car->axial[AXIAL_FRONT]]);
+ PointF p2 = CalcProjectionWithRoadEdge(RoadMap.roads[index].rightEdge,
+ RoadMap.examScheme[0].triggerLines[j].points[0]);
+
+ vec.push_back(DistanceOf(car->carXY[car->axial[AXIAL_FRONT]],
+ RoadMap.examScheme[0].triggerLines[j].points[0]));
+ vec.push_back(DistanceOf(p2, RoadMap.examScheme[0].triggerLines[j].points[0]));
+ vec.push_back(DistanceOf(p1, car->carXY[car->axial[AXIAL_FRONT]]));
+
+ sort(vec.begin(), vec.end());
+
+ if (fabs(vec[0] + vec[1] - vec[2]) < 0.1) {
+ DEBUG("瑙﹀彂椤圭洰 %d", RoadMap.examScheme[0].triggerLines[j].active);
+ return RoadMap.examScheme[0].triggerLines[j].active;
}
}
}
diff --git a/lib/src/main/cpp/test_items2/road_exam.h b/lib/src/main/cpp/test_items2/road_exam.h
index 39626b1..eeea8e7 100644
--- a/lib/src/main/cpp/test_items2/road_exam.h
+++ b/lib/src/main/cpp/test_items2/road_exam.h
@@ -29,7 +29,8 @@
car_sensor_value_t ReadCarSensorValue(int name);
-void CrossRoadCallback(int road, int stop_line, int active, const car_model *car);
+void CrossRoadCallback(road_exam_map &RoadMap, int road, int stop_line, int active, const car_model *car);
+int ExamSchemeCrossing(road_exam_map &RoadMap, int roadIndex, int crossIndex);
void InitRoadExam(road_exam_map &RoadMap);
void TerminateRoadExam(void);
diff --git a/lib/src/main/cpp/test_items2/through_something.cpp b/lib/src/main/cpp/test_items2/through_something.cpp
index 09f6318..1000b06 100644
--- a/lib/src/main/cpp/test_items2/through_something.cpp
+++ b/lib/src/main/cpp/test_items2/through_something.cpp
@@ -104,6 +104,10 @@
RemoveTargetReduceRec(TargetReduceRec, key);
}
}
+
+ if (RoadMap.calibrate == 1)
+ goto GET_DISTANCE_OF_NEARBY_TARGET;
+
// 浜鸿閬撱�佸叕浜ょ珯銆佸鏍�
for (int i = 0; i < RoadMap.specialAreas.size(); i++) {
if (RoadMap.specialAreas[i].type == GRID_AREA || RoadMap.specialAreas[i].road != RoadMap.roads[roadIndex].id)
@@ -165,6 +169,7 @@
}
}
+ GET_DISTANCE_OF_NEARBY_TARGET:
if (nearbyTarget.size() > 0) {
sort(nearbyTarget.begin(), nearbyTarget.end());
return nearbyTarget[0];
@@ -182,69 +187,73 @@
if (CrashTheLine(RoadMap.roads[road].stopLine[x].line, car, CarModelList)) {
DEBUG("瓒婅繃璺彛 road %d 璺彛 %d", road, x);
- CrossRoadCallback(road, x, RoadMap.roads[road].stopLine[x].active, car);
+ CrossRoadCallback(RoadMap, road, x, ExamSchemeCrossing(RoadMap, road, x), car);
- if (!(it->second & REDUCE_SPEED)) {
- // 涓嶆寜瑙勫畾鍑忛�燂紝涓嶅悎鏍�
- DEBUG("涓嶆寜瑙勫畾鍑忛��");
+ if (RoadMap.calibrate == 0) {
+ if (!(it->second & REDUCE_SPEED)) {
+ // 涓嶆寜瑙勫畾鍑忛�燂紝涓嶅悎鏍�
+ DEBUG("涓嶆寜瑙勫畾鍑忛��");
- if (RoadMap.roads[road].stopLine[x].active == ROAD_ACTIVE_FORWARD) {
- AddExamFault(41, rtkTime);
- } else if (RoadMap.roads[road].stopLine[x].active ==
- ROAD_ACTIVE_TURN_LEFT) {
- AddExamFault(43, rtkTime);
- } else if (RoadMap.roads[road].stopLine[x].active ==
- ROAD_ACTIVE_TURN_RIGHT) {
- AddExamFault(46, rtkTime);
+ if (ExamSchemeCrossing(RoadMap, road, x) == ROAD_ACTIVE_FORWARD) {
+ AddExamFault(41, rtkTime);
+ } else if (ExamSchemeCrossing(RoadMap, road, x) ==
+ ROAD_ACTIVE_TURN_LEFT) {
+ AddExamFault(43, rtkTime);
+ } else if (ExamSchemeCrossing(RoadMap, road, x) ==
+ ROAD_ACTIVE_TURN_RIGHT) {
+ AddExamFault(46, rtkTime);
+ }
+ }
+ if (!(it->second & STOP_CAR) && RoadMap.roads[road].stopLine[x].stopFlag) {
+ // 涓嶅仠杞︾灜鏈涳紝涓嶅悎鏍�
+ DEBUG("涓嶅仠杞︾灜鏈�");
+ if (ExamSchemeCrossing(RoadMap, road, x) == ROAD_ACTIVE_FORWARD) {
+ AddExamFault(42, rtkTime);
+ } else if (ExamSchemeCrossing(RoadMap, road, x) ==
+ ROAD_ACTIVE_TURN_LEFT) {
+ AddExamFault(44, rtkTime);
+ } else if (ExamSchemeCrossing(RoadMap, road, x) ==
+ ROAD_ACTIVE_TURN_RIGHT) {
+ AddExamFault(47, rtkTime);
+ }
}
}
- if (!(it->second & STOP_CAR) && RoadMap.roads[road].stopLine[x].stopFlag) {
- // 涓嶅仠杞︾灜鏈涳紝涓嶅悎鏍�
- DEBUG("涓嶅仠杞︾灜鏈�");
- if (RoadMap.roads[road].stopLine[x].active == ROAD_ACTIVE_FORWARD) {
- AddExamFault(42, rtkTime);
- } else if (RoadMap.roads[road].stopLine[x].active ==
- ROAD_ACTIVE_TURN_LEFT) {
- AddExamFault(44, rtkTime);
- } else if (RoadMap.roads[road].stopLine[x].active ==
- ROAD_ACTIVE_TURN_RIGHT) {
- AddExamFault(47, rtkTime);
- }
- }
-
RemoveTargetReduceRec(TargetReduceRec, it->first);
goto RECHECK;
}
}
+ if (RoadMap.calibrate == 1)
+ return;
+
RECHECK2:
for (auto it = TargetReduceRec2.begin(); it != TargetReduceRec2.end(); ++it) {
- int x = it->first;
- Line line;
- int roadIndex = 0;
+ int x = it->first;
+ Line line;
+ int roadIndex = 0;
- for (; roadIndex < RoadMap.roads.size(); ++roadIndex) {
- if (RoadMap.roads[roadIndex].id == RoadMap.specialAreas[x].road)
- break;
- }
-
- PointF point2 = CalcProjectionWithRoadEdge(RoadMap.roads[roadIndex].leftEdge,
- RoadMap.specialAreas[x].area[0]);
- MakeLine(&line, &RoadMap.specialAreas[x].area[0], &point2);
-
- if (CrashTheLine(line, car, CarModelList)) {
- if (RoadMap.specialAreas[x].type == ZEBRA_CROSSING &&
- !(it->second & REDUCE_SPEED)) {
- DEBUG("浜鸿閬� 涓嶆寜瑙勫畾鍑忛��");
- AddExamFault(48, rtkTime);
- }
- if (RoadMap.specialAreas[x].type == BUS_STATION_AREA &&
- !(it->second & REDUCE_SPEED)) {
- DEBUG("鍏氦绔� 涓嶆寜瑙勫畾鍑忛��");
- AddExamFault(50, rtkTime);
- }
- RemoveTargetReduceRec(TargetReduceRec2, it->first);
- goto RECHECK2;
- }
+ for (; roadIndex < RoadMap.roads.size(); ++roadIndex) {
+ if (RoadMap.roads[roadIndex].id == RoadMap.specialAreas[x].road)
+ break;
}
+
+ PointF point2 = CalcProjectionWithRoadEdge(RoadMap.roads[roadIndex].leftEdge,
+ RoadMap.specialAreas[x].area[0]);
+ MakeLine(&line, &RoadMap.specialAreas[x].area[0], &point2);
+
+ if (CrashTheLine(line, car, CarModelList)) {
+ if (RoadMap.specialAreas[x].type == ZEBRA_CROSSING &&
+ !(it->second & REDUCE_SPEED)) {
+ DEBUG("浜鸿閬� 涓嶆寜瑙勫畾鍑忛��");
+ AddExamFault(48, rtkTime);
+ }
+ if (RoadMap.specialAreas[x].type == BUS_STATION_AREA &&
+ !(it->second & REDUCE_SPEED)) {
+ DEBUG("鍏氦绔� 涓嶆寜瑙勫畾鍑忛��");
+ AddExamFault(50, rtkTime);
+ }
+ RemoveTargetReduceRec(TargetReduceRec2, it->first);
+ goto RECHECK2;
+ }
+ }
}
--
Gitblit v1.8.0