yy1717
2020-01-15 09b0098b3b092cb28435c8d550c2f7b30bf53e0a
updatec
7个文件已修改
211 ■■■■ 已修改文件
lib/src/main/cpp/driver_test.cpp 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/driver_test.h 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/master/comm_if.cpp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/rtk_module/rtk.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items/park_bottom.cpp 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/test_items/park_bottom.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
lib/src/main/cpp/driver_test.cpp
@@ -31,6 +31,12 @@
using namespace std;
#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
#define RTK_INVALID         0
#define RTK_SINGLE_POINT   1
#define RTK_DIFF            2
@@ -52,7 +58,7 @@
};
static bool TestStart = false;
static int TestItem = TEST_NONE;
static int CarInArea = 0;
int errs = 0;
@@ -68,6 +74,8 @@
} MapList[MAP_LIST_SIZE];
static int MapNum = 0;
static int CurrExamMapId = -1;
static int CurrExamStatus = 0;      // 1 测试完成 0 测试中 -1 测试错误退出
static car_model *CarModel = NULL;
static car_model *CarModelPrev = NULL;
@@ -84,6 +92,9 @@
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);
static int EnterMap(const car_model *car, const struct map_list *mapList, int mapNum);
static bool ExitMap(const car_model *car, int mapId, const struct map_list *mapList, int mapNum);
static int GetMapType(int id, const struct map_list *mapList, int mapNum);
void DriverTestInit(void)
{
@@ -127,7 +138,7 @@
void AddMap(int id, int type, const double (*map)[2], int pointNum, const double (*map2)[2], int pointNum2)
{
    DEBUG("AddMap id %d type %d pointNum %d point2Num %d", id, type, pointNum, pointNum2);
    DEBUG("加入地图信息 id %d type %d pointNum %d point2Num %d", id, type, pointNum, pointNum2);
    AppTimer_delete(ReadDriverExamPrimerTimeout);
@@ -164,7 +175,7 @@
                    int *right_front_tire, int *left_rear_tire, int *right_rear_tire,
                    int *body, int bodyNum,double (*point)[2], int pointNum)
{
    DEBUG("SetCarMeasurePoint pointNum %d", pointNum);
    DEBUG("加入车辆信息 pointNum %d", pointNum);
    if (point == NULL || pointNum == 0 || TestStart) return;
@@ -252,6 +263,24 @@
        DEBUG("加入点<%d> 距离 %f 角度 %f", i, CarModel->carDesc[i].distance, CarModel->carDesc[i].angle);
    }
    CarModel->carDesc[0].distance = 0.2465;
    CarModel->carDesc[0].angle = 0;
    CarModel->carDesc[1].distance = 0.2635;
    CarModel->carDesc[1].angle = 20.7;
    CarModel->carDesc[2].distance = 0.14;
    CarModel->carDesc[2].angle = 138.9;
    CarModel->carDesc[3].distance = 0.1055;
    CarModel->carDesc[3].angle = 180.0;
    CarModel->carDesc[4].distance = 0.14;
    CarModel->carDesc[4].angle = 221.1;
    CarModel->carDesc[5].distance = 0.2635;
    CarModel->carDesc[5].angle = 339.3;
    DEBUG("SetCarMeasurePoint Calc Over");
}
@@ -306,7 +335,7 @@
                RtkBuffer[index].mm, RtkBuffer[index].ss, RtkBuffer[index].dss);
        brief.qf = RtkBuffer[index].qf;
        brief.map_id = 863;
        brief.map_id = 863;//CurrExamMapId;
        brief.move = move;
        brief.speed = speed * 3.6;
        brief.heading = RtkBuffer[index].heading;
