From 27fc91fbe8f88b6885356e68828cfe1ce1db7601 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 28 二月 2024 09:53:13 +0800
Subject: [PATCH] 坐标
---
lib/src/main/cpp/driver_test.cpp | 567 ++++++++++++++++++++++++++++++--------------------------
1 files changed, 303 insertions(+), 264 deletions(-)
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 1563f56..a85c306 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -15,6 +15,7 @@
#include <numeric>
#include <algorithm>
#include <string>
+#include <tuple>
#include "driver_test.h"
#include "defs.h"
@@ -26,9 +27,9 @@
#include "test_items/park_bottom.h"
#include "test_items/park_edge.h"
#include "test_items/error_list.h"
-#include "test_items/turn_a90.h"
+#include "test_items/right_corner.h"
#include "test_items/driving_curve.h"
-#include "test_items/stop_and_start.h"
+#include "test_items/uphill.h"
#include "master/comm_if.h"
#include "utils/xconvert.h"
#include "utils/num.h"
@@ -127,19 +128,13 @@
static const char DEFAULT_CROSSING_TURN_BACK_TTS[] = "鍓嶆柟閫夋嫨鍚堥�傚湴鐐规帀澶�";
static const char DEFAULT_CROSSING_TURN_UNKNOWN_TTS[] = "鍓嶆柟璺彛鍚粠鏁欑粌鎸囩ず";
-static bool ExamStart = false;
static int ExamType;
static bool reportSeatbeltEject;
vector<ExamFault> ExamFaultList;
static int examFaultIndex = 0;
-//static LIST_AREA_MAP AreaMapList;
-static area_map_t AreaMap;
-
ilovers::semaphore sem(0);
-
-static road_exam_map RoadMap;
static int exam_dummy_light;
@@ -152,8 +147,6 @@
static bool engineRuning = false;
const int ENGINE_MIN_ROTATE = 200;
static bool engineStart = false;
-
-exam_param_t examParam;
#define MOV_AVG_SIZE 1
#define RTK_BUFFER_SIZE 100
@@ -177,19 +170,23 @@
static void work_thread(void);
static void UploadModeling(motion_t &motion, modeling_t &modeling);
+prime_t& GetPrime(void)
+{
+ return prime;
+}
+
void DriverTestInit(void)
{
- ExamStart = false;
+ prime.examing = false;
+ prime.pMotion = &realtimeMotionStatus;
+ prime.pModeling = realtimeBodyModeling;
+ prime.pModel = &CarModel;
+
SetExamParamDefault();
// CarModelList.clear();
// AreaMapList.clear();
-
- RoadMap.roads.clear();
- RoadMap.specialAreas.clear();
- RoadMap.forbidLines.clear();
- RoadMap.examScheme.clear();
CarSensorInit();
@@ -201,97 +198,97 @@
static void SetExamParamDefault(void)
{
- examParam.hold_start_key_limit_time = DEFAULT_START_KEY_HOLD_TIME;
- examParam.curve_pause_criteria = DEFAULT_CURVE_PAUSE_TIME;
- examParam.park_bottom_pause_criteria = DEFAULT_PARK_BOTTOM_PAUSE_TIME;
- examParam.park_bottom_limit_time = DEFAULT_PARK_BOTTOM_FINISH_TIME;
- examParam.park_edge_pause_criteria = DEFAULT_PART_EDGE_PAUSE_TIME;
- examParam.park_edge_limit_time = DEFAULT_PARK_EDGE_FINISH_TIME;
- examParam.turn_a90_pause_criteria = DEFAULT_TURN_A90_PAUSE_TIME;
+ prime.examParam.hold_start_key_limit_time = DEFAULT_START_KEY_HOLD_TIME;
+ prime.examParam.curve_pause_criteria = DEFAULT_CURVE_PAUSE_TIME;
+ prime.examParam.park_bottom_pause_criteria = DEFAULT_PARK_BOTTOM_PAUSE_TIME;
+ prime.examParam.park_bottom_limit_time = DEFAULT_PARK_BOTTOM_FINISH_TIME;
+ prime.examParam.park_edge_pause_criteria = DEFAULT_PART_EDGE_PAUSE_TIME;
+ prime.examParam.park_edge_limit_time = DEFAULT_PARK_EDGE_FINISH_TIME;
+ prime.examParam.turn_a90_pause_criteria = DEFAULT_TURN_A90_PAUSE_TIME;
- examParam.ramp_stoppoint_red_distance = DEFAULT_RAMP_STOPPOINT_RED_DISTANCE;
- examParam.ramp_edge_yellow_distance = DEFAULT_RAMP_EDGE_YELLOW_DISTANCE;
- examParam.ramp_edge_red_distance = DEFAULT_RAMP_EDGE_RED_DISTANCE;
- examParam.ramp_slide_yellow_distance = DEFAULT_RAMP_SLIDE_YELLOW_DISTANCE;
- examParam.ramp_slide_red_distance = DEFAULT_RAMP_SLIDE_RED_DISTANCE;
- examParam.ramp_start_car_limit_time = DEFAULT_RAMP_FINISH_TIME;
+ prime.examParam.ramp_stoppoint_red_distance = DEFAULT_RAMP_STOPPOINT_RED_DISTANCE;
+ prime.examParam.ramp_edge_yellow_distance = DEFAULT_RAMP_EDGE_YELLOW_DISTANCE;
+ prime.examParam.ramp_edge_red_distance = DEFAULT_RAMP_EDGE_RED_DISTANCE;
+ prime.examParam.ramp_slide_yellow_distance = DEFAULT_RAMP_SLIDE_YELLOW_DISTANCE;
+ prime.examParam.ramp_slide_red_distance = DEFAULT_RAMP_SLIDE_RED_DISTANCE;
+ prime.examParam.ramp_start_car_limit_time = DEFAULT_RAMP_FINISH_TIME;
- examParam.road_slide_yellow_distance = DEFAULT_ROAD_SLIDE_YELLOW_DISTANCE;
- examParam.road_slide_red_distance = DEFAULT_ROAD_SLIDE_RED_DISTANCE;
- examParam.road_total_distance = DEFAULT_ROAD_MAX_DISTANCE;
- examParam.road_max_speed = DEFAULT_ROAD_MAX_SPEED;
+ prime.examParam.road_slide_yellow_distance = DEFAULT_ROAD_SLIDE_YELLOW_DISTANCE;
+ prime.examParam.road_slide_red_distance = DEFAULT_ROAD_SLIDE_RED_DISTANCE;
+ prime.examParam.road_total_distance = DEFAULT_ROAD_MAX_DISTANCE;
+ prime.examParam.road_max_speed = DEFAULT_ROAD_MAX_SPEED;
- examParam.gear_speed_table.resize(6);
- for (int i = 0; i < examParam.gear_speed_table.size(); ++i) {
- examParam.gear_speed_table[i].resize(2);
+ prime.examParam.gear_speed_table.resize(6);
+ for (int i = 0; i < prime.examParam.gear_speed_table.size(); ++i) {
+ prime.examParam.gear_speed_table[i].resize(2);
}
- examParam.gear_speed_table[0][0] = 0;
- examParam.gear_speed_table[0][1] = 20;
- examParam.gear_speed_table[1][0] = 5;
- examParam.gear_speed_table[1][1] = 30;
- examParam.gear_speed_table[2][0] = 15;
- examParam.gear_speed_table[2][1] = 40;
- examParam.gear_speed_table[3][0] = 25;
- examParam.gear_speed_table[3][1] = 10000;
- examParam.gear_speed_table[4][0] = 35;
- examParam.gear_speed_table[4][1] = 10000;
- examParam.gear_speed_table[5][0] = 45;
- examParam.gear_speed_table[5][1] = 10000;
+ prime.examParam.gear_speed_table[0][0] = 0;
+ prime.examParam.gear_speed_table[0][1] = 20;
+ prime.examParam.gear_speed_table[1][0] = 5;
+ prime.examParam.gear_speed_table[1][1] = 30;
+ prime.examParam.gear_speed_table[2][0] = 15;
+ prime.examParam.gear_speed_table[2][1] = 40;
+ prime.examParam.gear_speed_table[3][0] = 25;
+ prime.examParam.gear_speed_table[3][1] = 10000;
+ prime.examParam.gear_speed_table[4][0] = 35;
+ prime.examParam.gear_speed_table[4][1] = 10000;
+ prime.examParam.gear_speed_table[5][0] = 45;
+ prime.examParam.gear_speed_table[5][1] = 10000;
- examParam.gear_n_allow_time = DEFAULT_GEAR_N_TIME;
- examParam.same_gear_min_time = DEFAULT_SAME_GEAR_HOLD_TIME; // x绉掑唴锛屼笉鍏佽N->X->N->X缃悓涓�鎸′綅
- examParam.gear_speed_error_cumulative_time = DEFAULT_GEAR_SPEED_ERROR_MAX_TIME;
- examParam.road_pause_criteria = DEFAULT_ROAD_PAUSE_TIME;
- examParam.continuous_change_lane_min_time = DEFAULT_CHANGE_LANE_MIN_TIME;
- examParam.crash_dotted_line_cumulative_time = DEFAULT_CRASH_DOTTED_LINE_MAX_TIME;
- examParam.turn_signal_min_advance = DEFAULT_TURN_SIGNAL_MIN_ADVANCE;
- examParam.start_car_max_rpm = DEFAULT_START_CAR_MAX_RMP;
- examParam.start_car_limit_distance = DEFAULT_START_CAR_DISTANCE;
- examParam.open_door_drive_allow_distance = DEFAULT_START_CAR_OPEN_DOOR_DISTANCE;
+ prime.examParam.gear_n_allow_time = DEFAULT_GEAR_N_TIME;
+ prime.examParam.same_gear_min_time = DEFAULT_SAME_GEAR_HOLD_TIME; // x绉掑唴锛屼笉鍏佽N->X->N->X缃悓涓�鎸′綅
+ prime.examParam.gear_speed_error_cumulative_time = DEFAULT_GEAR_SPEED_ERROR_MAX_TIME;
+ prime.examParam.road_pause_criteria = DEFAULT_ROAD_PAUSE_TIME;
+ prime.examParam.continuous_change_lane_min_time = DEFAULT_CHANGE_LANE_MIN_TIME;
+ prime.examParam.crash_dotted_line_cumulative_time = DEFAULT_CRASH_DOTTED_LINE_MAX_TIME;
+ prime.examParam.turn_signal_min_advance = DEFAULT_TURN_SIGNAL_MIN_ADVANCE;
+ prime.examParam.start_car_max_rpm = DEFAULT_START_CAR_MAX_RMP;
+ prime.examParam.start_car_limit_distance = DEFAULT_START_CAR_DISTANCE;
+ prime.examParam.open_door_drive_allow_distance = DEFAULT_START_CAR_OPEN_DOOR_DISTANCE;
- examParam.prepare_tts = DEFAULT_PREPARE_TTS;
- examParam.touch_leftfront_tts = DEFAULT_TOUCH_LEFT_FRONT;
- examParam.touch_leftrear_tts = DEFAULT_TOUCH_LEFT_REAR;
- examParam.touch_rightfront_tts = DEFAULT_TOUCH_RIGHT_FRONT;
- examParam.touch_rightrear_tts = DEFAULT_TOUCH_RIGHT_REAR;
- examParam.start_engine_tts = DEFAULT_START_ENGINE;
+ prime.examParam.prepare_tts = DEFAULT_PREPARE_TTS;
+ prime.examParam.touch_leftfront_tts = DEFAULT_TOUCH_LEFT_FRONT;
+ prime.examParam.touch_leftrear_tts = DEFAULT_TOUCH_LEFT_REAR;
+ prime.examParam.touch_rightfront_tts = DEFAULT_TOUCH_RIGHT_FRONT;
+ prime.examParam.touch_rightrear_tts = DEFAULT_TOUCH_RIGHT_REAR;
+ prime.examParam.start_engine_tts = DEFAULT_START_ENGINE;
- examParam.start_car_begin_tts = DEFAULT_START_CAR_BEGIN_TTS;
- examParam.start_car_end_tts = DEFAULT_START_CAR_END_TTS;
- examParam.change_lane_limit_distance = CHANGE_LANE_MAX_DISTANCE;
- examParam.change_lane_begin_tts = DEFAULT_CHANGE_LANE_BEGIN_TTS;
- examParam.change_lane_end_tts = DEFAULT_CHANGE_LANE_END_TTS;
- examParam.shift_limit_distance = DEFAULT_SHIFT_MAX_DISTANCE;
- examParam.shift_hold_time = DEFAULT_SHIFT_HOLD_TIME;
- examParam.shift_begin_tts = DEFAULT_SHIFT_BEGIN_TTS;
- examParam.shift_end_tts = DEFAULT_SHIFT_END_TTS;
- examParam.shift_up_tts = "";
- examParam.shift_down_tts = "";
+ prime.examParam.start_car_begin_tts = DEFAULT_START_CAR_BEGIN_TTS;
+ prime.examParam.start_car_end_tts = DEFAULT_START_CAR_END_TTS;
+ prime.examParam.change_lane_limit_distance = CHANGE_LANE_MAX_DISTANCE;
+ prime.examParam.change_lane_begin_tts = DEFAULT_CHANGE_LANE_BEGIN_TTS;
+ prime.examParam.change_lane_end_tts = DEFAULT_CHANGE_LANE_END_TTS;
+ prime.examParam.shift_limit_distance = DEFAULT_SHIFT_MAX_DISTANCE;
+ prime.examParam.shift_hold_time = DEFAULT_SHIFT_HOLD_TIME;
+ prime.examParam.shift_begin_tts = DEFAULT_SHIFT_BEGIN_TTS;
+ prime.examParam.shift_end_tts = DEFAULT_SHIFT_END_TTS;
+ prime.examParam.shift_up_tts = "";
+ prime.examParam.shift_down_tts = "";
- examParam.straight_begin_tts = DEFAULT_STRAIGHT_BEGIN_TTS;
- examParam.straight_end_tts = DEFAULT_STRAIGHT_END_TTS;
- examParam.straight_limit_distance = DEFAULT_STRAIGHT_MAX_DISTANCE;
- examParam.straight_max_offset = DEFAULT_STRAIGHT_MAX_OFFSET;
+ prime.examParam.straight_begin_tts = DEFAULT_STRAIGHT_BEGIN_TTS;
+ prime.examParam.straight_end_tts = DEFAULT_STRAIGHT_END_TTS;
+ prime.examParam.straight_limit_distance = DEFAULT_STRAIGHT_MAX_DISTANCE;
+ prime.examParam.straight_max_offset = DEFAULT_STRAIGHT_MAX_OFFSET;
- examParam.overtake_limit_distance = DEFAULT_OVERTAKE_MAX_DISTANCE;
- examParam.overtake_begin_tts = DEFAULT_OVERTAKE_BEGIN_TTS;
- examParam.overtake_end_tts = DEFAULT_OVERTAKE_END_TTS;
+ prime.examParam.overtake_limit_distance = DEFAULT_OVERTAKE_MAX_DISTANCE;
+ prime.examParam.overtake_begin_tts = DEFAULT_OVERTAKE_BEGIN_TTS;
+ prime.examParam.overtake_end_tts = DEFAULT_OVERTAKE_END_TTS;
- examParam.stop_car_limit_distance = DEFAULT_STOP_CAR_MAX_DISTANCE;
- examParam.stop_car_open_door_allow_time = DEFAULT_STOP_CAR_OPEN_DOOR_MAX_TIME;
- examParam.stop_car_edge_red_distance = DEFAULT_STOP_CAR_EDGE_RED_DISTANCE;
- examParam.stop_car_edge_yellow_distance = DEFAULT_STOP_CAR_EDGE_YELLOW_DISTANCE;
- examParam.stop_car_begin_tts = DEFAULT_STOP_CAR_BEGIN_TTS;
- examParam.stop_car_end_tts = DEFAULT_STOP_CAR_END_TTS;
- examParam.crossing_stop_valid_distance = DEFAULT_CROSSING_STOP_VALID_DISTANCE;
- examParam.cross_school_max_speed = DEFAULT_CROSS_SCHOOL_MAX_SPEED;
- examParam.crossing_break_valid_distance = DEFAULT_CROSS_BREAK_VALID_DISTANCE;
+ prime.examParam.stop_car_limit_distance = DEFAULT_STOP_CAR_MAX_DISTANCE;
+ prime.examParam.stop_car_open_door_allow_time = DEFAULT_STOP_CAR_OPEN_DOOR_MAX_TIME;
+ prime.examParam.stop_car_edge_red_distance = DEFAULT_STOP_CAR_EDGE_RED_DISTANCE;
+ prime.examParam.stop_car_edge_yellow_distance = DEFAULT_STOP_CAR_EDGE_YELLOW_DISTANCE;
+ prime.examParam.stop_car_begin_tts = DEFAULT_STOP_CAR_BEGIN_TTS;
+ prime.examParam.stop_car_end_tts = DEFAULT_STOP_CAR_END_TTS;
+ prime.examParam.crossing_stop_valid_distance = DEFAULT_CROSSING_STOP_VALID_DISTANCE;
+ prime.examParam.cross_school_max_speed = DEFAULT_CROSS_SCHOOL_MAX_SPEED;
+ prime.examParam.crossing_break_valid_distance = DEFAULT_CROSS_BREAK_VALID_DISTANCE;
- examParam.crossing_go_straight_tts = DEFAULT_CROSSING_GO_STRAIGHT_TTS;
- examParam.crossing_turn_left_tts = DEFAULT_CROSSING_TURN_LEFT_TTS;
- examParam.crossing_turn_right_tts = DEFAULT_CROSSING_TURN_RIGHT_TTS;
- examParam.crossing_turn_back_tts = DEFAULT_CROSSING_TURN_BACK_TTS;
- examParam.crossing_turn_unknown_tts = DEFAULT_CROSSING_TURN_UNKNOWN_TTS;
+ prime.examParam.crossing_go_straight_tts = DEFAULT_CROSSING_GO_STRAIGHT_TTS;
+ prime.examParam.crossing_turn_left_tts = DEFAULT_CROSSING_TURN_LEFT_TTS;
+ prime.examParam.crossing_turn_right_tts = DEFAULT_CROSSING_TURN_RIGHT_TTS;
+ prime.examParam.crossing_turn_back_tts = DEFAULT_CROSSING_TURN_BACK_TTS;
+ prime.examParam.crossing_turn_unknown_tts = DEFAULT_CROSSING_TURN_UNKNOWN_TTS;
}
static void ReadDriverExamPrimerTimeout(apptimer_var_t val)
@@ -308,134 +305,113 @@
void ClearAreaMap(void)
{
- if (ExamStart)
- return;
-
-// for (int i = 0; i < AreaMapList.size(); ++i) {
-// if (AreaMapList[i].map.point != NULL)
-// free(AreaMapList[i].map.point);
-// if (AreaMapList[i].map2.point != NULL)
-// free(AreaMapList[i].map2.point);
-// }
-//
-// LIST_AREA_MAP().swap(AreaMapList);
-
-
- vector<curve_map_t>().swap(AreaMap.curve_map);
- vector<park_button_map_t>().swap(AreaMap.park_button_map);
- vector<park_edge_map_t>().swap(AreaMap.park_edge_map);
- vector<turn_a90_map_t>().swap(AreaMap.turn_a90_map);
- vector<uphill_map_t>().swap(AreaMap.uphill_map);
-}
-
-void AddAreaMap(int id, int type, const double (*map)[2], int pointNum, const double (*map2)[2], int pointNum2)
-{
- if (map == NULL || pointNum == 0 || ExamStart)
- return;
- DEBUG("鍔犲叆鍦板浘淇℃伅 id %d type %d pointNum %d point2Num %d", id, type, pointNum, pointNum2);
-
-// struct area_exam_map newMap;
-//
-// newMap.id = id;
-// newMap.type = type;
-// newMap.map.num = pointNum;
-// newMap.map2.num = 0;
-// newMap.map.point = NULL;
-// newMap.map2.point = NULL;
-//
-// if (pointNum > 0) {
-// newMap.map.point = (PointF *) malloc(pointNum * sizeof(PointF));
-// for (int i = 0; i < pointNum; ++i) {
-// newMap.map.point[i].X = map[i][0];
-// newMap.map.point[i].Y = map[i][1];
-// }
-// }
-//
-// if (pointNum2 > 0 && map2 != NULL) {
-// newMap.map2.num = pointNum2;
-// newMap.map2.point = (PointF *) malloc(pointNum2 * sizeof(PointF));
-// for (int i = 0; i < pointNum2; ++i) {
-// newMap.map2.point[i].X = map2[i][0];
-// newMap.map2.point[i].Y = map2[i][1];
-// }
-// }
-//
-// AreaMapList.push_back(newMap);
+ if (!prime.examing) {
+ DEBUG("娓呴櫎鎵�鏈夊湴鍥�");
+ vector<curve_map_t>().swap(std::get<MAP_TYPE_CURVE>(prime.maps));
+ vector<park_button_map_t>().swap(std::get<MAP_TYPE_PARK_BUTTOM>(prime.maps));
+ vector<park_edge_map_t>().swap(std::get<MAP_TYPE_PARK_EDGE>(prime.maps));
+ vector<turn_a90_map_t>().swap(std::get<MAP_TYPE_RIGHT_CORNER>(prime.maps));
+ vector<uphill_map_t>().swap(std::get<MAP_TYPE_UPHILL>(prime.maps));
+ }
}
void AddCurveMap(curve_map_t &map)
{
- AreaMap.curve_map.push_back(map);
+ DEBUG("娣诲姞鏇茬嚎琛岄┒鍦板浘");
+ if (prime.examing) {
+ return;
+ }
+ for (auto m: std::get<MAP_TYPE_CURVE>(prime.maps)) {
+ if (m.id == map.id) {
+ return;
+ }
+ }
+
+ std::get<MAP_TYPE_CURVE>(prime.maps).push_back(map);
}
+// 濡傛灉鏈噰闆嗚溅浣嶅彛铏氱嚎鍐呬晶锛屽垯闇�瑕佽绠楀嚭鏉�
void AddParkButtonMap(park_button_map_t &map)
{
- AreaMap.park_button_map.push_back(map);
+ DEBUG("娣诲姞鍊掕溅鍏ュ簱鍦板浘");
+ if (prime.examing) {
+ return;
+ }
+
+ for (auto m: std::get<MAP_TYPE_PARK_BUTTOM>(prime.maps)) {
+ if (m.id == map.id) {
+ return;
+ }
+ }
+ if (map.points.size() == 8) {
+ PointF p8 = PointExtend(map.points[2], map.line_width, YawOf(map.points[2], map.points[3]));
+ PointF p9 = PointExtend(map.points[5], map.line_width, YawOf(map.points[5], map.points[4]));
+ map.points.push_back(p8);
+ map.points.push_back(p9);
+ }
+ std::get<MAP_TYPE_PARK_BUTTOM>(prime.maps).push_back(map);
+ DEBUG("鍊掑簱鍦板浘鐐规暟锛�%d", map.points.size());
+ DEBUG("鍊掑簱鍦板浘鐐规暟 %d",std::get<MAP_TYPE_PARK_BUTTOM>(prime.maps)[0].points.size());
}
+// 濡傛灉鏈噰闆嗚溅浣嶅彛铏氱嚎鍐呬晶锛屽垯闇�瑕佽绠楀嚭鏉�
void AddParkEdgeMap(park_edge_map_t &map)
{
- AreaMap.park_edge_map.push_back(map);
-}
-
-void CleanRoadMap(void)
-{
- if (ExamStart) return;
-
- DEBUG("娓呴櫎鏃х殑璺�冨湴鍥�");
-
- vector<road_t>().swap(RoadMap.roads);
- vector<special_area_t>().swap(RoadMap.specialAreas);
- vector<forbid_line_t>().swap(RoadMap.forbidLines);
-// vector<scheme_t>().swap(RoadMap.examScheme);
-}
-
-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.forbidLines.assign(map.forbidLines.begin(), map.forbidLines.end());
-
-// RoadMap.examScheme.assign(scheme.begin(), scheme.end());
-
- DEBUG("寰楀埌鏂扮殑璺�冨湴鍥� 璺暟閲� %d 鐗规畩鍖哄煙鏁伴噺 %d 鍏朵粬绂佹绾挎暟閲� %d 椤圭洰鏁伴噺 %d", RoadMap.roads.size(), RoadMap.specialAreas.size(), RoadMap.forbidLines.size(), RoadMap.examScheme.size());
-
- /*for (int i = 0; i < RoadMap.roads.size(); ++i) {
- DEBUG("璺� id = %d", RoadMap.roads[i].id);
- DEBUG("宸﹁竟绾挎鏁� %d", RoadMap.roads[i].leftEdge.size());
- for (int j = 0; j < RoadMap.roads[i].leftEdge.size(); ++j) {
- int n = RoadMap.roads[i].leftEdge[j].points.size();
-
- DEBUG("\t褰撳墠宸﹁竟绾挎 绫诲瀷 %d 鐐规暟 %d", RoadMap.roads[i].leftEdge[j].character, n);
- for (int k = 0; k < n; ++k) {
- DEBUG("\t\t鐐瑰潗鏍� %d: %f, %f", k, RoadMap.roads[i].leftEdge[j].points[k].X, RoadMap.roads[i].leftEdge[j].points[k].Y);
- }
+ DEBUG("娣诲姞渚ф柟鍋滆溅鍦板浘");
+ if (prime.examing) {
+ return;
+ }
+ for (auto m: std::get<MAP_TYPE_PARK_EDGE>(prime.maps)) {
+ if (m.id == map.id) {
+ return;
}
-
- DEBUG("鍙宠竟绾挎鏁� %d", RoadMap.roads[i].rightEdge.size());
- for (int j = 0; j < RoadMap.roads[i].rightEdge.size(); ++j) {
- int n = RoadMap.roads[i].rightEdge[j].points.size();
-
- DEBUG("\t褰撳墠鍙宠竟绾挎 绫诲瀷 %d 鐐规暟 %d", RoadMap.roads[i].rightEdge[j].character, n);
- for (int k = 0; k < n; ++k) {
- DEBUG("\t\t鐐瑰潗鏍� %d: %f, %f", k, RoadMap.roads[i].rightEdge[j].points[k].X, RoadMap.roads[i].rightEdge[j].points[k].Y);
- }
- }
- }*/
+ }
+ if (map.points.size() == 8) {
+ PointF p8 = PointExtend(map.points[2], map.line_width, YawOf(map.points[2], map.points[3]));
+ PointF p9 = PointExtend(map.points[5], map.line_width, YawOf(map.points[5], map.points[4]));
+ map.points.push_back(p8);
+ map.points.push_back(p9);
+ }
+ std::get<MAP_TYPE_PARK_EDGE>(prime.maps).push_back(map);
}
-void SetRoadExamScheme(vector<scheme_t> &scheme)
+// 鍧¢亾璧锋鍦板浘瑕佹妸宸︿笅瑙掑拰宸︿笂瑙掕绠楀嚭鏉ワ紝鏂逛究鍦哄湴鐨勮繘鍏ュ拰閫�鍑哄垽鏂�
+void AddUphillMap(uphill_map_t &map)
{
- if (ExamStart) return;
+ DEBUG("娣诲姞涓婂潯璧锋鍦板浘");
+ if (prime.examing) {
+ return;
+ }
+ for (auto m: std::get<MAP_TYPE_UPHILL>(prime.maps)) {
+ if (m.id == map.id) {
+ return;
+ }
+ }
- vector<scheme_t>().swap(RoadMap.examScheme);
+ if (map.points.size() != 10)
+ return;
- RoadMap.examScheme.assign(scheme.begin(), scheme.end());
+ PointF bottom_left = Calc3Point(map.points[1], map.points[0], DistanceOf(map.points[1], map.points[2]), 'R');
+ PointF top_left = Calc3Point(map.points[8], map.points[9], DistanceOf(map.points[8], map.points[7]), 'L');
- DEBUG("寰楀埌璺�冮」鐩柟妗� 椤圭洰鏁伴噺 %d", RoadMap.examScheme.size());
+ map.points.push_back(bottom_left); // 浣滀负10鍙风偣
+ map.points.push_back(top_left); // 浣滀负11鍙风偣
+
+ std::get<MAP_TYPE_UPHILL>(prime.maps).push_back(map);
+}
+
+void AddTurnA90Map(turn_a90_map_t &map)
+{
+ DEBUG("娣诲姞鐩磋杞集鍦板浘");
+ if (prime.examing) {
+ return;
+ }
+ for (auto m: std::get<MAP_TYPE_RIGHT_CORNER>(prime.maps)) {
+ if (m.id == map.id) {
+ return;
+ }
+ }
+ std::get<MAP_TYPE_RIGHT_CORNER>(prime.maps).push_back(map);
}
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
@@ -444,7 +420,7 @@
{
DEBUG("鍔犲叆杞﹁締淇℃伅 pointNum %d", pointNum);
- if (point == NULL || pointNum == 0 || ExamStart) return;
+ if (point == NULL || pointNum == 0 || prime.examing) return;
vector<int>().swap(CarModel.body);
vector<car_desc_t>().swap(CarModel.carDesc);
@@ -533,19 +509,19 @@
TerminateAreaExam();
- ExamStart = false;
+ prime.examing = false;
MA_SendExamStatus(0, 0);
return;
}
// type = TEST_TYPE_ROAD_CALIBRATE;
- /*if (AreaMapList.size() == 0 && type == TEST_TYPE_AREA) {
+ if (std::get<MAP_TYPE_PARK_BUTTOM>(prime.maps).size() == 0 && type == TEST_TYPE_AREA) {
DEBUG("娌℃湁鍦鸿�冨湴鍥�");
err = true;
MA_SendExamStatus(0, -1);
- }*/
- if (CarModel.carDesc.size() == 0) {
+ }
+ if (prime.pModel->carDesc.size() == 0) {
DEBUG("娌℃湁杞︽ā");
err = true;
MA_SendExamStatus(0, -2);
@@ -555,40 +531,25 @@
// err = true;
// MA_SendExamStatus(0, -3);
}
- if (type != TEST_TYPE_AREA && RoadMap.roads.size() == 0) {
- DEBUG("娌℃湁璺�冨湴鍥�");
- err = true;
- MA_SendExamStatus(0, -1);
- }
-
- if ((type == TEST_TYPE_ROAD_DUMMY_LIGHT || type == TEST_TYPE_ROAD_TRUE_LIGHT) && RoadMap.examScheme.size() == 0) {
- DEBUG("娌℃湁璺�冪嚎璺柟妗�");
- err = true;
- MA_SendExamStatus(0, -3);
- }
if (!err) {
- if (!ExamStart) {
+ if (!prime.examing) {
DEBUG("鍚姩鑰冭瘯");
ExamFaultList.clear();
examFaultIndex = 0;
- ExamStart = true;
+ prime.examing = true;
ExamType = type;
reportSeatbeltEject = false;
- 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;
- }
if (type == TEST_TYPE_AREA) {
+ DEBUG("鍊掑簱鍦板浘鏁扮洰锛�%d", std::get<MAP_TYPE_PARK_BUTTOM>(prime.maps).size());
+ DEBUG("渚ф柟鍦板浘鏁扮洰锛�%d", std::get<MAP_TYPE_PARK_EDGE>(prime.maps).size());
+ DEBUG("鏇茬嚎鍦板浘鏁扮洰锛�%d", std::get<MAP_TYPE_CURVE>(prime.maps).size());
+ DEBUG("鍧¢亾鍦板浘鏁扮洰锛�%d", std::get<MAP_TYPE_UPHILL>(prime.maps).size());
+ DEBUG("鐩磋鍦板浘鏁扮洰锛�%d", std::get<MAP_TYPE_RIGHT_CORNER>(prime.maps).size());
+
InitAreaExam();
- }
- if (type == TEST_TYPE_ROAD_CALIBRATE) {
- RoadMap.calibrate = 1;
}
}
MA_SendExamStatus(1, 0);
@@ -607,16 +568,23 @@
realtimeMotionStatus = CalcMotionState(RtkInfoList);
// 绱姞閲岀▼
UpdataOdo(realtimeMotionStatus);
+ prime.odo = ReadOdo();
// 璁$畻褰撳墠杞﹁締鐐瑰潗鏍囧��
- prime.prev_modeling_index = prime.curr_modeling_index;
- prime.curr_modeling_index = (prime.curr_modeling_index+1) % (sizeof (realtimeBodyModeling) / sizeof (realtimeBodyModeling[0]));
- CalcBodyModeling(realtimeBodyModeling[prime.curr_modeling_index], CarModel, RtkInfoList.front());
- // 鍚慤I涓婃姤杞﹁締鐐瑰潗鏍�
- UploadModeling(realtimeMotionStatus, realtimeBodyModeling[prime.curr_modeling_index]);
- // 瑙﹀彂鑰冭瘯椤圭洰
- if (ExamStart) {
- ExecuteExam(prime);
+ if (CarModel.carDesc.size() > 0) {
+ prime.prev_modeling_index = prime.curr_modeling_index;
+ DEBUG("缂撳瓨鍧愭爣 %d", prime.prev_modeling_index);
+ prime.curr_modeling_index = (prime.curr_modeling_index + 1) %
+ (sizeof(realtimeBodyModeling) /
+ sizeof(realtimeBodyModeling[0]));
+ DEBUG("褰撳墠鍧愭爣 %d", prime.curr_modeling_index);
+ CalcBodyModeling(realtimeBodyModeling[prime.curr_modeling_index], CarModel,
+ RtkInfoList.front());
+ DEBUG("褰撳墠鍧愭爣 鐐规暟 %d", realtimeBodyModeling[prime.curr_modeling_index].points.size());
+ // 鍚慤I涓婃姤杞﹁締鐐瑰潗鏍�
+ UploadModeling(realtimeMotionStatus, realtimeBodyModeling[prime.curr_modeling_index]);
}
+ // 瑙﹀彂鑰冭瘯椤圭洰
+ ExecuteExam(prime);
}
}
@@ -637,13 +605,14 @@
// 鏌ユ壘1绉掑墠鐨勭偣,濡傛灉鎵句笉鍒板垯瑙嗕负鍋滆溅
auto prev = s.begin();
+
std::advance(prev, 1);
for (; prev != s.end(); ++prev) {
- if (prev->utc_time - curr->utc_time > 3000) {
+ if (curr->utc_time - prev->utc_time > 3000) {
return motion;
}
- if (prev->utc_time - curr->utc_time >= 1000) {
+ if (curr->utc_time - prev->utc_time >= 1000) {
break;
}
}
@@ -713,6 +682,70 @@
return motion;
}
+void UpdateSensor(int id, int value)
+{
+ switch (id) {
+ case OBD_SPEED:
+ prime.sensor.speed = value;
+ break;
+ case ENGINE_RPM:
+ prime.sensor.rpm = value;
+ break;
+ case GEAR:
+ prime.sensor.gear = value;
+ break;
+ case TURN_SIGNAL_LAMP:
+ prime.sensor.turn_signal_lamp = value;
+ break;
+ case DIPPED_BEAM_LAMP:
+ prime.sensor.dipped_beam_lamp = value;
+ break;
+ case FOG_LAMP:
+ prime.sensor.fog_lamp = value;
+ break;
+ case CLEARANCE_LAMP:
+ prime.sensor.clearance_lamp = value;
+ break;
+ case FLASH_BEAM_LAMP:
+ prime.sensor.flash_beam_lamp = value;
+ break;
+ case MAIN_BEAM_LAMP:
+ prime.sensor.main_beam_lamp = value;
+ break;
+ case SEATBELT:
+ prime.sensor.seatbelt = value;
+ break;
+ case ENGINE_START:
+ prime.sensor.engine_start = value;
+ break;
+ case BRAKE:
+ prime.sensor.brake = value;
+ break;
+ case HAND_BRAKE:
+ prime.sensor.hand_brake = value;
+ break;
+ case SECOND_BRAKE:
+ prime.sensor.second_brake = value;
+ break;
+ case DOOR:
+ prime.sensor.door = value;
+ break;
+ case SURROUND_CAR_1:
+ prime.sensor.surround_car_1 = value;
+ break;
+ case SURROUND_CAR_2:
+ prime.sensor.surround_car_2 = value;
+ break;
+ case SURROUND_CAR_3:
+ prime.sensor.surround_car_3 = value;
+ break;
+ case SURROUND_CAR_4:
+ prime.sensor.surround_car_4 = value;
+ break;
+ default:break;
+ }
+}
+
void UpdateRTKInfo(const rtk_info_t *s)
{
RtkInfoList.push_front(*s);
@@ -769,18 +802,37 @@
static double startCarMoveDistance;
static move_status_t prevMove = STOP;
+ // 鏇存柊杞﹁締浼犳劅鍣ㄦ暟鎹�
+ DEBUG("GEAR = %d", ReadCarStatus(GEAR));
+ DEBUG("RPM = %d", ReadCarStatus(ENGINE_RPM));
+ DEBUG("TURN_SIGNAL_LAMP = %d", ReadCarStatus(TURN_SIGNAL_LAMP));
+ DEBUG("DIPPED_BEAM_LAMP = %d", ReadCarStatus(DIPPED_BEAM_LAMP));
+ DEBUG("FOG_LAMP = %d", ReadCarStatus(FOG_LAMP));
+ DEBUG("CLEARANCE_LAMP = %d", ReadCarStatus(CLEARANCE_LAMP));
+ DEBUG("FLASH_BEAM_LAMP = %d", ReadCarStatus(FLASH_BEAM_LAMP));
+ DEBUG("MAIN_BEAM_LAMP = %d", ReadCarStatus(MAIN_BEAM_LAMP));
+ DEBUG("SEATBELT = %d", ReadCarStatus(SEATBELT));
+ DEBUG("BRAKE = %d", ReadCarStatus(BRAKE));
+ DEBUG("HAND_BRAKE = %d", ReadCarStatus(HAND_BRAKE));
+ DEBUG("SECOND_BRAKE = %d", ReadCarStatus(SECOND_BRAKE));
+ DEBUG("DOOR = %d", ReadCarStatus(DOOR));
+
+ if (!prime.examing) {
+ return;
+ }
+
if (prime.pMotion->move != STOP) {
- if (ReadCarStatus(SEATBELT) == EJECT_SEATBELT && !reportSeatbeltEject) {
+ if (prime.sensor.seatbelt == EJECT && !reportSeatbeltEject) {
DEBUG("涓嶇郴瀹夊叏甯�");
reportSeatbeltEject = true;
AddExamFault(ExamType == TEST_TYPE_AREA? 10101: 30101);
}
if (rec) {
- if (!handBreakActive2 && ReadOdo() - startCarMoveDistance >= examParam.start_car_limit_distance) {
+ if (!handBreakActive2 && prime.odo - startCarMoveDistance >= prime.examParam.start_car_limit_distance) {
handBreakActive2 = true;
if (ExamType == TEST_TYPE_ROAD_DUMMY_LIGHT || ExamType == TEST_TYPE_ROAD_TRUE_LIGHT) {
- if (ReadCarStatus(HAND_BREAK) == BREAK_ACTIVE) {
+ if (prime.sensor.hand_brake == ACTIVE) {
DEBUG("Handbreak active move over 10m");
// 鎵嬪埞鎷夎捣鐘舵�佷笅锛岃椹朵簡10绫充互涓婏紝涓嶅悎鏍�
AddExamFault(40205);
@@ -790,7 +842,7 @@
AddExamFault(40206);
}
}
- } else if (!handBreakActive && ReadOdo() - startCarMoveDistance >= examParam.open_door_drive_allow_distance && ReadCarStatus(HAND_BREAK) == BREAK_ACTIVE) {
+ } else if (!handBreakActive && prime.odo - startCarMoveDistance >= prime.examParam.open_door_drive_allow_distance && prime.sensor.hand_brake == ACTIVE) {
handBreakActive = true;
if (ExamType == TEST_TYPE_AREA) {
@@ -802,7 +854,7 @@
} else if (!rec || prevMove != STOP) { // 璁板綍鍋滆溅鐐�
rec = true;
handBreakActive = handBreakActive2 = false;
- startCarMoveDistance = ReadOdo();
+ startCarMoveDistance = prime.odo;
}
prevMove = prime.pMotion->move;
@@ -812,7 +864,7 @@
static void EngineStartHold(apptimer_var_t val) {
DEBUG("鐐圭伀瓒呮椂");
- if (ReadCarStatus(ENGINE_START) == ENGINE_START_ACTIVE) {
+ if (ReadCarStatus(ENGINE_START) == ACTIVE) {
// 涓嶅強鏃舵澗寮�鍚姩寮�鍏筹紝鎵�10鍒�
if (ExamType == TEST_TYPE_AREA) {
AddExamFault(10201);
@@ -826,16 +878,10 @@
{
struct ExamFault fault;
- if (!ExamStart)
- return;
-
fault.sn = examFaultIndex++;
- strcpy(fault.utc, StringUtil::FormatUTCTime(AppTimer_GetGmtTickCount()).c_str());
-
-// if (ExamType != TEST_TYPE_AREA) {
-// wrong += 1000;
-// }
+ //strcpy(fault.utc, StringUtil::FormatUTCTime(AppTimer_GetGmtTickCount()).c_str());
+ strcpy(fault.utc, "20230413172712.20");
fault.wrong_id = wrong;
@@ -921,10 +967,3 @@
}
}
-
-void SensorXChanged(uint16_t id, int value)
-{
-// handlePrepare(id, value);
-// handleLigthExam(id, value);
-}
-
--
Gitblit v1.8.0