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/test_items2/road_exam.cpp | 440 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 267 insertions(+), 173 deletions(-)
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;
}
}
}
--
Gitblit v1.8.0