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);
66 .
fromTo(Eigen::Vector3f::Zero(), world_T_map.translation());
68 framesLayer.add(worldPose, mapPose, arr);
74 const Eigen::Affine3f& world_T_map,
77 const size_t id =
layer.size();
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);
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,
149 const size_t id =
layer.size();
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); });
177 const size_t id =
layer.size();
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});
194 auto layer = arviz().layer(layers.sceneModels);
197 models.begin(), models.end(), [&](
const auto& model) { drawModel(model, layer); });
204 const Eigen::Affine3f& world_T_map,
207 const size_t id =
layer.size();
208 const std::string associationName =
"association_" + std::to_string(
id);
210 const Eigen::Vector3f from = world_T_map *
detail::toEigen(association.cluster.centroid);
211 const Eigen::Vector3f to = association.model.center;
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); });
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);
void drawModelAssociations(const std::vector< MapRegistration::Association > &associations, const Eigen::Affine3f &world_T_map)
void drawCluster(const MapRegistration::Cluster &cluster, const Eigen::Affine3f &world_T_map, viz::Layer &layer) const
void drawClusters(const MapRegistration::Clusters &clusters, const Eigen::Affine3f &world_T_map)
void drawMapBoundaries(const RotatedRect &boundingRect, const Eigen::Affine3f &world_T_map)
void drawPointCloud(const MapRegistration::PointCloud &cloud, const Eigen::Affine3f &world_T_map)
void drawSelectedBoundingBoxCorner(const Eigen::Affine3f &boundingBoxCornerPose, const Eigen::Affine3f &world_T_map)
void drawModel(const wykobi::Model &model, viz::Layer &layer) const
void drawFrames(const Eigen::Affine3f &world_T_map)
ArVizDrawer(armarx::viz::Client &arviz)
void drawRobotPose(const Eigen::Affine3f &robotPose, const Eigen::Affine3f &world_T_map, viz::Layer &layer) const
void drawModelAssociation(const MapRegistration::Association &association, const Eigen::Affine3f &world_T_map, viz::Layer &layer) const
void drawRobotPoses(const std::vector< Eigen::Affine3f > &robotPoses, const Eigen::Affine3f &world_T_map)
void drawModels(const std::vector< wykobi::Model > &models)
CommitResult commit(StagedCommit const &commit)
DerivedT & pose(Eigen::Matrix4f const &pose)
DerivedT & color(Color color)
DerivedT & position(float x, float y, float z)
DerivedT & scale(Eigen::Vector3f scale)
PointCloud & pointSizeInPixels(float s)
PointCloud & pointCloud(const PointCloudT &cloud)
Draw a point cloud.
Layer layer(std::string const &name) const override
std::string const GlobalFrame
Variable of the global coordinate system.
Eigen::Vector3f toEigen(const pcl::PointXYZ &pt)
Eigen::Vector2f toEigen(const cv::Point2f &pt)
::wykobi::point2d< float > Point
std::string const MapFrame
Eigen::Vector3f toEigen(const pcl::PointXYZ &pt)
Arrow & fromTo(const Eigen::Vector3f &from, const Eigen::Vector3f &to)