20#include "absl/strings/str_split.h"
31std::string FindFirstExist(
const std::string& dir,
const std::string& files) {
32 const std::vector<std::string> candidates = absl::StrSplit(files,
'|');
33 for (
const auto& filename : candidates) {
34 const std::string file_path = absl::StrCat(FLAGS_map_dir,
"/", filename);
39 AERROR <<
"No existing file found in " << dir <<
"/" << files
40 <<
". Fallback to first candidate as default result.";
41 ACHECK(!candidates.empty()) <<
"Please specify at least one map.";
42 return absl::StrCat(FLAGS_map_dir,
"/", candidates[0]);
48 if (FLAGS_use_navigation_mode) {
49 AWARN <<
"base_map file is not used when FLAGS_use_navigation_mode is true";
51 return FLAGS_test_base_map_filename.empty()
52 ? FindFirstExist(FLAGS_map_dir, FLAGS_base_map_filename)
53 : FindFirstExist(FLAGS_map_dir, FLAGS_test_base_map_filename);
57 if (FLAGS_use_navigation_mode) {
58 AWARN <<
"sim_map file is not used when FLAGS_use_navigation_mode is true";
60 return FindFirstExist(FLAGS_map_dir, FLAGS_sim_map_filename);
64 if (FLAGS_use_navigation_mode) {
65 AWARN <<
"routing_map file is not used when FLAGS_use_navigation_mode is "
68 return FindFirstExist(FLAGS_map_dir, FLAGS_routing_map_filename);
71std::unique_ptr<HDMap>
CreateMap(
const std::string& map_file_path) {
72 std::unique_ptr<HDMap> hdmap(
new HDMap());
73 if (hdmap->LoadMapFromFile(map_file_path) != 0) {
74 AERROR <<
"Failed to load HDMap " << map_file_path;
77 AINFO <<
"Load HDMap success: " << map_file_path;
82 std::unique_ptr<HDMap> hdmap(
new HDMap());
83 if (hdmap->LoadMapFromProto(map_msg.
hdmap()) != 0) {
84 AERROR <<
"Failed to load RelativeMap: "
85 << map_msg.
header().ShortDebugString();
91std::unique_ptr<HDMap> HDMapUtil::base_map_ =
nullptr;
92uint64_t HDMapUtil::base_map_seq_ = 0;
93std::mutex HDMapUtil::base_map_mutex_;
95std::unique_ptr<HDMap> HDMapUtil::sim_map_ =
nullptr;
96std::mutex HDMapUtil::sim_map_mutex_;
99 std::lock_guard<std::mutex> lock(base_map_mutex_);
100 if (base_map_ !=
nullptr &&
103 return base_map_.get();
108 return base_map_.get();
134 if (base_map_ ==
nullptr) {
135 std::lock_guard<std::mutex> lock(base_map_mutex_);
136 if (base_map_ ==
nullptr) {
140 return base_map_.get();
146 if (FLAGS_use_navigation_mode) {
148 }
else if (sim_map_ ==
nullptr) {
149 std::lock_guard<std::mutex> lock(sim_map_mutex_);
150 if (sim_map_ ==
nullptr) {
154 return sim_map_.get();
161 std::lock_guard<std::mutex> lock(base_map_mutex_);
165 std::lock_guard<std::mutex> lock(sim_map_mutex_);
168 return base_map_ !=
nullptr && sim_map_ !=
nullptr;
173 std::lock_guard<std::mutex> lock(base_map_mutex_);
176 return base_map_ !=
nullptr;
static const HDMap * BaseMapPtr()
static const HDMap & BaseMap()
static const HDMap & SimMap()
static bool ReloadBaseMap()
static const HDMap * SimMapPtr()
High-precision map loader interface.
bool PathExists(const std::string &path)
Check if the path exists.
std::unique_ptr< HDMap > CreateMap(const std::string &map_file_path)
std::string SimMapFile()
get simulation map file path from flags.
std::string RoutingMapFile()
get routing map file path from flags.
std::string BaseMapFile()
get base map file path from flags.
optional apollo::common::Header header
optional apollo::hdmap::Map hdmap