Point Cloud Library (PCL)
1.11.1
|
42 #include <pcl/gpu/containers/device_array.h>
44 #include <pcl/point_cloud.h>
48 #include <pcl/gpu/kinfu_large_scale/tsdf_buffer.h>
50 #include <pcl/gpu/kinfu_large_scale/point_intensity.h>
65 using Ptr = shared_ptr<TsdfVolume>;
82 volume_element_size (sizeof(float)),
83 weights_element_size (sizeof(short))
86 Header (
const Eigen::Vector3i &res,
const Eigen::Vector3f &size)
89 volume_element_size (sizeof(float)),
90 weights_element_size (sizeof(short))
95 getVolumeSize ()
const {
return resolution[0] * resolution[1] * resolution[2]; };
97 friend inline std::ostream&
100 os <<
"(resolution = " << h.
resolution.transpose() <<
", volume size = " << h.
volume_size.transpose() <<
")";
109 enum { DEFAULT_CLOUD_BUFFER_SIZE = 10 * 1000 * 1000 };
133 const Eigen::Vector3f&
137 const Eigen::Vector3i&
141 const Eigen::Vector3f
235 setHeader (
const Eigen::Vector3i& resolution,
const Eigen::Vector3f& volume_size) {
236 header_ =
Header (resolution, volume_size);
237 if (volume_host_->size() != this->size())
238 pcl::console::print_warn (
"[TSDFVolume::setHeader] Header volume size (%d) doesn't fit underlying data size (%d)", volume_host_->size(), size());
244 return header_.getVolumeSize ();
253 const unsigned step = 2)
const;
256 inline const Eigen::Vector3i &
261 save (
const std::string &filename =
"tsdf_volume.dat",
bool binary =
true)
const;
265 load (
const std::string &filename,
bool binary =
true);
269 Eigen::Vector3f size_;
272 Eigen::Vector3i resolution_;
281 using VolumePtr = shared_ptr<std::vector<float> >;
282 using WeightsPtr = shared_ptr<std::vector<short> >;
285 VolumePtr volume_host_;
286 WeightsPtr weights_host_;
void reset()
Resets tsdf volume data to uninitialized state.
void convertToTsdfCloud(pcl::PointCloud< pcl::PointXYZI >::Ptr &cloud, const unsigned step=2) const
Converts volume stored on host to cloud of TSDF values.
Defines all the PCL and non-PCL macros used.
void downloadTsdf(std::vector< float > &tsdf) const
Downloads tsdf volume from GPU memory.
Defines all the PCL implemented PointT point type structures.
A point structure representing normal coordinates and the surface curvature estimate.
bool load(const std::string &filename, bool binary=true)
Loads local volume from file.
float distance(const PointT &p1, const PointT &p2)
void downloadTsdfAndWeights(std::vector< float > &tsdf, std::vector< short > &weights) const
Downloads TSDF volume and according voxel weights from GPU memory.
shared_ptr< TsdfVolume > Ptr
void downloadTsdfAndWeightsLocal() const
Downloads TSDF volume and according voxel weights from GPU memory to local CPU buffers.
std::ostream & operator<<(std::ostream &os, const float3 &v1)
DeviceArray< PointType > fetchCloud(DeviceArray< PointType > &cloud_buffer) const
Generates cloud using GPU in connected6 mode only.
void fetchCloudHost(PointCloud< PointXYZI > &cloud, bool connected26=false) const
Generates cloud using CPU (downloads volumetric representation to CPU memory)
PointCloud represents the base class in PCL for storing collections of 3D points.
void downloadTsdfLocal() const
Downloads tsdf volume from GPU memory to local CPU buffer.
bool save(const std::string &filename="tsdf_volume.dat", bool binary=true) const
Saves local volume buffer to file.
float getTsdfTruncDist() const
Returns tsdf truncation distance in meters.
std::size_t fetchSliceAsCloud(DeviceArray< PointType > &cloud_buffer_xyz, DeviceArray< float > &cloud_buffer_intensity, const tsdf_buffer *buffer, int shiftX, int shiftY, int shiftZ) const
Generates cloud using GPU in connected6 mode only.
void fetchNormals(const DeviceArray< PointType > &cloud, DeviceArray< PointType > &normals) const
Computes normals as gradient of tsdf for given points.
A point structure representing Euclidean xyz coordinates.
void setSize(const Eigen::Vector3f &size)
Sets Tsdf volume size for each dimension.
void print_warn(const char *arg1, std::size_t size)
void setTsdfTruncDist(float distance)
Sets Tsdf truncation distance.
#define PCL_MAKE_ALIGNED_OPERATOR_NEW
Macro to signal a class requires a custom allocator.
shared_ptr< const TsdfVolume > ConstPtr
void setHeader(const Eigen::Vector3i &resolution, const Eigen::Vector3f &volume_size)
Set the header for data stored on host directly.
std::size_t size() const
Returns overall number of voxels in grid stored on host.
void fetchCloudHost(PointCloud< PointType > &cloud, bool connected26=false) const
Generates cloud using CPU (downloads volumetric representation to CPU memory)
shared_ptr< PointCloud< PointT > > Ptr
TsdfVolume(const Eigen::Vector3i &resolution)
Constructor.
void releaseVolume()
Releases tsdf buffer on GPU.
const Eigen::Vector3i & getResolution() const
Returns volume resolution.
void fetchNormals(const DeviceArray< PointType > &cloud, DeviceArray< NormalType > &normals) const
Computes normals as gradient of tsdf for given points.
const Eigen::Vector3f & getSize() const
Returns volume size in meters.
const Eigen::Vector3i & gridResolution() const
Returns the voxel grid resolution.
void pushSlice(const PointCloud< PointXYZI >::Ptr existing_data_cloud, const tsdf_buffer *buffer) const
Push a point cloud of previously scanned tsdf slice to the TSDF volume.
const Eigen::Vector3f getVoxelSize() const
Returns volume voxel size in meters.
DeviceArray2D< int > data() const
Returns tsdf volume container that point to data in GPU memory.
Defines functions, macros and traits for allocating and using memory.
Structure to handle buffer addresses.
PCL_EXPORTS void print_warn(const char *format,...)
Print a warning message on stream with colors.