NDEVR
API Documentation
PCLSLAM.h
1#pragma once
2#include <NDEVR/SLAMEngine.h>
3#include "DLLInfo.h"
4#if NDEVR_PCL_SLAM
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>
9
10#include <pcl/io/pcd_io.h>
11
12#include <pcl/filters/voxel_grid.h>
13#include <pcl/filters/filter.h>
14
15#include <pcl/features/normal_3d.h>
16
17#include <pcl/registration/icp.h>
18#include <pcl/registration/icp_nl.h>
19#include <pcl/registration/transforms.h>
20
21#include <pcl/filters/statistical_outlier_removal.h>
22#include <pcl/filters/radius_outlier_removal.h>
23
24#include <pcl/features/normal_3d.h>
25#include <pcl/features/fpfh.h>
26#include <pcl/registration/ia_ransac.h>
27
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"
33namespace NDEVR
34{
38 class DoubleExpFilter {
39 public:
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);
43 private:
44 double kAlpha;
45 double kBeta;
46 Vector<3, fltp08> kSmoothedValue;
47 Vertex<3, fltp08> kTrendValue;
48 bool kFirstUpdate;
49 };
50
54 class SLAMProcessor : public SLAMEngine
55 {
56 public:
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;
61 public:
62 SLAMProcessor();
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;
66
67
68 private:
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);
71 /* please save */
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;
75
76 DoubleExpFilter* m_filter;
77 double lastFrameEndTime;
78
79 double param1, param2;
80
81 };
82
86 class PCLSLAMEngineFactory : public SLAMEngineFactory
87 {
88 public:
89 static void Register();
90 SLAMEngine* createSLAMEngine() final override;
91 UUID id() const final override { return UUID::CreateUUID("SLAMProcessor"); };
92 };
93}
94#endif
Creates a SLAM engine when required.
Definition SLAMEngine.h:62
Provides logic to perform SLAM on an object.
Definition SLAMEngine.h:31
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...