@@ -343,7 +372,73 @@
        free(brief.point);
        if (TestStart) {
//            TestParkBottom(ErrorList, 0, CarModel, CarModelPrev, speed, move);
            if (CurrExamMapId < 0) {
                CurrExamMapId = EnterMap(CarModel, MapList, MapNum);
                int mtype = GetMapType(CurrExamMapId, MapList, MapNum);
                switch (mtype) {
                    case MAP_TYPE_PARK_BUTTOM:
                        DEBUG("进入倒车入库场地");
                        StartParkBottom();
                        CurrExamStatus = 0;
                        break;
                    case MAP_TYPE_STOP_START:
                        break;
                    case MAP_TYPE_PART_EDGE:
                        break;
                    case MAP_TYPE_CURVE:
                        break;
                    case MAP_TYPE_TURN_90:
                        break;
                    default:break;
                }
            }
        }
        struct RtkTime rtkTime;
        rtkTime.YY = RtkBuffer[index].YY;
        rtkTime.MM = RtkBuffer[index].MM;
        rtkTime.DD = RtkBuffer[index].DD;
        rtkTime.hh = RtkBuffer[index].hh;
        rtkTime.mm = RtkBuffer[index].mm;
        rtkTime.ss = RtkBuffer[index].ss;
        rtkTime.mss = RtkBuffer[index].dss;
        static int en = 0;
        static int gcc = 0;
        if (gcc % 20 == 0) {
           // AddExamFault(++en, &rtkTime);
        }
        gcc++;
        if (CurrExamMapId >= 0) {
            if (CurrExamStatus == 0) {
                int mtype = GetMapType(CurrExamMapId, MapList, MapNum);
                switch (mtype) {
                    case MAP_TYPE_PARK_BUTTOM:
                        CurrExamStatus = TestParkBottom(ErrorList, &MapList[CurrExamMapId].map,
                                                        CarModel, CarModelPrev, speed, move, &rtkTime);
                        break;
                    case MAP_TYPE_STOP_START:
                        break;
                    case MAP_TYPE_PART_EDGE:
                        break;
                    case MAP_TYPE_CURVE:
                        break;
                    case MAP_TYPE_TURN_90:
                        break;
                    default:
                        break;
                }
            }
            if (CurrExamStatus != 0) {
                if (ExitMap(CarModel, CurrExamMapId, MapList, MapNum)) {
                    DEBUG("退出场地 %d", CurrExamMapId);
                    CurrExamMapId = -1;
                }
            }
        }
    }
}
@@ -552,19 +647,77 @@
        }*/
}
void AddExamFault(int wrong, const char *utc)
static int EnterMap(const car_model *car, const struct map_list *mapList, int mapNum)
{
    if (!TestStart) return;
    // 车的最前点是否进入地图
    for (int i = 0; i < mapNum && car != NULL; ++i) {
        if (mapList[i].type == MAP_TYPE_STOP_START) {
        } else if (mapList[i].type == MAP_TYPE_CURVE) {
        } else if (mapList[i].type == MAP_TYPE_PARK_BUTTOM) {
            if (IntersectionOf(car->carXY[ car->axial[AXIAL_FRONT] ], &mapList[i].map) == GM_Containment) {
                Line enterLine1, enterLine2;
                MakeLine(&enterLine1, &(mapList[i].map.point[0]), &(mapList[i].map.point[1]));
                MakeLine(&enterLine2, &(mapList[i].map.point[6]), &(mapList[i].map.point[7]));
                if (DistanceOf(car->carXY[car->axial[AXIAL_FRONT]], enterLine1) > 0.1 &&
                    DistanceOf(car->carXY[car->axial[AXIAL_FRONT]], enterLine2) > 0.1)
                    return mapList[i].id;
            }
        }
    }
    return -1;
}
static bool ExitMap(const car_model *car, int mapId, const struct map_list *mapList, int mapNum)
{
    // 车的最后点是否进入地图
    for (int i = 0; i < mapNum && car != NULL; ++i) {
        if (mapList[i].id == mapId) {
            if (mapList[i].type == MAP_TYPE_PARK_BUTTOM) {
                if (IntersectionOf(car->carXY[ car->axial[AXIAL_REAR] ], &mapList[i].map) == GM_None) {
                    Line enterLine1, enterLine2;
                    MakeLine(&enterLine1, &(mapList[i].map.point[0]), &(mapList[i].map.point[1]));
                    MakeLine(&enterLine2, &(mapList[i].map.point[6]), &(mapList[i].map.point[7]));
                    if (DistanceOf(car->carXY[car->axial[AXIAL_REAR]], enterLine1) > 0.1 &&
                        DistanceOf(car->carXY[car->axial[AXIAL_REAR]], enterLine2) > 0.1)
                        return true;
                }
            }
            return false;
        }
    }
    return true;
}
static int GetMapType(int id, const struct map_list *mapList, int mapNum)
{
    for (int i = 0; i < mapNum && id >= 0; ++i) {
        if (mapList[i].id == id) return mapList[i].type;
    }
    return -1;
}
void AddExamFault(int wrong, const struct RtkTime *rtkTime)
{
    struct ExamFault fault;
    fault.sn = examFaultIndex++;
    strcpy(fault.utc, utc);
    sprintf(fault.utc, "%04d%02d%02d%02d%02d%02d.%02d", 2000 + rtkTime->YY,
            rtkTime->MM, rtkTime->DD, rtkTime->hh, rtkTime->mm, rtkTime->ss, rtkTime->mss);
    fault.wrong_id = wrong;
    DEBUG("考试发生错误 %d %s", wrong, fault.utc);
    ExamFaultList.push_back(fault);
    MA_SendExamWrong(ExamFaultList);
    ExamFaultList.clear();
}
car_model_cache_t *GetCarModelCache(int node)
lib/src/main/cpp/driver_test.h
@@ -12,6 +12,8 @@
#define TIRE_OUTSIDE    0
#define TIRE_INSIDE     1
#define AXIAL_FRONT     0
#define AXIAL_REAR     1
using namespace std;
@@ -54,6 +56,16 @@
    carModelDesc_t *desc;
} car_model_cache_t;
struct RtkTime {
    int YY;
    int MM;
    int DD;
    int hh;
    int mm;
    int ss;
    int mss;
};
struct ExamFault {
    int sn;
    char utc[32];
@@ -72,8 +84,7 @@
void SetSensorCfg(int (*sensor)[2], int sensorNum);
void StartDriverExam(int start);
void UpdateRTKInfo(const rtk_info *s);
void AddExamFault(int wrong, const char *utc);
void AddExamFault(int wrong, const struct RtkTime *rtkTime);
car_model_cache_t *GetCarModelCache(int node);
#endif //RTKDRIVERTEST_DRIVER_TEST_H
lib/src/main/cpp/master/comm_if.cpp
@@ -218,13 +218,6 @@
    writer.StartArray();
    for (int i = 0; i < 3; ++i) {
        writer.StartObject();               // Between StartObject()/EndObject(),
        writer.Key("wrong_id");                // output a key,
        writer.Int(i+1);
        writer.EndObject();
    }
    for (vector<ExamFault>::iterator iter = ExamFaultList.begin(); iter != ExamFaultList.end(); ++iter) {
        writer.StartObject();
@@ -317,9 +310,7 @@
    writer.EndArray();
    writer.EndObject();
    uint32_t a = AppTimer_GetTickCount();
    SendMsgToMainProc(ID_SM_CAR, sb.GetString());
    DEBUG("耗时 %ld", AppTimer_GetTickCount() - a);
}
void MA_MainProcMsgEntry(int cmd, const char *value)
lib/src/main/cpp/rtk_module/rtk.cpp
@@ -352,6 +352,8 @@
    str2float(&CurrRTKInfo.y, s->nmea_value[2].data, s->nmea_value[2].length);
    str2float(&CurrRTKInfo.x, s->nmea_value[4].data, s->nmea_value[4].length);
    CurrRTKInfo.x = -12;
    CurrRTKInfo.y = 27;
//    const double by1 = 28.013;
//    const double bx1 = -11.9669;
lib/src/main/cpp/test_items/park_bottom.cpp
@@ -70,7 +70,7 @@
    DEBUG("ParkBottom End");
}
int TestParkBottom(vector<int>&err, const Polygon *map, const car_model *car, const car_model *carPrev, double speed, int run_status)
int TestParkBottom(vector<int>&err, const Polygon *map, const car_model *car, const car_model *carPrev, double speed, int run_status, const struct RtkTime *rtkTime)
{
    int status = 0;
@@ -84,14 +84,14 @@
        if (parkTimeout) {
            // 不合格:动作超时
            err.push_back(10);
            AddExamFault(10, rtkTime);
            status = -1;
        }
        // 是否压线
        if (CrashRedLine(map, car)) {
            // 不合格:车身出线
            err.push_back(7);
            AddExamFault(7, rtkTime);
            status = -1;
        }
@@ -111,6 +111,7 @@
            if (stopCar2S && currTarget != FIRST_TOUCH_CTRL_LINE) {
                // 扣5分:中途停车超过2秒
                err.push_back(11);
                AddExamFault(11, rtkTime);
            }
            if (!((leftTireCrossLeftLine && rightTireCrossLeftLine) ||
@@ -127,6 +128,7 @@
                    } else {
                        // 不合格:未按规定线路行驶(直接跑出测试区了)
                        err.push_back(6);
                        AddExamFault(6, rtkTime);
                        status = -1;
                        DEBUG("直接跑出测试区了");
                    }
@@ -165,6 +167,7 @@
                } else if (the_ctrl_line_crossed != 0) {
                    // 不合格:未按规定线路行驶(未回到起始点)
                    err.push_back(6);
                    AddExamFault(6, rtkTime);
                    status = -1;
                }
            }
