//
|
// Created by YY on 2019/10/21.
|
//
|
|
#ifndef RTKDRIVERTEST_DRIVER_TEST_H
|
#define RTKDRIVERTEST_DRIVER_TEST_H
|
|
#include "test_common/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
|
|
#define MAP_TYPE_PARK_BUTTOM 1
|
#define MAP_TYPE_STOP_START 2
|
#define MAP_TYPE_PART_EDGE 3
|
#define MAP_TYPE_CURVE 4
|
#define MAP_TYPE_TURN_90 5
|
|
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 antHeight; // 车顶天线高程
|
double groundHeight; // 大地高程
|
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;
|
};
|
|
#define LINE_DOTTED 0
|
#define LINE_SOLID 1
|
#define LINE_HALF_SOLID_LEFT 2
|
#define LINE_HALF_SOLID_RIGHT 3
|
|
//车道方向(按位组合),如果为0,则表无车道方向说明;
|
#define LANE_FORWARD 0x01
|
#define LANE_LEFT 0x02
|
#define LANE_RIGHT 0x04
|
#define LANE_BACKWARD 0x08
|
|
#define ZEBRA_CROSSING 0
|
#define SCHOOL_AREA 1
|
#define BUS_STATION_AREA 2
|
#define GRID_AREA 3
|
|
#define ROAD_ITEM_NONE 0
|
#define ROAD_ITEM_CHANGE_LANE 1
|
#define ROAD_ITEM_OVERTAKE 2
|
#define ROAD_ITEM_STRAIGHT 3
|
#define ROAD_ITEM_OPERATE_GEAR 4
|
#define ROAD_ITEM_START_CAR 5
|
|
|
#define ROAD_ACTIVE_FORWARD LANE_FORWARD
|
#define ROAD_ACTIVE_TURN_LEFT LANE_LEFT
|
#define ROAD_ACTIVE_TURN_RIGHT LANE_RIGHT
|
#define ROAD_ACTIVE_TURN_BACKWARD LANE_BACKWARD
|
|
typedef struct {
|
int character; // 属性(实线、虚线,有些可以掉头的路段)
|
std::vector<PointF> points; //
|
} edge_t;
|
|
typedef struct {
|
int character; // 属性《实线、虚线、半实半虚线》
|
int left_lane_direct;
|
int right_lane_direct;
|
std::vector<PointF> points;
|
} segment_t;
|
|
// 一组平行的分道线
|
typedef struct {
|
std::vector<std::vector<segment_t>> lines; // 每段域下的平行的一组线
|
} separate_t;
|
|
typedef struct {
|
int id;
|
Line startLine;
|
Line stopLine;
|
int active; // 到达路口尾部的行进方向
|
bool activeBreak; // 路口刹车减速
|
bool activeStop; // 路口停车瞭望
|
bool errorLane; // 错误车道
|
int targetRoad;
|
int stopFlag;
|
string tts;
|
bool arrivedTail;
|
Polygon area; // 整个道路区域
|
std::vector<edge_t> leftEdge;
|
std::vector<edge_t> rightEdge;
|
std::vector<separate_t> separate;
|
} road_t;
|
|
typedef struct {
|
int id;
|
int road;
|
int type;
|
bool activeBreak;
|
bool overSpeed;
|
std::vector<PointF> area; // 人行道等右侧2点,网格线4点
|
std::vector<PointF> leftPoints; // 对应到道路左侧的点
|
} special_area_t;
|
|
typedef struct {
|
int id;
|
int road;
|
int active;
|
int time; // 项目最大完成时间
|
int distance; // 项目最大完成距离
|
string tts;
|
bool cmp;
|
std::vector<PointF> points;
|
std::vector<PointF> leftPoints; // 对应到道路左侧的点
|
} trigger_line_t;
|
|
struct road_exam_map {
|
std::vector<road_t> roads;
|
std::vector<special_area_t> specialAreas;
|
std::vector<trigger_line_t> triggerLines;
|
};
|
|
struct area_exam_map {
|
int id;
|
int type;
|
Polygon map;
|
Polygon map2;
|
};
|
|
typedef vector<struct area_exam_map> LIST_AREA_MAP;
|
|
typedef list<car_model *> LIST_CAR_MODEL;
|
|
void DriverTestInit(void);
|
void ReadDriverExamPrimer(void);
|
|
void ClearAreaMap(void);
|
void AddAreaMap(int id, int type, const double (*map)[2], int pointNum, const double (*map2)[2], int pointNum2);
|
|
|
void CleanRoadMap(void);
|
void SetRoadMap(road_exam_map &map);
|
|
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, double antHeight, double groundHeight);
|
|
void StartDriverExam(int start, int type);
|
|
void UpdateRTKInfo(const rtk_info *s);
|
void AddExamFault(int wrong, const struct RtkTime *rtkTime);
|
|
void SystemShutdown(int event, int timeout);
|
|
void SetDummyLightExam(int n, struct dummy_light_exam *cfg);;
|
|
#endif //RTKDRIVERTEST_DRIVER_TEST_H
|