14 #include "RobotComponents/libraries/cartographer/map_registration/wykobi_types.h"
20 inline Eigen::Vector3f
23 return Eigen::Vector3f{pt.x, pt.y, pt.z};
40 const auto clearLayer = [&](
const std::string& layerName)
42 auto layer = arviz().layer(layerName);
46 clearLayer(layers.mapBoundaries);
47 clearLayer(layers.modelSceneAssociations);
48 clearLayer(layers.sceneModels);
49 clearLayer(layers.robotPoses);
50 clearLayer(layers.selectedBoundingBoxCorner);
51 clearLayer(layers.clusters);
52 clearLayer(layers.pointCloud);
53 clearLayer(layers.frames);
59 auto framesLayer = arviz().layer(layers.frames);
62 viz::Pose(
MapFrame).pose(world_T_map.translation(), world_T_map.linear()).scale(5.F);
66 .
fromTo(Eigen::Vector3f::Zero(), world_T_map.translation());
68 framesLayer.add(worldPose, mapPose, arr);
74 const Eigen::Affine3f& world_T_map,
80 const std::string clusterPointsName =
"cluster_points_" +
std::to_string(
id);
83 .pose(world_T_map.translation(), world_T_map.linear());
89 const std::string clusterCentroidName =
"centroid_" +
std::to_string(
id);
91 Eigen::Vector3f world_P_cluster = world_T_map *
detail::toEigen(cluster.centroid);
93 auto pose =
viz::Pose(clusterCentroidName).position(world_P_cluster);
99 const Eigen::Affine3f& world_T_map)
101 auto layer = arviz().layer(layers.pointCloud);
104 const std::string clusterPointsName =
"point_cloud";
107 .pose(world_T_map.translation(), world_T_map.linear());
117 const Eigen::Affine3f& world_T_map)
119 auto layer = arviz().layer(layers.clusters);
123 [&](
const auto& cluster) { drawCluster(cluster, world_T_map, layer); });
130 const Eigen::Affine3f& world_T_map)
132 auto layer = arviz().layer(layers.selectedBoundingBoxCorner);
134 const Eigen::Affine3f world_T_corner = world_T_map * boundingBoxCornerPose;
136 .pose(world_T_corner.translation(), world_T_corner.linear())
146 const Eigen::Affine3f& world_T_map,
152 const std::string robotPoseName =
"robot_pose_" +
std::to_string(
id);
154 const Eigen::Affine3f world_T_robot = world_T_map * robotPose;
157 viz::Pose(robotPoseName).pose(world_T_robot.translation(), world_T_robot.linear());
163 const Eigen::Affine3f& world_T_map)
165 auto layer = arviz().layer(layers.robotPoses);
169 [&](
const auto& robotPose) { drawRobotPose(robotPose, world_T_map, layer); });
178 const std::string polygonModelName =
"model_polygon_" +
std::to_string(
id);
182 std::for_each(model.
polygon.begin(),
185 py.addPoint(Eigen::Vector3f{point.x, point.y, -4.F});
192 ArVizDrawer::drawModels(
const std::vector<wykobi::Model>& models)
194 auto layer = arviz().layer(layers.sceneModels);
197 models.begin(), models.end(), [&](
const auto& model) { drawModel(model, layer); });
203 ArVizDrawer::drawModelAssociation(
const MapRegistration::Association& association,
204 const Eigen::Affine3f& world_T_map,
207 const size_t id = layer.
size();
208 const std::string associationName =
"association_" +
std::to_string(
id);
211 const Eigen::Vector3f to = association.model.center;
221 ArVizDrawer::drawModelAssociations(
222 const std::vector<MapRegistration::Association>& associations,
223 const Eigen::Affine3f& world_T_map)
225 auto layer = arviz().layer(layers.modelSceneAssociations);
227 std::for_each(associations.begin(),
229 [&](
const auto& association)
230 { drawModelAssociation(association, world_T_map, layer); });
236 ArVizDrawer::drawMapBoundaries(
const RotatedRect& boundingRect,
237 const Eigen::Affine3f& world_T_map)
239 auto layer = arviz().layer(layers.mapBoundaries);
243 const auto boundingPts = boundingRect.boundary();
245 const auto toEigen = [](
const Eigen::Vector2f& pt) -> Eigen::Vector3f {
246 return Eigen::Vector3f{pt.x(), pt.y(), -10.F};
249 for (
const auto& pt : boundingPts)
251 const Eigen::Vector3f world_P_pt = world_T_map *
toEigen(pt);
252 ply.addPoint(world_P_pt);