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;
80 typedef boost::adjacency_list<
112 typename boost::graph_traits<LoopGraph>::vertex_descriptor vd = add_vertex (*loop_graph_);
113 (*loop_graph_)[vd].cloud = cloud;
114 if (num_vertices (*loop_graph_) > 1)
115 add_edge (vd_, vd, *loop_graph_);
123 return (loop_graph_);
132 loop_graph_ = loop_graph;
136 inline typename boost::graph_traits<LoopGraph>::vertex_descriptor
139 return (loop_start_);
146 setLoopStart (
const typename boost::graph_traits<LoopGraph>::vertex_descriptor &loop_start)
148 loop_start_ = loop_start;
152 inline typename boost::graph_traits<LoopGraph>::vertex_descriptor
162 setLoopEnd (
const typename boost::graph_traits<LoopGraph>::vertex_descriptor &loop_end)
164 loop_end_ = loop_end;
184 inline Eigen::Matrix4f
187 return (loop_transform_);
196 loop_transform_ = loop_transform;
197 compute_loop_ =
false;
216 typedef boost::adjacency_list<
217 boost::listS, boost::vecS, boost::undirectedS,
219 boost::property< boost::edge_weight_t, double > >
230 loopOptimizerAlgorithm (LOAGraph &g,
double *weights);
236 typename boost::graph_traits<LoopGraph>::vertex_descriptor loop_start_;
239 typename boost::graph_traits<LoopGraph>::vertex_descriptor loop_end_;
245 Eigen::Matrix4f loop_transform_;
249 typename boost::graph_traits<LoopGraph>::vertex_descriptor vd_;
252 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
257 #include <pcl/registration/impl/elch.hpp>
259 #endif // PCL_ELCH_H_