MappingHelpers.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /// \file MappingHelpers.h
  2. /// \brief Helper functions for mapping operation such as (load and initialize vector maps , convert map from one format to another, .. )
  3. /// \author Hatem Darweesh
  4. /// \date Jul 2, 2016
  5. #ifndef MAPPINGHELPERS_H_
  6. #define MAPPINGHELPERS_H_
  7. #include <math.h>
  8. #include "RoadNetwork.h"
  9. #include "op_utility/UtilityH.h"
  10. #include "op_utility/DataRW.h"
  11. #include "tinyxml.h"
  12. namespace PlannerHNS {
  13. class MappingHelpers {
  14. public:
  15. MappingHelpers();
  16. virtual ~MappingHelpers();
  17. static void ConstructRoadNetworkFromROSMessage(const std::vector<UtilityHNS::AisanLanesFileReader::AisanLane>& lanes_data,
  18. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points_data,
  19. const std::vector<UtilityHNS::AisanCenterLinesFileReader::AisanCenterLine>& dt_data,
  20. const std::vector<UtilityHNS::AisanIntersectionFileReader::AisanIntersection>& intersection_data,
  21. const std::vector<UtilityHNS::AisanAreasFileReader::AisanArea>& area_data,
  22. const std::vector<UtilityHNS::AisanLinesFileReader::AisanLine>& line_data,
  23. const std::vector<UtilityHNS::AisanStopLineFileReader::AisanStopLine>& stop_line_data,
  24. const std::vector<UtilityHNS::AisanSignalFileReader::AisanSignal>& signal_data,
  25. const std::vector<UtilityHNS::AisanVectorFileReader::AisanVector>& vector_data,
  26. const std::vector<UtilityHNS::AisanCurbFileReader::AisanCurb>& curb_data,
  27. const std::vector<UtilityHNS::AisanRoadEdgeFileReader::AisanRoadEdge>& roadedge_data,
  28. const std::vector<UtilityHNS::AisanWayareaFileReader::AisanWayarea>& wayarea_data,
  29. const std::vector<UtilityHNS::AisanCrossWalkFileReader::AisanCrossWalk>& crosswalk_data,
  30. const std::vector<UtilityHNS::AisanNodesFileReader::AisanNode>& nodes_data,
  31. const std::vector<UtilityHNS::AisanDataConnFileReader::DataConn>& conn_data,
  32. const GPSPoint& origin, RoadNetwork& map, const bool& bSpecialFlag = false,
  33. const bool& bFindLaneChangeLanes = false,
  34. const bool& bFindCurbsAndWayArea = false);
  35. static void ConstructRoadNetworkFromROSMessageV2(const std::vector<UtilityHNS::AisanLanesFileReader::AisanLane>& lanes_data,
  36. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points_data,
  37. const std::vector<UtilityHNS::AisanCenterLinesFileReader::AisanCenterLine>& dt_data,
  38. const std::vector<UtilityHNS::AisanIntersectionFileReader::AisanIntersection>& intersection_data,
  39. const std::vector<UtilityHNS::AisanAreasFileReader::AisanArea>& area_data,
  40. const std::vector<UtilityHNS::AisanLinesFileReader::AisanLine>& line_data,
  41. const std::vector<UtilityHNS::AisanStopLineFileReader::AisanStopLine>& stop_line_data,
  42. const std::vector<UtilityHNS::AisanSignalFileReader::AisanSignal>& signal_data,
  43. const std::vector<UtilityHNS::AisanVectorFileReader::AisanVector>& vector_data,
  44. const std::vector<UtilityHNS::AisanCurbFileReader::AisanCurb>& curb_data,
  45. const std::vector<UtilityHNS::AisanRoadEdgeFileReader::AisanRoadEdge>& roadedge_data,
  46. const std::vector<UtilityHNS::AisanWayareaFileReader::AisanWayarea>& wayarea_data,
  47. const std::vector<UtilityHNS::AisanCrossWalkFileReader::AisanCrossWalk>& crosswalk_data,
  48. const std::vector<UtilityHNS::AisanNodesFileReader::AisanNode>& nodes_data,
  49. const std::vector<UtilityHNS::AisanDataConnFileReader::DataConn>& conn_data,
  50. UtilityHNS::AisanLanesFileReader* pLaneData,
  51. UtilityHNS::AisanPointsFileReader* pPointsData,
  52. UtilityHNS::AisanNodesFileReader* pNodesData,
  53. UtilityHNS::AisanLinesFileReader* pLinedata,
  54. const GPSPoint& origin, RoadNetwork& map, const bool& bSpecialFlag = false,
  55. const bool& bFindLaneChangeLanes = false,
  56. const bool& bFindCurbsAndWayArea = false);
  57. static void ConstructRoadNetworkFromDataFiles(const std::string vectoMapPath, RoadNetwork& map, const bool& bZeroOrigin = false);
  58. static void UpdateMapWithOccupancyGrid(OccupancyToGridMap& map_info, const std::vector<int>& data, RoadNetwork& map, std::vector<WayPoint*>& updated_list);
  59. static bool GetWayPoint(const int& id, const int& laneID,const double& refVel, const int& did,
  60. const std::vector<UtilityHNS::AisanCenterLinesFileReader::AisanCenterLine>& dtpoints,
  61. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points,
  62. const GPSPoint& origin, WayPoint& way_point);
  63. static void LoadKML(const std::string& kmlMap, RoadNetwork& map);
  64. static TiXmlElement* GetHeadElement(TiXmlElement* pMainElem);
  65. static TiXmlElement* GetDataFolder(const std::string& folderName, TiXmlElement* pMainElem);
  66. static Lane* GetClosestLaneFromMap(const WayPoint& pos, RoadNetwork& map, const double& distance = 5.0, const bool bDirectionBased = true);
  67. static std::vector<Lane*> GetClosestLanesListFromMap(const WayPoint& pos, RoadNetwork& map, const double& distance = 2.0, const bool bDirectionBased = true);
  68. static Lane* GetClosestLaneFromMapDirectionBased(const WayPoint& pos, RoadNetwork& map, const double& distance = 5.0);
  69. static std::vector<Lane*> GetClosestMultipleLanesFromMap(const WayPoint& pos, RoadNetwork& map, const double& distance = 5.0);
  70. static WayPoint* GetClosestWaypointFromMap(const WayPoint& pos, RoadNetwork& map, const bool bDirectionBased = true);
  71. static std::vector<Lane*> GetClosestLanesFast(const WayPoint& pos, RoadNetwork& map, const double& distance = 10.0);
  72. static std::vector<WayPoint*> GetClosestWaypointsListFromMap(const WayPoint& center, RoadNetwork& map, const double& distance = 2.0, const bool bDirectionBased = true);
  73. static WayPoint* GetClosestBackWaypointFromMap(const WayPoint& pos, RoadNetwork& map);
  74. static WayPoint GetFirstWaypoint(RoadNetwork& map);
  75. static WayPoint* GetLastWaypoint(RoadNetwork& map);
  76. static void FindAdjacentLanes(RoadNetwork& map);
  77. static void FindAdjacentLanesV2(RoadNetwork& map);
  78. static void ExtractSignalData(const std::vector<UtilityHNS::AisanSignalFileReader::AisanSignal>& signal_data,
  79. const std::vector<UtilityHNS::AisanVectorFileReader::AisanVector>& vector_data,
  80. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points_data,
  81. const GPSPoint& origin, RoadNetwork& map);
  82. static void ExtractSignalDataV2(const std::vector<UtilityHNS::AisanSignalFileReader::AisanSignal>& signal_data,
  83. const std::vector<UtilityHNS::AisanVectorFileReader::AisanVector>& vector_data,
  84. UtilityHNS::AisanPointsFileReader* pPointsData,
  85. const GPSPoint& origin, RoadNetwork& map);
  86. static void ExtractStopLinesData(const std::vector<UtilityHNS::AisanStopLineFileReader::AisanStopLine>& stop_line_data,
  87. const std::vector<UtilityHNS::AisanLinesFileReader::AisanLine>& line_data,
  88. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points_data,
  89. const GPSPoint& origin, RoadNetwork& map);
  90. static void ExtractStopLinesDataV2(const std::vector<UtilityHNS::AisanStopLineFileReader::AisanStopLine>& stop_line_data,
  91. UtilityHNS::AisanLinesFileReader* pLineData,
  92. UtilityHNS::AisanPointsFileReader* pPointData,
  93. const GPSPoint& origin, RoadNetwork& map);
  94. static void ExtractCurbData(const std::vector<UtilityHNS::AisanCurbFileReader::AisanCurb>& curb_data,
  95. const std::vector<UtilityHNS::AisanLinesFileReader::AisanLine>& line_data,
  96. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points_data,
  97. const GPSPoint& origin, RoadNetwork& map);
  98. static void ExtractCurbDataV2(const std::vector<UtilityHNS::AisanCurbFileReader::AisanCurb>& curb_data,
  99. UtilityHNS::AisanLinesFileReader* pLinedata,
  100. UtilityHNS::AisanPointsFileReader* pPointsData,
  101. const GPSPoint& origin, RoadNetwork& map);
  102. static void ExtractWayArea(const std::vector<UtilityHNS::AisanAreasFileReader::AisanArea>& area_data,
  103. const std::vector<UtilityHNS::AisanWayareaFileReader::AisanWayarea>& wayarea_data,
  104. const std::vector<UtilityHNS::AisanLinesFileReader::AisanLine>& line_data,
  105. const std::vector<UtilityHNS::AisanPointsFileReader::AisanPoints>& points_data,
  106. const GPSPoint& origin, RoadNetwork& map);
  107. static void LinkMissingBranchingWayPoints(RoadNetwork& map);
  108. static void LinkMissingBranchingWayPointsV2(RoadNetwork& map);
  109. static void LinkTrafficLightsAndStopLinesConData(const std::vector<UtilityHNS::AisanDataConnFileReader::DataConn>& conn_data,
  110. const std::vector<std::pair<int,int> >& id_replace_list, RoadNetwork& map);
  111. static void LinkTrafficLightsAndStopLines(RoadNetwork& map);
  112. static void LinkTrafficLightsAndStopLinesV2(RoadNetwork& map);
  113. static void GetUniqueNextLanes(const Lane* l, const std::vector<Lane*>& traversed_lanes, std::vector<Lane*>& lanes_list);
  114. static GPSPoint GetTransformationOrigin(const int& bToyotaCityMap = 0);
  115. static Lane* GetLaneFromPath(const WayPoint& currPos, const std::vector<WayPoint>& currPath);
  116. static Lane* GetLaneById(const int& id,RoadNetwork& map);
  117. static int GetLaneIdByWaypointId(const int& id,std::vector<Lane>& lanes);
  118. static WayPoint* FindWaypoint(const int& id, RoadNetwork& map);
  119. static WayPoint* FindWaypointV2(const int& id, const int& l_id, RoadNetwork& map);
  120. static std::vector<Curb> GetCurbsList(TiXmlElement* pElem);
  121. static std::vector<Boundary> GetBoundariesList(TiXmlElement* pElem);
  122. static std::vector<Marking> GetMarkingsList(TiXmlElement* pElem);
  123. static std::vector<Crossing> GetCrossingsList(TiXmlElement* pElem);
  124. static std::vector<TrafficSign> GetTrafficSignsList(TiXmlElement* pElem);
  125. static std::vector<TrafficLight> GetTrafficLightsList(TiXmlElement* pElem);
  126. static std::vector<StopLine> GetStopLinesList(TiXmlElement* pElem);
  127. static std::vector<Lane> GetLanesList(TiXmlElement* pElem);
  128. static std::vector<RoadSegment> GetRoadSegmentsList(TiXmlElement* pElem);
  129. static std::vector<int> GetIDsFromPrefix(const std::string& str, const std::string& prefix, const std::string& postfix);
  130. static std::vector<double> GetDoubleFromPrefix(const std::string& str, const std::string& prefix, const std::string& postfix);
  131. static std::pair<ACTION_TYPE, double> GetActionPairFromPrefix(const std::string& str, const std::string& prefix, const std::string& postfix);
  132. static std::vector<WayPoint> GetCenterLaneData(TiXmlElement* pElem, const int& currLaneID);
  133. static std::vector<WayPoint> GetCenterLaneDataVer0(TiXmlElement* pElem, const int& currLaneID);
  134. static std::vector<GPSPoint> GetPointsData(TiXmlElement* pElem);
  135. static std::vector<std::string> SplitString(const std::string& str, const std::string& token);
  136. //static void CreateKmlFromLocalizationPathFile(const std::string& pathFileName,const double& maxLaneDistance, const double& density,const std::vector<TrafficLight>& trafficLights, const std::vector<GPSPoint>& stopLines);
  137. static void AssignActionCostToLane(Lane* pL, ACTION_TYPE action, double cost);
  138. static int ReplaceMyID(int& id, const std::vector<std::pair<int,int> >& rep_list);
  139. static void GetLanesStartPoints(UtilityHNS::AisanLanesFileReader* pLaneData,
  140. std::vector<int>& m_LanesStartIds);
  141. static void GetLanePoints(UtilityHNS::AisanLanesFileReader* pLaneData,
  142. UtilityHNS::AisanPointsFileReader* pPointsData,
  143. UtilityHNS::AisanNodesFileReader* pNodesData, int lnID,
  144. PlannerHNS::Lane& out_lane);
  145. static void CreateLanes(UtilityHNS::AisanLanesFileReader* pLaneData,
  146. UtilityHNS::AisanPointsFileReader* pPointsData,
  147. UtilityHNS::AisanNodesFileReader* pNodesData,
  148. std::vector<PlannerHNS::Lane>& out_lanes);
  149. static void ConnectLanes(UtilityHNS::AisanLanesFileReader* pLaneData,
  150. std::vector<PlannerHNS::Lane>& lanes);
  151. static bool GetPointFromDataList(UtilityHNS::AisanPointsFileReader* pPointsData,const int& pid, WayPoint& out_wp);
  152. static int GetBeginPointIdFromLaneNo(UtilityHNS::AisanLanesFileReader* pLaneData,
  153. UtilityHNS::AisanPointsFileReader* pPointsData,
  154. UtilityHNS::AisanNodesFileReader* pNodesData, const int& LnID);
  155. static int GetEndPointIdFromLaneNo(UtilityHNS::AisanLanesFileReader* pLaneData,
  156. UtilityHNS::AisanPointsFileReader* pPointsData,
  157. UtilityHNS::AisanNodesFileReader* pNodesData,const int& LnID);
  158. static bool IsStartLanePoint(UtilityHNS::AisanLanesFileReader* pLaneData, UtilityHNS::AisanLanesFileReader::AisanLane* pL);
  159. static bool IsEndLanePoint(UtilityHNS::AisanLanesFileReader* pLaneData, UtilityHNS::AisanLanesFileReader::AisanLane* pL);
  160. static void FixRedundantPointsLanes(std::vector<Lane>& lanes);
  161. static void FixTwoPointsLanes(std::vector<Lane>& lanes);
  162. static void FixTwoPointsLane(Lane& lanes);
  163. static void FixUnconnectedLanes(std::vector<Lane>& lanes);
  164. static void InsertWayPointToBackOfLane(const WayPoint& wp, Lane& lane, int& global_id);
  165. static void InsertWayPointToFrontOfLane(const WayPoint& wp, Lane& lane, int& global_id);
  166. static void LinkLanesPointers(PlannerHNS::RoadNetwork& map);
  167. static void GetMapMaxIds(PlannerHNS::RoadNetwork& map);
  168. static double m_USING_VER_ZERO;
  169. static int g_max_point_id;
  170. static int g_max_lane_id;
  171. static int g_max_stop_line_id;
  172. static int g_max_traffic_light_id ;
  173. };
  174. } /* namespace PlannerHNS */
  175. #endif /* MAPPINGHELPERS_H_ */