6 #include <Eigen/Geometry>
8 #include <SimoxUtility/algorithm/get_map_keys_values.h>
9 #include <SimoxUtility/iterator.h>
28 inline Eigen::Vector3f
29 toMM(
const Eigen::Vector3f& vec)
34 inline Eigen::Isometry3f
35 toMM(Eigen::Isometry3f pose)
37 pose.translation() *= 1000;
42 nameWithId(
const std::string& name,
const int id,
const unsigned int idWidth = 6)
45 ss << name <<
"_" << std::setw(
static_cast<int>(idWidth)) << std::setfill(
'0') << id;
53 const unsigned int idWidth = 6)
56 ss << name <<
"_" << std::setw(
static_cast<int>(idWidth)) << std::setfill(
'0') <<
id <<
"_"
57 << std::setw(
static_cast<int>(idWidth)) << std::setfill(
'0') << subId;
64 std::vector<std::vector<viz::data::Color>> colors(
70 auto xyIter = simox::iterator::XYIndexRangeIterator({numCells.x(), numCells.y()});
71 std::for_each(xyIter.begin(),
75 const auto& [x, y] = p;
76 colors[x][y] = toVizColor(colorGrid[x][y]);
86 for (
auto& vv : vvertices)
101 ::cartographer::mapping::MapBuilderInterface& mapBuilder,
102 const Eigen::Isometry3f& world_T_map) :
104 mapBuilder(mapBuilder),
106 world_T_map(world_T_map)
115 runningTask->start();
125 ArVizDrawerMapBuilder::run()
129 while (!runningTask->isStopped())
132 metronome.waitForNextTick();
146 ArVizDrawerMapBuilder::drawFrames()
148 auto framesLayer = arviz.
layer(
"frames");
151 viz::Pose(
MapFrame).pose(world_T_map.translation(), world_T_map.linear()).scale(5.F);
155 .
fromTo(Eigen::Vector3f::Zero(), world_T_map.translation());
157 framesLayer.add(worldPose);
158 framesLayer.add(mapPose);
159 framesLayer.add(arr);
160 arviz.
commit(framesLayer);
164 ArVizDrawerMapBuilder::drawOptimizedPoseGraph()
166 auto optimizedGraphLayerGlobal = arviz.
layer(
"optimized_graph_global");
172 const Eigen::Isometry3f globalPose = world_T_map *
toMM(nodeData.global_pose);
175 .position(globalPose.translation())
176 .orientation(globalPose.linear());
177 optimizedGraphLayerGlobal.add(globalPoseViz);
180 arviz.
commit(optimizedGraphLayerGlobal);
184 ArVizDrawerMapBuilder::drawGridMap()
188 std::map<int, viz::Layer> layers;
197 if (layers.find(submap.trajectory_id) == layers.end())
199 layers[submap.trajectory_id] =
203 auto& gridMapLayer = layers.at(submap.trajectory_id);
207 const Eigen::Isometry3f mapPose =
toMM(submap.global_pose());
208 const Eigen::Isometry3f globalPose = world_T_map * mapPose;
212 mesh.position(globalPose.translation() + Eigen::Vector3f{0.F, 0.F, -1.F})
213 .orientation(globalPose.linear())
214 .grid2D(
toVizPoint(submap.mesh_grid.vertices),
215 toVizColor(submap.mesh_grid.colors, submap.mesh_grid.num_cells));
217 gridMapLayer.add(mesh);
220 const auto layersV = simox::alg::get_values(layers);