yy1717
2023-03-31 4bd08f0355b6b2cf3c027202d5ad301b4e182953
lib/src/main/cpp/driver_test.h
@@ -5,13 +5,12 @@
#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>
#include "test_common/Geometry.h"
#include "rtk_module/rtk.h"
#include "map.h"
#define EXAM_AREA_NONE          0
#define EXAM_AREA_START         1
@@ -23,68 +22,78 @@
#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;             // 2位数
    int MM;
    int DD;
    int hh;
    int mm;
    int ss;
    int mss;
};
typedef enum {
    MAP_TYPE_NONE,
    MAP_TYPE_PARK_BUTTOM,
    MAP_TYPE_UPHILL,
    MAP_TYPE_PARK_EDGE,
    MAP_TYPE_CURVE,
    MAP_TYPE_TURN_90
} map_type_t;
typedef struct {
    struct RtkTime tm;
    double distance;            // 距离主天线的距离
    double angle;               // 从中轴线逆时针形成的角度
} car_desc_t;
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;
//    int bodyNum;
    std::vector<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;
    std::vector<car_desc_t> carDesc;
//    struct car_desc_ *carDesc;      // 经现场测量点计算后的值
//    PointF *carXY;                  // 计算后的车身各点坐标
} car_model_t;
typedef struct {
    uint32_t uptime;
    int point_num;
    PointF *points;
    carModelDesc_t *desc;
} car_model_cache_t;
    int64_t utc_time = 0;
    double yaw;
    double pitch;
    double roll;
    PointF base_point;
    std::vector<PointF> points;
} modeling_t;
typedef enum {
    BACKWARD = -1,
    STOP = 0,
    FORWARD = 1
} move_status_t;
typedef struct {
    int64_t timestamp = 0;
    double speed = 0;
    move_status_t move = STOP;
} motion_t;
typedef struct {
    map_type_t type;
    int map_idx;        // 对应科目地图集合中的序号
} map_t;
typedef struct {
    bool examing = false;
    int curr_modeling_index = -1;
    int prev_modeling_index = -1;
    area_map_t *pMap;
    car_model_t *pModel;
    modeling_t *pModeling;
    motion_t *pMotion;
    map_t curr_exam_map;
    map_t arriving_map;
} prime_t;
struct ExamFault {
    int sn;
@@ -236,7 +245,7 @@
    double road_slide_red_distance;
    int road_total_distance;
    int road_max_speed;                     // Km per hour
    vector<vector<int>> gear_speed_table;
    std::vector<std::vector<int>> gear_speed_table;
    int gear_n_allow_time;                  // Sec
    int same_gear_min_time;                 // Sec, x秒内,不允许N->X->N->X置同一挡位
    int gear_speed_error_cumulative_time;   // Sec
@@ -248,69 +257,67 @@
    int start_car_limit_distance;
    double open_door_drive_allow_distance;
    string prepare_tts;
    string touch_leftfront_tts;
    string touch_leftrear_tts;
    string touch_rightfront_tts;
    string touch_rightrear_tts;
    string start_engine_tts;
    std::string prepare_tts;
    std::string touch_leftfront_tts;
    std::string touch_leftrear_tts;
    std::string touch_rightfront_tts;
    std::string touch_rightrear_tts;
    std::string start_engine_tts;
    string start_car_begin_tts;
    string start_car_end_tts;
    std::string start_car_begin_tts;
    std::string start_car_end_tts;
    int change_lane_limit_distance;
    string change_lane_begin_tts;
    string change_lane_end_tts;
    std::string change_lane_begin_tts;
    std::string change_lane_end_tts;
    int shift_limit_distance;
    int shift_hold_time;                    // Sec
    string shift_begin_tts;
    string shift_end_tts;
    string shift_up_tts;
    string shift_down_tts;
    std::string shift_begin_tts;
    std::string shift_end_tts;
    std::string shift_up_tts;
    std::string shift_down_tts;
    string straight_begin_tts;
    string straight_end_tts;
    std::string straight_begin_tts;
    std::string straight_end_tts;
    int straight_limit_distance;
    double straight_max_offset;
    int overtake_limit_distance;
    string overtake_begin_tts;
    string overtake_end_tts;
    std::string overtake_begin_tts;
    std::string overtake_end_tts;
    int stop_car_limit_distance;
    int stop_car_open_door_allow_time;
    double stop_car_edge_red_distance;
    double stop_car_edge_yellow_distance;
    string stop_car_begin_tts;
    string stop_car_end_tts;
    std::string stop_car_begin_tts;
    std::string stop_car_end_tts;
    double crossing_stop_valid_distance;
    int cross_school_max_speed;
    int crossing_break_valid_distance;
    string crossing_go_straight_tts;
    string crossing_turn_left_tts;
    string crossing_turn_right_tts;
    string crossing_turn_back_tts;
    string crossing_turn_unknown_tts;
    std::string crossing_go_straight_tts;
    std::string crossing_turn_left_tts;
    std::string crossing_turn_right_tts;
    std::string crossing_turn_back_tts;
    std::string crossing_turn_unknown_tts;
} exam_param_t;
extern exam_param_t examParam;
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 AddCurveMap(curve_map_t &map);
void AddParkButtonMap(park_button_map_t &map);
void AddParkEdgeMap(park_edge_map_t &map);
void CleanRoadMap(void);
void SetRoadMap(road_exam_map &map, vector<scheme_t> &scheme);
void SetRoadExamScheme(vector<scheme_t> &scheme);
void SetRoadMap(road_exam_map &map, std::vector<scheme_t> &scheme);
void SetRoadExamScheme(std::vector<scheme_t> &scheme);
void SetCarMeasurePoint(double *basePoint, int *axial, int *left_front_tire,
                        int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
@@ -318,16 +325,14 @@
void StartDriverExam(int start, int type);
void UpdateRTKInfo(const rtk_info *s);
void AddExamFault(int wrong, const struct RtkTime *rtkTime);
void UpdateRTKInfo(const rtk_info_t *s);
void AddExamFault(int wrong);
void RoadChange(int road, int status);
void CrossingChange(int road, int crossing, int status);
void SystemShutdown(int event, int timeout);
void SetDummyLightExam(int n, struct dummy_light_exam *cfg);
uint32_t TimeGetDiff(const struct RtkTime *rtkTime1, const struct RtkTime *rtkTime2);
void MasterInqRoadStatus(void);