decide_gps_00.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. #pragma once
  2. #ifndef _IV_DECITION__DECIDE_GPS_00_
  3. #define _IV_DECITION__DECIDE_GPS_00_
  4. #include <common/gps_type.h>
  5. #include <decision/decition_type.h>
  6. #include <common/obstacle_type.h>
  7. #include <vector>
  8. #include <decision/adc_tools/gnss_coordinate_convert.h>
  9. #include <decision/adc_planner/frenet_planner.h>
  10. #include <decision/adc_controller/pid_controller.h>
  11. #include <decision/adc_adapter/ge3_adapter.h>
  12. #include <decision/adc_adapter/qingyuan_adapter.h>
  13. #include <decision/adc_adapter/vv7_adapter.h>
  14. #include <decision/adc_adapter/zhongche_adapter.h>
  15. #include <decision/adc_adapter/bus_adapter.h>
  16. #include <decision/adc_adapter/hapo_adapter.h>
  17. #include <decision/adc_adapter/zhongche_adapter.h>
  18. #include <decision/adc_adapter/yuhesen_adapter.h>
  19. #include "perception/perceptionoutput.h"
  20. #include "ivlog.h"
  21. #include <memory>
  22. namespace iv {
  23. namespace decision {
  24. //根据传感器传输来的信息作出决策
  25. class DecideGps00 {
  26. public:
  27. DecideGps00();
  28. ~DecideGps00();
  29. static double minDis;
  30. static double maxAngle;
  31. static int lastGpsIndex;
  32. static double lidarDistance;
  33. static double myesrDistance;
  34. static double lastLidarDis;
  35. static double lastLidarDisAvoid;
  36. static double lastPreObsDistance;
  37. static int gpsLineParkIndex;
  38. static int gpsMapParkIndex;
  39. static double lastDistance;
  40. static float xiuzhengCs;
  41. static double controlAng;
  42. double laneAng;
  43. static double controlSpeed;
  44. static double controlBrake;
  45. static bool parkMode;
  46. static bool readyParkMode;
  47. static bool zhucheMode;
  48. static bool readyZhucheMode;
  49. static bool hasZhuched;
  50. static double Iv;
  51. static double lastEv;
  52. static double lastVt;
  53. static double lastU;
  54. static double obsDistance;
  55. static double obsSpeed;
  56. static double lidarDistanceAvoid;
  57. static double obsDistanceAvoid;
  58. static double lastDistanceAvoid;
  59. GPS_INS group_ori_gps;
  60. GPS_INS startAvoid_gps_ins;
  61. static int finishPointNum;
  62. static int zhuchePointNum;
  63. double avoidRunDistance=0;
  64. std::vector<iv::GPS_INS> startAvoidGpsInsVector;
  65. std::vector<double> avoidMinDistanceVector;
  66. std::vector<int> v2xTrafficVector;
  67. ///kkcai, 2020-01-03
  68. //bool isFirstRun = true;
  69. static bool isFirstRun;
  70. /////////////////////////////////////
  71. // static bool startingFlag;//起步标志,在起步时需要进行frenet规划。
  72. static float minDecelerate;
  73. double startTime = 0;
  74. double firstTime = 0;
  75. bool circleMode=false;
  76. int avoidTimes = 0;
  77. int backTimes = 0;
  78. int checkAvoidObsTimes = 0;
  79. int checkBackObsTimes = 0;
  80. bool hasCheckedAvoidLidar=false;
  81. bool hasCheckedBackLidar=false;
  82. bool personWaited = false;
  83. bool roadLightWaited = false;
  84. double decision_Angle = 0;
  85. double lastAngle=0;
  86. iv::Point2D obsPoint;
  87. int checkAvoidTimes=0;
  88. int checkBackTimes=0;
  89. int chaocheCounts=0;
  90. static int PathPoint;
  91. float lastGroupOffsetX=0.0;
  92. GPS_INS traffic_light_gps;
  93. int traffic_light_pathpoint;
  94. bool changingDangWei=false;
  95. BaseController *pid_Controller;
  96. BaseAdapter *ge3_Adapter;
  97. BaseAdapter *qingyuan_Adapter;
  98. BaseAdapter *vv7_Adapter;
  99. BaseAdapter *zhongche_Adapter;
  100. BaseAdapter *bus_Adapter;
  101. BaseAdapter *hapo_Adapter;
  102. BaseAdapter *yuhesen_Adapter;
  103. std::shared_ptr<BaseController> mpid_Controller;
  104. std::shared_ptr<BaseAdapter> mge3_Adapter;
  105. std::shared_ptr<BaseAdapter> mqingyuan_Adapter;
  106. std::shared_ptr<BaseAdapter> mvv7_Adapter;
  107. std::shared_ptr<BaseAdapter> mzhongche_Adapter;
  108. std::shared_ptr<BaseAdapter> mbus_Adapter;
  109. std::shared_ptr<BaseAdapter> mhapo_Adapter;
  110. std::shared_ptr<BaseAdapter> myuhesen_Adapter;
  111. FrenetPlanner *frenetPlanner;
  112. // BasePlanner *laneChangePlanner;
  113. std::shared_ptr<FrenetPlanner> mfrenetPlanner;
  114. // std::shared_ptr<BasePlanner> mlaneChangePlanner;
  115. Decition getDecideFromGPS(GPS_INS gpsIns, const std::vector<GPSData> navigation_data, iv::LidarGridPtr lidarGridPtr,
  116. std::vector<iv::Perception::PerceptionOutput> lidar_per,iv::TrafficLight trafficLight);
  117. void initMethods();
  118. static std::vector<Point2D> getGpsTrace(GPS_INS rp, const std::vector<GPSData> gpsMap, int lastIndex, bool circleMode);
  119. static double getAngle(std::vector<Point2D> gpsTrace);
  120. double getAngle(std::vector<Point2D> gpsTrace, GPS_INS gpsIns,iv::decision::Decition decision);
  121. static double getSpeed(std::vector<Point2D> gpsTrace);
  122. static void getEsrObsDistance(std::vector<Point2D> gpsTrace, int roadNum);
  123. static void getRearEsrObsDistance(std::vector<Point2D> gpsTrace, int roadNum);
  124. static void getEsrObsDistanceAvoid();
  125. void getObsAvoid(iv::LidarGridPtr lidarGridPtr);
  126. void phaseSpeedDecition(iv::decision::Decition decision, double secSpeed, double obsDis, double obsSpeed, GPS_INS gpsIns );
  127. double limitAngle(double speed, double angle);
  128. double limitSpeed(double angle, double speed);
  129. bool checkAvoidEnable(double avoidX, iv::LidarGridPtr lidarGridPtr, int roadNum);
  130. bool checkReturnEnable(double avoidX, iv::LidarGridPtr lidarGridPtr, int roadNum);
  131. void computeObsOnRoad(iv::LidarGridPtr lidarGridPtr, std::vector<Point2D> gpsTrace, int roadNum,const std::vector<GPSData> gpsMapLine, std::vector<iv::Perception::PerceptionOutput> lidar_per);
  132. static void getEsrObsDistanceByFrenet(const std::vector<Point2D>& gpsTrace, iv::decision::FrenetPoint car_now_frenet_point,iv::decision::FrenetPoint &esrObs_F_Point, const std::vector<iv::GPSData>& gpsMap,int pathpoint,GPS_INS nowGps);
  133. void computeRearObsOnRoad(iv::LidarGridPtr lidarGridPtr, std::vector<Point2D> gpsTrace, int roadNum,const std::vector<GPSData> gpsMapLine);
  134. void computeObsOnRoadByFrenet(iv::LidarGridPtr lidarGridPtr,const std::vector<Point2D>& gpsTrace, double & obs, const std::vector<iv::GPSData>& gpsMap,int pathpoint,GPS_INS nowGps);
  135. void predictObsOnRoad(std::vector<iv::Perception::PerceptionOutput> lidar_per,std::vector<Point2D> gpsTrace,double realSpeed);
  136. int chooseAvoidRoad(iv::LidarGridPtr lidarGridPtr, GPS_INS now_gps_ins,std::vector<GPSData> gpsMapLine,std::vector<iv::Perception::PerceptionOutput> lidar_per);
  137. int chooseBackRoad(iv::LidarGridPtr lidarGridPtr, GPS_INS now_gps_ins, std::vector<GPSData> gpsMapLine,std::vector<iv::Perception::PerceptionOutput> lidar_per);
  138. void getMapBeside(std::vector<iv::GPSData> navigation_data, iv::GPS_INS now_gps_ins);
  139. void handBrakePark(iv::decision::Decition decision, long duringTime, GPS_INS now_gps_ins);
  140. bool checkChaoCheBack(iv::LidarGridPtr);
  141. double trumpet();
  142. double transferP();
  143. bool nearStation;
  144. void updateGroupDate(GPS_INS now_gps_ins,float realspeed,float theta,float s);
  145. void init();
  146. std::vector<Point2D> getGpsTraceOffset(std::vector<Point2D> gpsTrace, double offset);
  147. std::vector<iv::Point2D> getGpsTraceBackExa(iv::GPS_INS now_gps_ins, const std::vector<GPSData> gpsMapLine, int pathpo);
  148. float ComputeTrafficLightSpeed(int traffic_light_color, int traffic_light_time, const std::vector<GPSData> gpsMapLine,int traffic_light_pathpoint,
  149. int pathpoint,float secSpeed,float dSpeed);
  150. void getV2XTrafficPositionVector( const std::vector<GPSData> gpsMapLine);
  151. float ComputeV2XTrafficLightSpeed(iv::TrafficLight TrafficLight, const std::vector<GPSData> gpsMapLine,std::vector<int> v2xTrafficVector,
  152. int pathpoint,float secSpeed,float dSpeed,bool circleMode);
  153. float getTrafficLightSpeed(int traffic_light_color, int traffic_light_time, float dis);
  154. bool computeTrafficPass(float trafficDis,int trafficColor,float trafficTime,float realSecSpeed,float dSecSpeed);
  155. float computeTrafficSpeedLimt(float trafficDis);
  156. float computeAvoidX(int roadAim,int roadOri,GPSData gps,float vehWidth);
  157. bool adjuseultra();
  158. iv::Station getNearestStation(iv::GPS_INS now_gps_ins,std::vector<Station> station_n,std::vector<GPSData> gpsMap);
  159. void transferGpsMode2( const std::vector<GPSData> gpsMapLine);
  160. GPS_INS aim_gps_ins;
  161. GPS_INS chaoche_start_gps;
  162. bool is_arrivaled=false;
  163. double chaocheObsDis = 0;
  164. double preChaocheDis = 0;
  165. double aimObsSpeed = 0;
  166. double followSpeed = 30;
  167. double chaocheSpeed = 50;
  168. int checkChaoCheBackCounts = 0;
  169. float lastTorque=0;
  170. float splimit=-1;
  171. float ObsTimeSpan=-1;
  172. double ObsTimeStart=-1;
  173. double ObsTimeEnd=-1;
  174. float ObsTimeWidth=1500;
  175. std::vector<iv::TracePoint> planTrace;
  176. bool roadNowStart=true;
  177. private:
  178. // void changeRoad(int roadNum);
  179. };
  180. }
  181. }
  182. extern bool handPark;
  183. extern long handParkTime;
  184. extern bool rapidStop;
  185. extern int gpsMissCount;
  186. extern bool changeRoad;
  187. extern double avoidX;
  188. extern bool parkBesideRoad;
  189. extern double steerSpeed;
  190. extern bool transferPieriod;
  191. extern bool transferPieriod2;
  192. extern double traceDevi;
  193. #endif // ! _IV_DECITION__DECIDE_GPS_00_