| | |
| | | |
| | | static bool BreakHandbreakReleaseSametime, OpenDoor; |
| | | |
| | | static const int ENGINE_MIN_ROTATE = 200; |
| | | static const double MAX_STOP_DISTANCE = 150; |
| | | |
| | | static const uint32_t STOP_CAR_TIME = D_SEC(2); |
| | | static const uint32_t OPEN_DOOR_TIMEOUT = D_SEC(15); |
| | | static const double DISTANCE_TO_ROAD_EDGE_1 = 0.5; |
| | | static const double DISTANCE_TO_ROAD_EDGE_2 = 0.3; |
| | | static const int ENGINE_MIN_ROTATE = 100; |
| | | |
| | | static double beginOdo; |
| | | static int setup; |
| | |
| | | BreakHandbreakReleaseSametime = false; |
| | | setup = 0; |
| | | OpenDoor = false; |
| | | PlayTTS("请靠边停车", TtsBack); |
| | | PlayTTS(examParam.stop_car_begin_tts, TtsBack); |
| | | } |
| | | |
| | | bool TestStopCar(road_exam_map &RoadMap, int roadIndex, const car_model *car, int moveDirect, const struct RtkTime *rtkTime) { |
| | |
| | | PointF p1 = CalcProjectionWithRoadEdge(RoadMap.roads[roadIndex].rightEdge, car->carXY[ car->right_front_tire[TIRE_OUTSIDE] ]); |
| | | PointF p2 = CalcProjectionWithRoadEdge(RoadMap.roads[roadIndex].rightEdge, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]); |
| | | |
| | | if (DistanceOf(p1, car->carXY[ car->right_front_tire[TIRE_OUTSIDE] ]) > DISTANCE_TO_ROAD_EDGE_1 || |
| | | DistanceOf(p2, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]) > DISTANCE_TO_ROAD_EDGE_1) { |
| | | if (DistanceOf(p1, car->carXY[ car->right_front_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_red_distance || |
| | | DistanceOf(p2, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_red_distance) { |
| | | DEBUG("停车超出路边0.5米"); |
| | | // 停车距离超过50厘米,不合格 |
| | | AddExamFault(36, rtkTime); |
| | | return false; |
| | | } else if (DistanceOf(p1, car->carXY[ car->right_front_tire[TIRE_OUTSIDE] ]) > DISTANCE_TO_ROAD_EDGE_2 || |
| | | DistanceOf(p2, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]) > DISTANCE_TO_ROAD_EDGE_2) { |
| | | } else if (DistanceOf(p1, car->carXY[ car->right_front_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_yellow_distance || |
| | | DistanceOf(p2, car->carXY[ car->right_rear_tire[TIRE_OUTSIDE] ]) > examParam.stop_car_edge_yellow_distance) { |
| | | DEBUG("停车超出路边0.3米"); |
| | | // 停车距离超过30厘米,扣10分 |
| | | AddExamFault(37, rtkTime); |
| | |
| | | OpenDoor = true; |
| | | } |
| | | |
| | | if (TimeGetDiff(rtkTime, &time) > OPEN_DOOR_TIMEOUT) { |
| | | if (TimeGetDiff(rtkTime, &time) > examParam.stop_car_open_door_allow_time) { |
| | | // 开门时间超过15秒,不合格 |
| | | DEBUG("开门时间超过15秒"); |
| | | AddExamFault(35, rtkTime); |
| | |
| | | |
| | | if (OpenDoor && door.value == DOOR_CLOSE) { |
| | | DEBUG("完成停车"); |
| | | PlayTTS("靠边停车结束", NULL); |
| | | PlayTTS(examParam.stop_car_end_tts, NULL); |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | if (ReadOdo() - beginOdo > MAX_STOP_DISTANCE) { |
| | | if (ReadOdo() - beginOdo > examParam.stop_car_limit_distance) { |
| | | // 150米内未停车,不合格 |
| | | DEBUG("停车距离超标,靠边停车结束"); |
| | | AddExamFault(33, rtkTime); |