31#include <Eigen/Geometry>
33#include <pcl/point_cloud.h>
34#include <pcl/point_types.h>
36#include <SimoxUtility/shapes/OrientedBox.h>
39#include <ArmarXCore/interface/serialization/Eigen/Eigen_fdi.h>
50 class MapBuilderInterface;
74 std::array<Eigen::Vector2f, 4>
77 const Eigen::Affine2f centerPose =
78 Eigen::Translation2f(
center) * Eigen::Rotation2Df(
angle);
80 const Eigen::Vector2f e2 =
extends / 2.F;
82 return {centerPose * Eigen::Vector2f{e2.x(), e2.y()},
83 centerPose * Eigen::Vector2f{-e2.x(), e2.y()},
84 centerPose * Eigen::Vector2f{-e2.x(), -e2.y()},
85 centerPose * Eigen::Vector2f{e2.x(), -e2.y()}};
91 const float cornerAngle =
angle + (i - 2) * M_PI_2f32;
93 Eigen::Isometry3f ref_T_corner = Eigen::Isometry3f::Identity();
94 ref_T_corner.translation().template head<2>() =
boundary().at(i);
95 ref_T_corner.linear() =
96 Eigen::AngleAxisf(cornerAngle, Eigen::Vector3f::UnitZ()).toRotationMatrix();
105 MapRegistration(std::unique_ptr<::cartographer::mapping::MapBuilderInterface> mapBuilder);
143 const Eigen::Isometry3f& world_T_map)
const;
161 const Eigen::Isometry3f& world_T_map)
const;
165 const std::vector<ModelCorrection>& modelCorrections)
const;
168 const std::vector<wykobi::Model>& models,
173 simox::math::InterpolatingTimeQueue<simox::math::PoseStamped>
robotPoseQueue()
const;
175 std::vector<Eigen::Isometry3f>
robotPoses()
const;
186 std::unique_ptr<::cartographer::mapping::MapBuilderInterface> mapBuilder;
ModelCorrection alignModelToCluster(const wykobi::Model &model, const Cluster &cluster, const Eigen::Isometry3f &world_T_map) const
ModelCorrection computeCombinedCorrection(const std::vector< wykobi::Model > &models, const std::vector< ModelCorrection > &modelCorrections) const
Clusters detectClusters(const PointCloud::ConstPtr &cloud) const
void computeBoundingBox(const PointCloud::ConstPtr &cloud)
void visualizeResult(const PointCloud::ConstPtr &cloud, const std::vector< wykobi::Model > &models, const ModelCorrection &combinedCorrection) const
std::vector< Association > Associations
MapRegistration(std::unique_ptr<::cartographer::mapping::MapBuilderInterface > mapBuilder)
std::vector< Eigen::Isometry3f > robotPoses() const
TimeRange mapTimeRange() const
std::vector< Cluster > Clusters
pcl::PointCloud< Point > PointCloud
MapRegistration::ModelCorrection computeCorrection(const MapRegistration::Associations &associations)
simox::math::InterpolatingTimeQueue< simox::math::PoseStamped > robotPoseQueue() const
Associations matchModelsToClusters(const std::vector< wykobi::Model > &models, const Clusters &clusters, const Eigen::Isometry3f &world_T_map) const
const RotatedRect & getBoundingBox() const
This file is part of ArmarX.
const wykobi::Model model
Cluster(const PointCloud::Ptr &points)
Eigen::Isometry3f correction
Eigen::Matrix2f covariance
Eigen::Isometry3f cornerPose(int i) const
std::array< Eigen::Vector2f, 4 > boundary() const
IceUtil::Time duration() const noexcept