54 load(
const std::filesystem::path& directory)
57 const auto filename = directory /
"costmap.json";
58 std::ifstream ifs(filename);
60 const nlohmann::json j = nlohmann::json::parse(ifs);
63 const auto& jParam = j.at(
"params");
66 .cellSize = jParam.at(
"cell_size")};
69 const auto& jSceneBounds = j.at(
"scene_bounds");
71 const std::vector<float> boundsMin = jSceneBounds.at(
"min");
72 const std::vector<float> boundsMax = jSceneBounds.at(
"max");
77 const SceneBounds sceneBounds{.min = {boundsMin.at(0), boundsMin.at(1)},
78 .max = {boundsMax.at(0), boundsMax.at(1)}};
82 const std::string gridFilename = j.at(
"grid_filename");
83 cv::Mat gridMat = cv::imread((directory / gridFilename).
string(),
84 cv::IMREAD_ANYCOLOR | cv::IMREAD_ANYDEPTH);
87 cv::cv2eigen(gridMat, grid);
90 std::optional<Costmap::Mask> optMask;
91 if (not j.at(
"mask_filename").empty())
93 const std::string maskFilename = j.at(
"grid_filename");
94 cv::Mat maskMat = cv::imread((directory / maskFilename).
string(),
95 cv::IMREAD_ANYCOLOR | cv::IMREAD_ANYDEPTH);
98 cv::cv2eigen(maskMat, mask);
100 optMask = mask.cast<
bool>();
103 Eigen::Isometry2f origin = Eigen::Isometry2f::Identity();
104 if (not j.at(
"origin").empty())
106 const Eigen::Matrix3f h = j.at(
"origin");
110 return {grid, params, sceneBounds, optMask, origin};
120 if (not std::filesystem::exists(directory))
123 std::filesystem::create_directories(directory);
126 nlohmann::json j = {{
"params",
127 {{
"binary_grid",
costmap.params().binaryGrid},
128 {
"cell_size",
costmap.params().cellSize}}},
131 std::vector<float>{
costmap.getLocalSceneBounds().min.x(),
132 costmap.getLocalSceneBounds().min.y()}},
134 std::vector<float>{
costmap.getLocalSceneBounds().max.x(),
135 costmap.getLocalSceneBounds().max.y()}}}},
136 {
"origin",
costmap.origin().matrix()}};
138 std::optional<cv::Mat1b> mask;
139 if (
costmap.getMask().has_value())
143 costmap.getMask()->cast<std::uint8_t>();
145 cv::eigen2cv(maskI, m);
154 cv::eigen2cv(
costmap.getGrid(), grid);
156 const std::string gridFilename =
"grid.exr";
157 cv::imwrite((directory / gridFilename).
string(), grid);
159 j[
"grid_filename"] = gridFilename;
162 const std::string gridDebuggingFilename =
"grid";
168 cv::minMaxIdx(grid, &
min, &
max, 0, 0, mask.value());
172 cv::minMaxIdx(grid, &
min, &
max);
175 grid.convertTo(adjMap, CV_8UC1, 255 / (
max -
min), -255 *
min / (
max -
min));
178 applyColorMap(adjMap, colorsMap, cv::COLORMAP_JET);
179 cv::Mat maskedColorsMap;
182 colorsMap.copyTo(maskedColorsMap, mask.value());
186 maskedColorsMap = colorsMap;
188 cv::imwrite((directory / (gridDebuggingFilename +
".png")).
string(), maskedColorsMap);
195 const std::string maskFilename =
"mask.ppm";
196 cv::imwrite((directory / maskFilename).
string(), mask.value());
198 j[
"mask_filename"] = maskFilename;
203 std::ofstream of(directory /
"costmap.json");