Point Cloud Library (PCL)
1.15.1
Toggle main menu visibility
Loading...
Searching...
No Matches
pcl
octree
octree_pointcloud_occupancy.h
1
/*
2
* Software License Agreement (BSD License)
3
*
4
* Point Cloud Library (PCL) - www.pointclouds.org
5
* Copyright (c) 2010-2011, Willow Garage, Inc.
6
*
7
* All rights reserved.
8
*
9
* Redistribution and use in source and binary forms, with or without
10
* modification, are permitted provided that the following conditions
11
* are met:
12
*
13
* * Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* * Redistributions in binary form must reproduce the above
16
* copyright notice, this list of conditions and the following
17
* disclaimer in the documentation and/or other materials provided
18
* with the distribution.
19
* * Neither the name of Willow Garage, Inc. nor the names of its
20
* contributors may be used to endorse or promote products derived
21
* from this software without specific prior written permission.
22
*
23
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
29
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34
* POSSIBILITY OF SUCH DAMAGE.
35
*
36
* $Id$
37
*/
38
39
#pragma once
40
41
#include <pcl/octree/octree_pointcloud.h>
42
43
namespace
pcl
{
44
namespace
octree
{
45
46
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
47
/** \brief @b Octree pointcloud occupancy class
48
* \tparam PointT type of point used in pointcloud
49
* This pointcloud octree class generate an octrees from a point cloud (zero-copy). No
50
* information is stored at the lead nodes. It can be used of occupancy checks.
51
* \note The octree pointcloud is initialized with its voxel resolution. Its bounding
52
* box is automatically adjusted or can be predefined.
53
* \ingroup octree
54
* \author Julius Kammerl (julius@kammerl.de)
55
*/
56
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
57
template
<
typename
PointT,
58
typename
LeafContainerT =
OctreeContainerEmpty
,
59
typename
BranchContainerT =
OctreeContainerEmpty
>
60
class
OctreePointCloudOccupancy
61
:
public
OctreePointCloud
<PointT,
62
LeafContainerT,
63
BranchContainerT,
64
OctreeBase<LeafContainerT, BranchContainerT>>
65
66
{
67
68
public
:
69
// public typedefs for single/double buffering
70
using
SingleBuffer
=
71
OctreePointCloudOccupancy<PointT, LeafContainerT, BranchContainerT>
;
72
using
DoubleBuffer
=
73
OctreePointCloudOccupancy<PointT, LeafContainerT, BranchContainerT>
;
74
75
// public point cloud typedefs
76
using
PointCloud
=
77
typename
OctreePointCloud<PointT, LeafContainerT, BranchContainerT>::PointCloud
;
78
using
PointCloudPtr
=
typename
OctreePointCloud
<PointT,
79
LeafContainerT,
80
BranchContainerT>
::PointCloudPtr
;
81
using
PointCloudConstPtr
=
82
typename
OctreePointCloud<PointT, LeafContainerT, BranchContainerT>
::
83
PointCloudConstPtr;
84
85
/** \brief Constructor.
86
* \param resolution_arg: octree resolution at lowest octree level
87
* */
88
OctreePointCloudOccupancy
(
const
double
resolution_arg)
89
:
OctreePointCloud
<PointT,
90
LeafContainerT,
91
BranchContainerT,
92
OctreeBase
<LeafContainerT, BranchContainerT>>(resolution_arg)
93
{}
94
95
/** \brief Empty class constructor. */
96
97
~OctreePointCloudOccupancy
()
override
=
default
;
98
99
/** \brief Set occupied voxel at point.
100
* \param point_arg: input point
101
* */
102
void
103
setOccupiedVoxelAtPoint
(
const
PointT& point_arg)
104
{
105
OctreeKey
key;
106
107
// make sure bounding box is big enough
108
this->
adoptBoundingBoxToPoint
(point_arg);
109
110
// generate key
111
this->
genOctreeKeyforPoint
(point_arg, key);
112
113
// add point to octree at key
114
this->
createLeaf
(key);
115
}
116
117
/** \brief Set occupied voxels at all points from point cloud.
118
* \param cloud_arg: input point cloud
119
* */
120
void
121
setOccupiedVoxelsAtPointsFromCloud
(
PointCloudPtr
cloud_arg)
122
{
123
for
(
const
auto
& point : *cloud_arg) {
124
// check for NaNs
125
if
(
isFinite
(point)) {
126
// set voxel at point
127
this->
setOccupiedVoxelAtPoint
(point);
128
}
129
}
130
}
131
};
132
}
// namespace octree
133
134
}
// namespace pcl
135
136
#define PCL_INSTANTIATE_OctreePointCloudOccupancy(T) \
137
template class PCL_EXPORTS pcl::octree::OctreePointCloudOccupancy<T>;
pcl::octree::OctreeBase
Octree class.
Definition
octree_base.h:62
pcl::octree::OctreeBase< OctreeContainerEmpty, OctreeContainerEmpty >::createLeaf
OctreeContainerEmpty * createLeaf(uindex_t idx_x_arg, uindex_t idx_y_arg, uindex_t idx_z_arg)
Definition
octree_base.hpp:129
pcl::octree::OctreeContainerEmpty
Octree container class that does not store any information.
Definition
octree_container.h:129
pcl::octree::OctreeKey
Octree key class
Definition
octree_key.h:54
pcl::octree::OctreePointCloud< PointT, OctreeContainerEmpty, OctreeContainerEmpty, OctreeBase< OctreeContainerEmpty, OctreeContainerEmpty > >::genOctreeKeyforPoint
void genOctreeKeyforPoint(const PointT &point_arg, OctreeKey &key_arg) const
Definition
octree_pointcloud.hpp:766
pcl::octree::OctreePointCloud< PointT, OctreeContainerEmpty, OctreeContainerEmpty, OctreeBase< OctreeContainerEmpty, OctreeContainerEmpty > >::OctreePointCloud
OctreePointCloud(const double resolution_arg)
Definition
octree_pointcloud.hpp:54
pcl::octree::OctreePointCloud< PointT, OctreeContainerEmpty, OctreeContainerEmpty, OctreeBase< OctreeContainerEmpty, OctreeContainerEmpty > >::adoptBoundingBoxToPoint
void adoptBoundingBoxToPoint(const PointT &point_idx_arg)
Definition
octree_pointcloud.hpp:493
pcl::octree::OctreePointCloud::PointCloud
pcl::PointCloud< PointT > PointCloud
Definition
octree_pointcloud.h:88
pcl::octree::OctreePointCloudOccupancy::setOccupiedVoxelAtPoint
void setOccupiedVoxelAtPoint(const PointT &point_arg)
Set occupied voxel at point.
Definition
octree_pointcloud_occupancy.h:103
pcl::octree::OctreePointCloudOccupancy::OctreePointCloudOccupancy
OctreePointCloudOccupancy(const double resolution_arg)
Constructor.
Definition
octree_pointcloud_occupancy.h:88
pcl::octree::OctreePointCloudOccupancy::SingleBuffer
OctreePointCloudOccupancy< PointT, LeafContainerT, BranchContainerT > SingleBuffer
Definition
octree_pointcloud_occupancy.h:70
pcl::octree::OctreePointCloudOccupancy::~OctreePointCloudOccupancy
~OctreePointCloudOccupancy() override=default
Empty class constructor.
pcl::octree::OctreePointCloudOccupancy< PointT, LeafContainerT, BranchContainerT >::PointCloudPtr
typename OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::PointCloudPtr PointCloudPtr
Definition
octree_pointcloud_occupancy.h:78
pcl::octree::OctreePointCloudOccupancy< PointT, LeafContainerT, BranchContainerT >::PointCloudConstPtr
typename OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::PointCloudConstPtr PointCloudConstPtr
Definition
octree_pointcloud_occupancy.h:81
pcl::octree::OctreePointCloudOccupancy< PointT, LeafContainerT, BranchContainerT >::PointCloud
typename OctreePointCloud< PointT, LeafContainerT, BranchContainerT >::PointCloud PointCloud
Definition
octree_pointcloud_occupancy.h:76
pcl::octree::OctreePointCloudOccupancy< PointT, LeafContainerT, BranchContainerT >::DoubleBuffer
OctreePointCloudOccupancy< PointT, LeafContainerT, BranchContainerT > DoubleBuffer
Definition
octree_pointcloud_occupancy.h:72
pcl::octree::OctreePointCloudOccupancy::setOccupiedVoxelsAtPointsFromCloud
void setOccupiedVoxelsAtPointsFromCloud(PointCloudPtr cloud_arg)
Set occupied voxels at all points from point cloud.
Definition
octree_pointcloud_occupancy.h:121
pcl::octree
Definition
color_coding.h:47
pcl
Definition
convolution.h:46
pcl::isFinite
bool isFinite(const PointT &pt)
Tests if the 3D components of a point are all finite param[in] pt point to be tested return true if f...
Definition
point_tests.h:55