dubins_planner.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <adc_planner/dubins_planner.h>
  2. #include <adc_tools/transfer.h>
  3. #include <adc_tools/parameter_status.h>
  4. #include <common/constants.h>
  5. #include <math.h>
  6. std::vector<iv::GPSData> iv::decition::DubinsPlanner::gpsMap;
  7. iv::decition::DubinsPlanner::DubinsPlanner(){
  8. this->planner_id = 2;
  9. this->planner_name = "Dubins";
  10. }
  11. iv::decition::DubinsPlanner::~DubinsPlanner(){
  12. }
  13. /**
  14. * @brief iv::decition::LaneChangePlanner::getPath
  15. * 采用的车道变换的局部路径生成方法。计算原始地图路径偏移offset距离之后的路径。
  16. *
  17. * @param now_gps_ins 实时gps信息
  18. * @param gpsMapLine 地图数据点
  19. * @param PathPoint 地图路线中距离车辆位置最近的一个点的序号
  20. * @param offset 在车辆避障中,地图源路线所在车道 与 即将去往的车道 之间的距离差值。可以为负值。
  21. * @param lidarGridPtr 激光雷达信息网格
  22. * @return 返回一条车辆坐标系下的路径
  23. */
  24. std::vector<iv::Point2D> iv::decition::DubinsPlanner::getPath(GPS_INS now_gps_ins, const std::vector<GPSData>& gpsMapLine, int PathPoint, double offset, iv::LidarGridPtr lidarGridPtr){
  25. std::vector<iv::Point2D> trace;
  26. double L = 2.6;
  27. double R = L/sin(10.0*M_PI/180.0);
  28. std::cout<<" R = "<<R<<std::endl;
  29. // return a.exec();
  30. // double q0[] = { 0,0,1.57};
  31. // double q1[] = { 4,4,3.142 };
  32. gpsMap.clear();
  33. double q0[] = { now_gps_ins.gps_x, now_gps_ins.gps_y, now_gps_ins.ins_heading_angle};
  34. double q1[] = { gpsMapLine[PathPoint]->gps_x, gpsMapLine[PathPoint]->gps_y ,gpsMapLine[PathPoint]->ins_heading_angle };
  35. double turning_radius = 10.0;
  36. DubinsPath path;
  37. dubins_shortest_path( &path, q0, q1, turning_radius);
  38. dubins_path_sample_many( &path, 0.1, printConfiguration, NULL);
  39. }
  40. int iv::decition::DubinsPlanner::printConfiguration(double q[3], double x, void* user_data) {
  41. GPSData gps;
  42. gps->roadMode=5;
  43. gps->gps_x=q[0];
  44. gps->gps_y=q[1];
  45. gps->ins_heading_angle=q[3];
  46. gpsMap.push_back(gps);
  47. return 0;
  48. }