@@ -185,6 +188,7 @@
            if (first_ctrl_line_id > 0 && first_ctrl_line_id == the_ctrl_line_crossed) {
                // 不合格:未按规定线路行驶(试图做2次同方向的倒库)
                err.push_back(6);
                AddExamFault(6, rtkTime);
                status = -1;
            } else if (the_ctrl_line_crossed > 0 && first_ctrl_line_id == 0) {
                first_ctrl_line_id = the_ctrl_line_crossed;
@@ -205,6 +209,7 @@
            } else if (currTarget != THIRD_TOUCH_CTRL_LINE) {
                // 不合格:倒车前,2前轮没驶过控制线
                err.push_back(9);
                AddExamFault(9, rtkTime);
                status = -1;
            }
            if (carStopEvent)
@@ -223,6 +228,7 @@
            if (stopCar2S) {
                // 扣5分:中途停车
                err.push_back(11);
                AddExamFault(11, rtkTime);
            }
            carStopEvent = false;
@@ -240,6 +246,7 @@
                if (!carParkSuccess) {
                    // 不合格:倒库不入
                    err.push_back(8);
                    AddExamFault(8, rtkTime);
                    status = -1;
                } else if (currTarget == FIRST_PARK) {
                    currTarget = SECOND_TOUCH_CTRL_LINE;
lib/src/main/cpp/test_items/park_bottom.h
@@ -13,6 +13,6 @@
void StartParkBottom(void);
void StopParkBottom(void);
int TestParkBottom(vector<int>&err, const Polygon *map, const car_model *car, const car_model *carPrev, double speed, int run_status);
int TestParkBottom(vector<int>&err, const Polygon *map, const car_model *car, const car_model *carPrev, double speed, int run_status, const struct RtkTime *rtkTime);
#endif //RTKDRIVERTEST_PARK_BOTTOM_H
lib/src/main/java/com/anyun/exam/lib/crash/CrashHandler.java
@@ -65,6 +65,7 @@
            //退出程序
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
        }
    }