5#include <gtsam_points/ann/fast_occupancy_grid.hpp>
7#include <gtsam_points/types/frame_traits.hpp>
8#include <gtsam_points/util/fast_floor.hpp>
9#include <gtsam_points/util/vector3i_hash.hpp>
10#include <gtsam_points/types/point_cloud_cpu.hpp>
12namespace gtsam_points {
14template <
typename Po
intCloud>
16 for (
int i = 0; i < frame::size(points); i++) {
17 const auto& pt = frame::point(points, i);
18 const Eigen::Array4i global_coord = fast_floor((pose * pt) * inv_resolution) + coord_offset;
22 const std::uint64_t block_index = calc_index(block_coord);
23 const std::uint64_t block_loc = find_or_insert_block(block_index);
24 blocks[block_loc].second.set_occupied(cell_coord.head<3>());
28template <
typename Po
intCloud>
31 for (
int i = 0; i < frame::size(points); i++) {
32 const auto& pt = frame::point(points, i);
33 const Eigen::Array4i global_coord = fast_floor((pose * pt) * inv_resolution) + coord_offset;
36 const std::uint64_t block_index = calc_index(block_coord);
37 const std::uint64_t block_loc = find_block(block_index);
38 if (block_loc == INVALID_INDEX) {
43 num_overlap += blocks[block_loc].second.occupied(cell_coord.head<3>());
49template <
typename Po
intCloud>
51 return calc_overlap(points, pose) /
static_cast<double>(frame::size(points));
54template <
typename Po
intCloud>
56 std::vector<unsigned char> overlaps(frame::size(points), 0);
58 for (
int i = 0; i < frame::size(points); i++) {
59 const auto& pt = frame::point(points, i);
60 const Eigen::Array4i global_coord = fast_floor((pose * pt) * inv_resolution) + coord_offset;
63 const std::uint64_t block_index = calc_index(block_coord);
64 const std::uint64_t block_loc = find_block(block_index);
65 if (block_loc == INVALID_INDEX) {
70 overlaps[i] = blocks[block_loc].second.occupied(cell_coord.head<3>());
void insert(const PointCloud &points, const Eigen::Isometry3d &pose=Eigen::Isometry3d::Identity())
Insert points into the grid.
Definition fast_occupancy_grid_impl.hpp:15
int calc_overlap(const PointCloud &points, const Eigen::Isometry3d &pose=Eigen::Isometry3d::Identity()) const
Calculate the number of points overlapping with the grid.
Definition fast_occupancy_grid_impl.hpp:29
std::vector< unsigned char > get_overlaps(const PointCloud &points, const Eigen::Isometry3d &pose=Eigen::Isometry3d::Identity()) const
Get the overlap status of each point in the point cloud.
Definition fast_occupancy_grid_impl.hpp:55
double calc_overlap_rate(const PointCloud &points, const Eigen::Isometry3d &pose=Eigen::Isometry3d::Identity()) const
Calculate the overlap ratio of the points with the grid.
Definition fast_occupancy_grid_impl.hpp:50
static constexpr int stride
Size of the block in each dimension.
Definition fast_occupancy_grid.hpp:17
Standard point cloud class that holds only pointers to point attributes.
Definition point_cloud.hpp:19