3#include <eigen3/Eigen/Geometry>
4#include <unordered_set>
11template<
class Functor>
36 [[nodiscard]]
static constexpr int32_t
logods(
float prob)
38 return int32_t(1e6 * std::log(
prob / (1.0 -
prob)));
42 [[nodiscard]]
static constexpr float prob(int32_t logods_fixed)
44 float logods = float(logods_fixed) * 1e-6;
45 return 1.0 - 1.0 / (1.0 + std::exp(
logods));
97 template<
typename Po
intT,
typename Allocator>
99 const std::vector<PointT, Allocator> & points,
const PointT & origin,
double max_range);
117 [[nodiscard]]
float queryProbability(
const Eigen::Vector3f & p_world)
const;
124 template<
typename Po
intT>
127 thread_local std::vector<Bonxai::CoordT> coords;
130 for (
const auto & coord : coords) {
131 const auto p = _grid.coordToPos(coord);
132 points.emplace_back(p.x, p.y, p.z);
139 uint8_t _update_count = 1;
142 std::vector<CoordT> _miss_coords;
143 std::vector<CoordT> _hit_coords;
147 void updateFreeCells(
const Vector3D & origin);
152template<
typename Po
intT,
typename Alloc>
154 const std::vector<PointT, Alloc> & points,
const PointT & origin,
double max_range)
157 const double max_range_sqr = max_range * max_range;
158 for (
const auto & point : points) {
161 const double squared_norm = vect.squaredNorm();
163 if (squared_norm >= max_range_sqr) {
165 const Vector3D new_point = from + ((vect / std::sqrt(squared_norm)) * max_range);
171 updateFreeCells(from);
174template<
class Functor>
177 if (key_origin == key_end) {
180 if (!func(key_origin)) {
185 CoordT coord = key_origin;
186 CoordT delta = (key_end - coord);
187 const CoordT step = {delta.
x < 0 ? -1 : 1, delta.
y < 0 ? -1 : 1, delta.
z < 0 ? -1 : 1};
190 delta.
x < 0 ? -delta.
x : delta.
x, delta.
y < 0 ? -delta.
y : delta.
y,
191 delta.
z < 0 ? -delta.
z : delta.
z};
193 const int max = std::max(std::max(delta.
x, delta.
y), delta.
z);
196 for (
int i = 0; i < max - 1; ++i) {
198 error = error + delta;
200 if ((error.
x << 1) >= max) {
204 if ((error.
y << 1) >= max) {
208 if ((error.
z << 1) >= max) {
const Options & options() const
Definition probabilistic_map.cpp:25
void getOccupiedVoxels(std::vector< PointT > &points)
Definition probabilistic_map.hpp:125
static constexpr int32_t logods(float prob)
Compute the logds, but return the result as an integer, The real number is represented as a fixed pre...
Definition probabilistic_map.hpp:36
void getOccupiedVoxels(std::vector< Bonxai::CoordT > &coords)
static const int32_t UnknownProbability
Definition probabilistic_map.hpp:72
void addHitPoint(const Vector3D &point)
Definition probabilistic_map.cpp:35
void getFreeVoxels(std::vector< Bonxai::CoordT > &coords)
Definition probabilistic_map.cpp:150
Eigen::Vector3d Vector3D
Definition probabilistic_map.hpp:31
VoxelGrid< CellT > & grid()
Definition probabilistic_map.cpp:11
float queryProbability(const Eigen::Vector3f &p_world) const
Definition probabilistic_map.cpp:97
bool isUnknown(const Bonxai::CoordT &coord) const
Definition probabilistic_map.cpp:71
void setOptions(const Options &options)
Definition probabilistic_map.cpp:30
ProbabilisticMap(double resolution)
Definition probabilistic_map.cpp:16
static constexpr float prob(int32_t logods_fixed)
Expect the fixed comma value returned by logods().
Definition probabilistic_map.hpp:42
bool isOccupied(const Bonxai::CoordT &coord) const
Definition probabilistic_map.cpp:63
void insertPointCloud(const std::vector< PointT, Allocator > &points, const PointT &origin, double max_range)
insertPointCloud will update the probability map with a new set of detections.
void addMissPoint(const Vector3D &point)
Definition probabilistic_map.cpp:49
bool isFree(const Bonxai::CoordT &coord) const
Definition probabilistic_map.cpp:79
Class to be used to set and get values of a cell of the Grid.
Definition bonxai.hpp:276
Definition bonxai.hpp:124
void RayIterator(const CoordT &key_origin, const CoordT &key_end, const Functor &func)
Definition probabilistic_map.hpp:175
void ComputeRay(const CoordT &key_origin, const CoordT &key_end, std::vector< CoordT > &ray)
Definition probabilistic_map.hpp:14
PointOut ConvertPoint(const PointIn &v)
Definition grid_coord.hpp:143
Definition grid_coord.hpp:67
int32_t z
Definition grid_coord.hpp:70
int32_t y
Definition grid_coord.hpp:69
int32_t x
Definition grid_coord.hpp:68
CellT()
Definition probabilistic_map.hpp:55
int32_t probability_log
Definition probabilistic_map.hpp:53
int32_t update_id
Definition probabilistic_map.hpp:51
These default values are the same as OctoMap.
Definition probabilistic_map.hpp:62
int32_t prob_hit_log
Definition probabilistic_map.hpp:64
int32_t prob_miss_log
Definition probabilistic_map.hpp:63
int32_t clamp_max_log
Definition probabilistic_map.hpp:67
int32_t occupancy_threshold_log
Definition probabilistic_map.hpp:69
int32_t clamp_min_log
Definition probabilistic_map.hpp:66