From eced3d013f06b623a49cb9deaba42218c4e37bb8 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期三, 15 一月 2020 10:56:05 +0800
Subject: [PATCH] update
---
lib/src/main/cpp/driver_test.cpp | 146 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 105 insertions(+), 41 deletions(-)
diff --git a/lib/src/main/cpp/driver_test.cpp b/lib/src/main/cpp/driver_test.cpp
index 28b5bfc..48c820b 100644
--- a/lib/src/main/cpp/driver_test.cpp
+++ b/lib/src/main/cpp/driver_test.cpp
@@ -57,10 +57,8 @@
int errs = 0;
vector<int> ErrorList;
-
-static Polygon theParkEdgeMap; // 渚т綅鍋滆溅鍦板浘
-static Polygon theTurn90Map;
-static Polygon theSSMap;
+vector<ExamFault> ExamFaultList;
+static int examFaultIndex = 0;
static struct map_list {
int id;
@@ -71,35 +69,8 @@
static int MapNum = 0;
-
-#define CAR_COORD_STORE_SIZE 10
-
-struct car_coord_ {
- uint32_t uptime;
- double azimuth;
- PointF coord;
-};
-
-struct car_desc_ {
- double distance; // 璺濈涓诲ぉ绾跨殑璺濈
- double angle; // 浠庝腑杞寸嚎閫嗘椂閽堝舰鎴愮殑瑙掑害
-};
-
-struct car_desc_ *CarDesc = NULL;
-
-typedef struct {
- PointF basePoint;
- int axial[2];
- int left_front_tire[2];
- int right_front_tire[2];
- int left_rear_tire[2];
- int right_rear_tire[2];
- int pointNum;
- struct car_desc_ *carDesc;
- PointF *carXY;
-} car_model;
-
static car_model *CarModel = NULL;
+static car_model *CarModelPrev = NULL;
#define MOV_AVG_SIZE 1
#define RTK_BUFFER_SIZE 100
@@ -110,15 +81,17 @@
static uint32_t CalcTimeDiff(const rtk_info *a, const rtk_info *b);
static void ReadDriverExamPrimerTimeout(union sigval sig);
-static void UpdateCarBodyCoord(double azimuth, PointF main_ant, const car_model *carModel);
+static void UpdateCarBodyCoord(double azimuth, PointF main_ant, car_model *carModel);
static bool UpdateCarCoord(double &spd, int &mov, int &idx);
static bool FrontTireEnterArea(const Polygon *car, const Polygon *map);
void DriverTestInit(void)
{
+ TestStart = false;
memset(&MapList, 0, sizeof(MapList));
MapNum = 0;
CarModel = NULL;
+ CarModelPrev = NULL;
RtkBuffer = (rtk_info *) malloc(RTK_BUFFER_SIZE * sizeof(rtk_info));
RtkBufferNum = RtkBufferIn = 0;
@@ -140,6 +113,8 @@
void ClearMap(void)
{
+ if (TestStart) return;
+
for (int i = 0; i < MapNum; ++i) {
if (MapList[i].map.point != NULL)
free(MapList[i].map.point);
@@ -156,7 +131,7 @@
AppTimer_delete(ReadDriverExamPrimerTimeout);
- if (map == NULL || pointNum == 0)
+ if (map == NULL || pointNum == 0 || TestStart)
return;
MapList[MapNum].id = id;
@@ -187,13 +162,15 @@
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
- double (*point)[2], int pointNum)
+ int *body, int bodyNum,double (*point)[2], int pointNum)
{
DEBUG("SetCarMeasurePoint pointNum %d", pointNum);
- if (point == NULL || pointNum == 0) return;
+ if (point == NULL || pointNum == 0 || TestStart) return;
if (CarModel != NULL) {
+ if (CarModel->body != NULL)
+ free(CarModel->body);
if (CarModel->carDesc != NULL)
free(CarModel->carDesc);
if (CarModel->carXY != NULL)
@@ -201,6 +178,23 @@
free(CarModel);
CarModel = NULL;
}
+
+ if (CarModelPrev != NULL) {
+ if (CarModelPrev->body != NULL)
+ free(CarModelPrev->body);
+ if (CarModelPrev->carDesc != NULL)
+ free(CarModelPrev->carDesc);
+ if (CarModelPrev->carXY != NULL)
+ free(CarModelPrev->carXY);
+ free(CarModelPrev);
+ CarModelPrev = NULL;
+ }
+
+ CarModelPrev = (car_model *)malloc(sizeof(car_model));
+ CarModelPrev->body = NULL;
+ CarModelPrev->carDesc = NULL;
+ CarModelPrev->pointNum = 0;
+ CarModelPrev->carXY = (PointF *) malloc(sizeof(PointF) * pointNum);
CarModel = (car_model *)malloc(sizeof(car_model));
CarModel->basePoint.X = basePoint[0];
@@ -215,8 +209,22 @@
CarModel->left_rear_tire[1] = left_rear_tire[1];
CarModel->right_rear_tire[0] = right_rear_tire[0];
CarModel->right_rear_tire[1] = right_rear_tire[1];
- CarModel->pointNum = pointNum;
+ CarModel->bodyNum = bodyNum;
+ if (bodyNum == 0 || body == NULL) {
+ CarModel->bodyNum = 6;
+ CarModel->body = (int *) malloc(sizeof(int) * 6);
+ for (int i = 0; i < 6; ++i) {
+ CarModel->body[i] = i;
+ }
+ } else {
+ CarModel->body = (int *) malloc(sizeof(int) * CarModel->bodyNum);
+ for (int i = 0; i < CarModel->bodyNum; ++i) {
+ CarModel->body[i] = body[i];
+ }
+ }
+
+ CarModel->pointNum = pointNum;
CarModel->carDesc = (struct car_desc_ *)malloc(sizeof(struct car_desc_) * pointNum);
CarModel->carXY = (PointF *) malloc(sizeof(PointF) * pointNum);
@@ -264,8 +272,15 @@
err = true;
MA_SendExamStatus(0, -2);
}
- if (!err)
+ if (!err) {
+ if (!TestStart) {
+ ExamFaultList.clear();
+ examFaultIndex = 0;
+
+ TestStart = true;
+ }
MA_SendExamStatus(1, 0);
+ }
}
void UpdateRTKInfo(const rtk_info *s)
@@ -275,6 +290,8 @@
RtkBufferIn = (RtkBufferIn + 1) % RTK_BUFFER_SIZE;
if (RtkBufferNum < RTK_BUFFER_SIZE)
RtkBufferNum++;
+ } else {
+ return;
}
double speed;
@@ -289,9 +306,9 @@
RtkBuffer[index].mm, RtkBuffer[index].ss, RtkBuffer[index].dss);
brief.qf = RtkBuffer[index].qf;
- brief.map_id = -1;
+ brief.map_id = 863;
brief.move = move;
- brief.speed = speed;
+ brief.speed = speed * 3.6;
brief.heading = RtkBuffer[index].heading;
brief.main_ant[0] = RtkBuffer[index].x;
brief.main_ant[1] = RtkBuffer[index].y;
@@ -307,6 +324,12 @@
brief.right_rear_tire[0] = CarModel->right_rear_tire[0];
brief.right_rear_tire[1] = CarModel->right_rear_tire[1];
+ brief.bodyNum = CarModel->bodyNum;
+ brief.body = (int *) malloc(sizeof(int) * CarModel->bodyNum);
+ for (int i = 0; i < CarModel->bodyNum; ++i) {
+ brief.body[i] = CarModel->body[i];
+ }
+
brief.pointNum = CarModel->pointNum;
brief.point = (double *) malloc(CarModel->pointNum * 2 * sizeof(double));
for (int i = 0, j = 0; i < CarModel->pointNum; ++i) {
@@ -315,6 +338,13 @@
}
MA_SendCarPosition(&brief);
+
+ free(brief.body);
+ free(brief.point);
+
+ if (TestStart) {
+// TestParkBottom(ErrorList, 0, CarModel, CarModelPrev, speed, move);
+ }
}
}
@@ -345,6 +375,8 @@
// 濡傛灉涓�瀹氱殑鏃堕棿閮芥病鏈夋湁鏁堝畾浣嶏紝鍒犻櫎涔嬪墠鐨勫��
uint32_t tmDiff = CalcTimeDiff(&RtkBuffer[p1], &RtkBuffer[p2]);
+ DEBUG("tmDiff = %ld, p1 = %d p2 = %d dss = %d dss2 = %d", tmDiff, p1, p2, RtkBuffer[p1].dss, RtkBuffer[p2].dss);
+
if (tmDiff > D_SEC(5)) {
if (p1 != 0)
RtkBuffer[0] = RtkBuffer[p1];
@@ -357,7 +389,22 @@
main_ant_coord.X = RtkBuffer[p1].x;
main_ant_coord.Y = RtkBuffer[p1].y;
+ // 淇濆瓨涓婁竴涓溅韬疆寤撶偣
+ if (CarModelPrev->pointNum > 0) {
+ CarModelPrev->pointNum = CarModel->pointNum;
+ CarModelPrev->basePoint = CarModel->basePoint;
+ for (int i = 0; i < CarModel->pointNum; ++i) {
+ CarModelPrev->carXY[i] = CarModel->carXY[i];
+ }
+ }
UpdateCarBodyCoord(RtkBuffer[p1].heading, main_ant_coord, CarModel);
+ if (CarModelPrev->pointNum == 0) {
+ CarModelPrev->pointNum = CarModel->pointNum;
+ CarModelPrev->basePoint = CarModel->basePoint;
+ for (int i = 0; i < CarModel->pointNum; ++i) {
+ CarModelPrev->carXY[i] = CarModel->carXY[i];
+ }
+ }
// 璁$畻閫熷害(绫�/绉�)銆佸墠杩涘悗閫�
double speed = sqrt(pow(RtkBuffer[p1].x - RtkBuffer[p2].x, 2) + pow(RtkBuffer[p1].y - RtkBuffer[p2].y, 2)) * 1000 /
@@ -505,6 +552,21 @@
}*/
}
+void AddExamFault(int wrong, const char *utc)
+{
+ if (!TestStart) return;
+
+ struct ExamFault fault;
+
+ fault.sn = examFaultIndex++;
+ strcpy(fault.utc, utc);
+ fault.wrong_id = wrong;
+
+ ExamFaultList.push_back(fault);
+
+ MA_SendExamWrong(ExamFaultList);
+}
+
car_model_cache_t *GetCarModelCache(int node)
{
return NULL;
@@ -515,8 +577,10 @@
* @param azimuth
* @param coord
*/
-static void UpdateCarBodyCoord(double azimuth, PointF main_ant, const car_model *carModel)
+static void UpdateCarBodyCoord(double azimuth, PointF main_ant, car_model *carModel)
{
+ carModel->basePoint = main_ant;
+
for (int i = 0; i < carModel->pointNum; ++i) {
double tx = main_ant.X + carModel->carDesc[i].distance*sin(toRadians(azimuth));
double ty = main_ant.Y + carModel->carDesc[i].distance*cos(toRadians(azimuth));
--
Gitblit v1.8.0