yy1717
2020-03-21 1101dc614acb3cd794c13cd68c9a24d7c353cb28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//
// Created by YY on 2019/10/21.
//
 
#ifndef RTKDRIVERTEST_DRIVER_TEST_H
#define RTKDRIVERTEST_DRIVER_TEST_H
 
#include "Geometry.h"
#include "rtk_module/rtk.h"
#include "test_items2/dummy_light.h"
 
#include <vector>
#include <string>
#include <list>
 
#define EXAM_AREA_NONE          0
#define EXAM_AREA_START         1
#define EXAM_AREA_RUN           2
#define EXAM_AREA_END           3
 
#define TIRE_OUTSIDE    0
#define TIRE_INSIDE     1
#define AXIAL_FRONT     0
#define AXIAL_REAR     1
 
using namespace std;
 
struct car_desc_ {
    double distance;            // 距离主天线的距离
    double angle;               // 从中轴线逆时针形成的角度
};
 
struct RtkTime {
    int YY;
    int MM;
    int DD;
    int hh;
    int mm;
    int ss;
    int mss;
};
 
typedef struct {
    struct RtkTime tm;
    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 bodyNum;
    int *body;
    int pointNum;
    double antPitch;                // 前后天线因安装位置之固有pitch角
    double yaw;
    double pitch;
    struct car_desc_ *carDesc;      // 经现场测量点计算后的值
    PointF *carXY;                  // 计算后的车身各点坐标
} car_model;
 
// 总数
// 中轴线前点,id 0,中轴线后点id
// 左包围, 右包围
// 左前轮,外内
typedef struct {
    int body_num;
    int body[64];
    int front_left_tire[2];
    int front_right_tire[2];
    int rear_left_tire[2];
    int rear_right_tire[2];
} carModelDesc_t;
 
typedef struct {
    uint32_t uptime;
    int point_num;
    PointF *points;
    carModelDesc_t *desc;
} car_model_cache_t;
 
struct ExamFault {
    int sn;
    char utc[32];
    int wrong_id;
};
 
struct trigger_line_t {
    int triggerMapId;
    Polygon line;
};
 
struct road_exam_map {
    int id;
    int type;
 
    string tts;
 
    int redLineNum;
    Polygon *redLine;
 
    int greenLineNum;
    Polygon *greenLine;
 
    int redAreaNum;
    Polygon *redArea;
 
    int triggerLineNum;
    trigger_line_t *triggerLine;
 
    Polygon area;           // 子项目的区域
    Line stopLine;         // 诸如人行道、路口等考点的停止线
    int flagStop;           // 到达开始线前,是否需要停车
};
 
typedef vector<struct road_exam_map> LIST_ROAD_MAP;
 
typedef list<car_model *> LIST_CAR_MODEL;
 
//vector<ExamFault> ExamFaultList;
 
void DriverTestInit(void);
void ReadDriverExamPrimer(void);
void ClearMap(void);
void AddMap(int id, int type, const double (*map)[2], int pointNum, const double (*map2)[2], int pointNum2);
void CleanRoadMap(void);
void SetRoadMapPoints(vector<double> &mapPoints);
void AddRoadMapParent(int id, int type, string tts, int stopFlag, vector<vector<int>> &redLines,
                      vector<vector<int>> &redAreas, vector<vector<int>> &greenLines, vector<vector<int>> &triggerLines,
                      vector<int> area, vector<int> stopLine);
 
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
                        int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
                        int *body, int bodyNum, double (*point)[2], int pointNum, double antPitch);
 
void StartDriverExam(int start, int type);
void StartMapExam(int map_id, int exam);
 
void UpdateRTKInfo(const rtk_info *s);
void AddExamFault(int wrong, const struct RtkTime *rtkTime);
car_model_cache_t *GetCarModelCache(int node);
void SystemShutdown(int event, int timeout);
 
void SetDummyLightExam(int n, struct dummy_light_exam *cfg);;
 
#endif //RTKDRIVERTEST_DRIVER_TEST_H