24 #ifndef PLANEREGISTRATION_HPP_ 25 #define PLANEREGISTRATION_HPP_ 28 #include "mrob/SE3.hpp" 29 #include <Eigen/StdVector> 30 #include "mrob/plane.hpp" 31 #include "mrob/optimizer.hpp" 32 #include "mrob/time_profiling.hpp" 34 #include <unordered_map> 50 enum TrajectoryMode{SEQUENCE=0, INTERPOLATION};
53 enum SolveMode{INITIALIZE=0,
76 void set_number_planes_and_poses(uint_t numPlanes, uint_t numPoses);
77 uint_t get_number_planes()
const {
return numberPlanes_;};
78 uint_t get_number_poses()
const {
return numberPoses_;};
84 uint_t
solve(SolveMode mode,
bool singleIteration =
false);
91 uint_t solve_gradient_all_poses(
bool singleIteration =
false);
113 double get_current_error()
const;
123 SE3 get_last_pose() {
return trajectory_->back();}
133 void add_plane(uint_t
id, std::shared_ptr<Plane> &plane);
147 uint_t calculate_total_number_points();
148 std::shared_ptr<Plane> & get_plane(uint_t
id);
150 std::unordered_map<uint_t, std::shared_ptr<Plane>>& get_all_planes() {
return planes_;};
152 void set_alpha_parameter(
double alpha) {alpha_ = alpha;};
153 void set_beta_parameter(
double beta) {beta_ = beta;};
155 double calculate_poses_rmse(std::vector<SE3> & groundTruth)
const;
157 void print(
bool plotPlanes =
true)
const;
182 std::vector<Mat31> get_point_plane_ids(uint_t time);
186 uint_t numberPlanes_, numberPoses_, numberPoints_;
188 PlaneRegistration::TrajectoryMode trajMode_ {};
190 std::unordered_map<uint_t, std::shared_ptr<Plane>> planes_;
191 std::shared_ptr<std::vector<SE3>> trajectory_;
192 std::vector<SE3> temporary_trajectory_;
193 SE3 bookept_trajectory_;
195 uint_t solveIters_ {};
198 PlaneRegistration::SolveMode solveMode_;
199 std::vector<Mat61> previousState_;
201 double alpha_, beta_;
210 double initial_error_ {};
void add_point_cloud_planes(uint_t time, std::vector< Mat31 > &points, std::vector< uint_t > &point_ids)
uint_t solve_quaternion_plane()
Definition: plane_registration.cpp:241
virtual void update_state() override
Definition: plane_registration.cpp:513
virtual void calculate_gradient_hessian() override
Definition: plane_registration.cpp:490
uint_t solve(SolveMode mode, bool singleIteration=false)
Definition: plane_registration.cpp:80
void reset_solution()
Definition: plane_registration.cpp:70
void add_new_plane(uint_t id)
Definition: plane_registration.cpp:333
Definition: optimizer.hpp:151
SE3 get_pose(uint_t time)
Definition: plane_registration.cpp:382
std::vector< SE3 > & get_trajectory()
Definition: plane_registration.cpp:390
uint_t solve_initialize()
Definition: plane_registration.cpp:251
uint_t solve_interpolate_gradient(bool singleIteration=false)
Definition: plane_registration.cpp:131
void plane_push_back_point(uint_t id, uint_t t, Mat31 &point)
Definition: plane_registration.cpp:340
virtual matData_t calculate_error() override
Definition: plane_registration.cpp:485
virtual void update_state_from_bookkeep() override
Definition: plane_registration.cpp:532
Definition: time_profiling.hpp:40
std::vector< double > print_evaluate()
Definition: plane_registration.cpp:414
Definition: plane_registration.hpp:46
void set_last_pose(SE3 &last)
Definition: plane_registration.cpp:315
Special Euclidean (group) in 3d Is the group representing rotations and translations, that is, rigid body transformations. SE3 = {T = [R t] | R SO3 , t Re^3 } [0 1] Associated to the groups of RBT, there is the Lie algebra se3 representing the same transformation in the tangent space around the identity. Particularly, xi =[w , v] Re^6, where w Re^3 represents the rotation and v the translation. We will preserve this order in this class.
Definition: matrix_base.hpp:36
std::vector< Mat31 > get_point_cloud(uint_t time)
Definition: plane_registration.cpp:370
virtual void bookkeep_state() override
Definition: plane_registration.cpp:527
void add_plane(uint_t id, std::shared_ptr< Plane > &plane)
Definition: plane_registration.cpp:327