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/test_items/uphill.cpp | 75 ++++++++++++++++++++++---------------
1 files changed, 44 insertions(+), 31 deletions(-)
diff --git a/lib/src/main/cpp/test_items/stop_and_start.cpp b/lib/src/main/cpp/test_items/uphill.cpp
similarity index 78%
rename from lib/src/main/cpp/test_items/stop_and_start.cpp
rename to lib/src/main/cpp/test_items/uphill.cpp
index 0037350..6d0c532 100644
--- a/lib/src/main/cpp/test_items/stop_and_start.cpp
+++ b/lib/src/main/cpp/test_items/uphill.cpp
@@ -2,7 +2,7 @@
// Created by YY on 2019/10/31.
//
-// |9
+// 11 |9
// |
// |
// |
@@ -15,13 +15,14 @@
// |
// |
// |
-// |0
+// 10 |0
#include <cstdlib>
#include <vector>
#include <cmath>
+#include <tuple>
-#include "stop_and_start.h"
+#include "uphill.h"
#include "../driver_test.h"
#include "../jni_log.h"
#include "../common/apptimer.h"
@@ -35,13 +36,9 @@
using namespace std;
-
-
-
const double EPSILON = 1e-3;
-static bool testing = false;
-
+static int handle;
static PointF stopPoint;
static bool check1 = false;
@@ -58,12 +55,12 @@
static double DistanceOfHead2Stopline(prime_t &prime);
static double DistanceOfTire2Edge(prime_t &prime);
static bool ExitTestArea(prime_t &prime);
+static void MotionChange(move_status_t mv, move_status_t prev, double distance);
-void StartSAS(prime_t &prime)
+void StartUphill(prime_t &prime)
{
DEBUG("杩涘叆鍧¤捣椤圭洰");
- testing = true;
stopConfirm = false;
restartComplete = false;
occurCrashRedLine = false;
@@ -71,8 +68,24 @@
slideNormalDistance = false;
reportSlideFault = false;
handBreakActive = false;
+ handle = RegisterCarMoveObserver(MotionChange);
+ MA_EnterMap(prime.examing_area.idx, MAP_TYPE_UPHILL, 1);
+}
- MA_EnterMap(prime.curr_exam_map.map_idx, MAP_TYPE_UPHILL, 1);
+void StopUphill(prime_t &prime)
+{
+ if (prime.examing_area.type != MAP_TYPE_UPHILL)
+ return;
+ DEBUG("閫�鍑哄潯璧烽」鐩�");
+
+ if (!check1) {
+ DEBUG("鏈繘琛屽仠杞﹁捣姝ュ姩浣�");
+ AddExamFault(10103);
+ }
+
+ UnregisterCarMoveObserver(handle);
+
+ prime.examing_area.type = MAP_TYPE_NONE;
}
static void StoppingTimeout(apptimer_var_t val) {
@@ -85,7 +98,7 @@
stopConfirm = true;
}
-void MotionChange(move_status_t mv)
+static void MotionChange(move_status_t mv, move_status_t prev, double distance)
{
AppTimer_delete(StopConfirm);
@@ -96,8 +109,10 @@
}
}
-int TestSAS(prime_t &prime)
+void TestUphill(prime_t &prime)
{
+ if (prime.examing_area.type != MAP_TYPE_UPHILL)
+ return;
static double distanceToStopLine = 0, distanceToEdge = 0;
if (CrashRedLine(prime)) {
@@ -119,7 +134,7 @@
stopPoint = prime.pModeling->base_point;
// 寮�濮嬪仠杞﹁鏃�
AppTimer_delete(StoppingTimeout);
- AppTimer_add(StoppingTimeout, examParam.ramp_start_car_limit_time);
+ AppTimer_add(StoppingTimeout, prime.examParam.ramp_start_car_limit_time);
// 妫�鏌ヨ溅澶村拰鍋滆溅甯︾殑璺濈
distanceToStopLine = DistanceOfHead2Stopline(prime);
@@ -127,7 +142,7 @@
DEBUG("DIS1 = %f DIS2 = %f", distanceToStopLine, distanceToEdge);
- if (distanceToStopLine > examParam.ramp_stoppoint_red_distance) {
+ if (distanceToStopLine > prime.examParam.ramp_stoppoint_red_distance) {
// 璺濈鍋滄绾垮墠鍚庤秴鍑�50鍘樼背
AddExamFault(20301);
DEBUG("璺濈鍋滄绾垮墠鍚庤秴鍑�50鍘樼背锛屼笉鍚堟牸");
@@ -137,11 +152,11 @@
DEBUG("鍓嶄繚闄╂病鏈変綅浜庡仠姝㈠甫鍐咃紝浣嗘病鏈夎秴鍑�50鍘樼背");
}
- if (distanceToEdge > examParam.ramp_edge_red_distance) {
+ if (distanceToEdge > prime.examParam.ramp_edge_red_distance) {
// 璺濈杈圭嚎瓒呭嚭50鍘樼背,涓嶅悎鏍�
AddExamFault(20302);
DEBUG("璺濈杈圭嚎瓒呭嚭50鍘樼背");
- } else if (distanceToEdge > examParam.ramp_edge_yellow_distance) {
+ } else if (distanceToEdge > prime.examParam.ramp_edge_yellow_distance) {
// 璺濈杈圭嚎瓒呭嚭30鍘樼背锛屾墸10鍒�
AddExamFault(20305);
DEBUG("璺濈杈圭嚎瓒呭嚭30鍘樼背");
@@ -149,7 +164,7 @@
}
// 鍋滆溅鍚庯紝妫�鏌ユ墜鍒规媺璧锋儏鍐�
- if (!handBreakActive && ReadCarStatus(HAND_BREAK) == BREAK_ACTIVE) {
+ if (!handBreakActive && prime.sensor.hand_brake == ACTIVE) {
handBreakActive = true;
}
}
@@ -158,7 +173,7 @@
// 杞﹁締浠庡仠姝㈢姸鎬佸啀娆$Щ鍔�
double juli = DistanceOf(prime.pModeling->base_point, stopPoint);
- if (juli > examParam.ramp_slide_yellow_distance) {
+ if (juli > prime.examParam.ramp_slide_yellow_distance) {
double deg = YawOf(stopPoint, prime.pModeling->base_point);
deg = fabs(prime.pModeling->yaw - deg);
if (deg > 180) {
@@ -185,7 +200,7 @@
} else {
// 杞﹁締鍚庢粦
slideNormalDistance = true;
- if (juli > examParam.ramp_slide_red_distance && !reportSlideFault) {
+ if (juli > prime.examParam.ramp_slide_red_distance && !reportSlideFault) {
// 鍚庢粦瓒呰繃30鍘樼背, 涓嶅悎鏍�
DEBUG("鍚庢粦瓒呰繃30鍘樼背");
reportSlideFault = true;
@@ -201,10 +216,8 @@
// 涓嶅仠杞︾洿鎺ョ寮�
AddExamFault(10103);
}
- MA_EnterMap(prime.curr_exam_map.map_idx, MAP_TYPE_UPHILL, 0);
+ MA_EnterMap(prime.examing_area.idx, MAP_TYPE_UPHILL, 0);
}
-
- return testing ? 1 : 0;
}
// 杞﹁疆鏄惁鍘嬭竟绾�
@@ -225,8 +238,8 @@
for (int i = 0; i < sizeof(red_lines) / sizeof(red_lines[0]); ++i) {
Line red_line;
- MAKE_LINE(red_line, prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[red_lines[i][0]],
- prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[red_lines[i][1]]);
+ MAKE_LINE(red_line, std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[red_lines[i][0]],
+ std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[red_lines[i][1]]);
if (IntersectionOf(red_line, frontAxle) == GM_Intersection ||
IntersectionOf(red_line, rearAxle) == GM_Intersection) {
@@ -244,10 +257,10 @@
Line upper_edge, lower_edge;
- MAKE_LINE(upper_edge, prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[5],
- prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[6]);
- MAKE_LINE(lower_edge, prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[4],
- prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[3]);
+ MAKE_LINE(upper_edge, std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[5],
+ std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[6]);
+ MAKE_LINE(lower_edge, std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[4],
+ std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[3]);
if (IntersectionOfLine(prime.pModeling->points[prime.pModel->axial[AXIAL_FRONT]], upper_edge) == REL_POS_RIGHT) {
dis = DistanceOf(prime.pModeling->points[prime.pModel->axial[AXIAL_FRONT]], upper_edge);
@@ -264,8 +277,8 @@
{
Line edge;
- MAKE_LINE(edge, prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[0],
- prime.pMap->uphill_map[prime.curr_exam_map.map_idx].map[8]);
+ MAKE_LINE(edge, std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[0],
+ std::get<MAP_TYPE_UPHILL>(prime.maps)[prime.examing_area.idx].points[8]);
double l1 = DistanceOf(prime.pModeling->points[prime.pModel->right_front_tire[TIRE_OUTSIDE]], edge);
--
Gitblit v1.8.0