2#include <NDEVR/SLAMEngine.h>
5#include <pcl/point_types.h>
6#include <pcl/point_cloud.h>
7#include <pcl/point_representation.h>
8#include <pcl/impl/point_types.hpp>
10#include <pcl/io/pcd_io.h>
12#include <pcl/filters/voxel_grid.h>
13#include <pcl/filters/filter.h>
15#include <pcl/features/normal_3d.h>
17#include <pcl/registration/icp.h>
18#include <pcl/registration/icp_nl.h>
19#include <pcl/registration/transforms.h>
21#include <pcl/filters/statistical_outlier_removal.h>
22#include <pcl/filters/radius_outlier_removal.h>
24#include <pcl/features/normal_3d.h>
25#include <pcl/features/fpfh.h>
26#include <pcl/registration/ia_ransac.h>
28#include <pcl/keypoints/sift_keypoint.h>
29#include <pcl/range_image/range_image.h>
30#include <pcl/features/range_image_border_extractor.h>
31#include <pcl/keypoints/narf_keypoint.h>
32#include "Base/Headers/Vertex.hpp"
38 class DoubleExpFilter {
40 Vertex<3, fltp08> updatePosition(
const Vertex<3, fltp08>& sensedPosition);
41 Vertex<3, fltp08> getCurrentPosition();
42 DoubleExpFilter(Vertex<3, fltp08> initialPosition,
double dataSmootingFactor,
double trendSmoothingFactor);
46 Vector<3, fltp08> kSmoothedValue;
47 Vertex<3, fltp08> kTrendValue;
57 virtual void addFrame(
const SLAMFrame& frame)
override;
58 virtual void setProperty<NDPO::transform>(Matrix<fltp08>& transform)
override;
59 virtual Matrix<fltp08> getTransform()
const override;
60 virtual void reset()
override;
63 Eigen::Matrix4f m_sensor_transform;
64 std::vector<pcl::PointCloud<pcl::PointXYZ>::Ptr, Eigen::aligned_allocator<pcl::PointCloud<pcl::PointXYZ>::Ptr> > m_frames;
65 uint04 m_total_points = 0U;
69 pcl::PointCloud<pcl::PointXYZ>::Ptr pairAlign(
const pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud_src,
const pcl::PointCloud<pcl::PointXYZ>::ConstPtr cloud_tgt,
const SLAMFrame& frame, Eigen::Matrix4f& final_transform);
70 void computeNarfKeypoint(pcl::PointCloud<pcl::PointXYZ>::ConstPtr point_cloud_ptr, pcl::PointCloud<pcl::PointXYZ>::Ptr keypoints_ptr);
72 void computeSurfaceNormals(
const pcl::PointCloud<pcl::PointXYZ>::ConstPtr& points, pcl::PointCloud<pcl::Normal>::Ptr& normals);
73 void computeLocalFeatures(
const pcl::PointCloud<pcl::PointXYZ>::ConstPtr& points,
const pcl::PointCloud<pcl::Normal>::ConstPtr& normals, pcl::PointCloud<pcl::FPFHSignature33>::Ptr& features);
74 pcl::search::KdTree<pcl::PointXYZ>::Ptr search_method_xyz;
76 DoubleExpFilter* m_filter;
77 double lastFrameEndTime;
79 double param1, param2;
89 static void Register();
90 SLAMEngine* createSLAMEngine() final override;
91 UUID
id() const final
override {
return UUID::CreateUUID(
"SLAMProcessor"); };
Creates a SLAM engine when required.
Provides logic to perform SLAM on an object.
The primary namespace for the NDEVR SDK.
uint32_t uint04
-Defines an alias representing a 4 byte, unsigned integer -Can represent exact integer values 0 throu...