44 #include <pcl/pcl_base.h>
45 #include <pcl/point_types.h>
46 #include <pcl/point_cloud.h>
47 #include <pcl/registration/registration.h>
48 #include <pcl/registration/boost.h>
49 #include <pcl/registration/eigen.h>
50 #include <pcl/registration/icp.h>
51 #include <pcl/registration/boost_graph.h>
55 namespace registration
61 template <
typename Po
intT>
65 typedef boost::shared_ptr< ELCH<PointT> >
Ptr;
66 typedef boost::shared_ptr< const ELCH<PointT> >
ConstPtr;
79 typedef boost::adjacency_list<
111 typename boost::graph_traits<LoopGraph>::vertex_descriptor vd = add_vertex (*loop_graph_);
112 (*loop_graph_)[vd].cloud = cloud;
113 if (num_vertices (*loop_graph_) > 1)
114 add_edge (vd_, vd, *loop_graph_);
122 return (loop_graph_);
131 loop_graph_ = loop_graph;
135 inline typename boost::graph_traits<LoopGraph>::vertex_descriptor
138 return (loop_start_);
145 setLoopStart (
const typename boost::graph_traits<LoopGraph>::vertex_descriptor &loop_start)
147 loop_start_ = loop_start;
151 inline typename boost::graph_traits<LoopGraph>::vertex_descriptor
161 setLoopEnd (
const typename boost::graph_traits<LoopGraph>::vertex_descriptor &loop_end)
163 loop_end_ = loop_end;
183 inline Eigen::Matrix4f
186 return (loop_transform_);
195 loop_transform_ = loop_transform;
196 compute_loop_ =
false;
215 typedef boost::adjacency_list<
216 boost::listS, boost::vecS, boost::undirectedS,
218 boost::property< boost::edge_weight_t, double > >
229 loopOptimizerAlgorithm (LOAGraph &g,
double *weights);
235 typename boost::graph_traits<LoopGraph>::vertex_descriptor loop_start_;
238 typename boost::graph_traits<LoopGraph>::vertex_descriptor loop_end_;
244 Eigen::Matrix4f loop_transform_;
248 typename boost::graph_traits<LoopGraph>::vertex_descriptor vd_;
251 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
256 #include <pcl/registration/impl/elch.hpp>
258 #endif // PCL_ELCH_H_
void addPointCloud(PointCloudPtr cloud)
Add a new point cloud to the internal graph.
boost::shared_ptr< const Registration< PointT, PointT, float > > ConstPtr
Eigen::Matrix4f getLoopTransform()
Getter for the transformation between the first and the last scan.
boost::graph_traits< LoopGraph >::vertex_descriptor getLoopEnd()
Getter for the last scan of a loop.
boost::shared_ptr< const ELCH< PointT > > ConstPtr
boost::graph_traits< LoopGraph >::vertex_descriptor getLoopStart()
Getter for the first scan of a loop.
boost::shared_ptr< const PointCloud< PointT > > ConstPtr
Registration::Ptr RegistrationPtr
RegistrationPtr getReg()
Getter for the registration algorithm.
void compute()
Computes now poses for all point clouds by closing the loop between start and end point cloud...
boost::shared_ptr< PointCloud< PointT > > Ptr
boost::adjacency_list< boost::listS, boost::eigen_vecS, boost::undirectedS, Vertex, boost::no_property > LoopGraph
graph structure to hold the SLAM graph
void setLoopTransform(const Eigen::Matrix4f &loop_transform)
Setter for the transformation between the first and the last scan.
PointCloud::Ptr PointCloudPtr
Registration::ConstPtr RegistrationConstPtr
pcl::Registration< PointT, PointT > Registration
void setLoopEnd(const typename boost::graph_traits< LoopGraph >::vertex_descriptor &loop_end)
Setter for the last scan of a loop.
boost::shared_ptr< Registration< PointSource, PointTarget, Scalar > > Ptr
ELCH (Explicit Loop Closing Heuristic) class
pcl::PointCloud< PointT > PointCloud
virtual ~ELCH()
Empty destructor.
LoopGraphPtr getLoopGraph()
Getter for the internal graph.
boost::shared_ptr< LoopGraph > LoopGraphPtr
boost::shared_ptr< ELCH< PointT > > Ptr
A point structure representing Euclidean xyz coordinates, and the RGB color.
void setLoopGraph(LoopGraphPtr loop_graph)
Setter for a new internal graph.
void setReg(RegistrationPtr reg)
Setter for the registration algorithm.
PointCloud::Ptr PointCloudPtr
virtual bool initCompute()
This method should get called before starting the actual computation.
PointCloud::ConstPtr PointCloudConstPtr
IterativeClosestPoint provides a base implementation of the Iterative Closest Point algorithm...
void setLoopStart(const typename boost::graph_traits< LoopGraph >::vertex_descriptor &loop_start)
Setter for the first scan of a loop.