7#ifndef SE_RAY_INTEGRATOR_HPP
8#define SE_RAY_INTEGRATOR_HPP
12#include <unordered_set>
18template<
typename MapT,
typename SensorT>
23 const Eigen::Vector3f& ,
24 const Eigen::Isometry3f& ,
26 std::set<const OctantBase*>*
const ){};
28 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
31template<se::Colour ColB, se::Semantics SemB,
int BlockSize,
typename SensorT>
38 typedef typename MapType::OctreeType::NodeType
NodeType;
39 typedef typename MapType::OctreeType::BlockType
BlockType;
46 struct RayIntegratorConfig {
48 sigma_min(map.getDataConfig().field.sigma_min_factor * map.getRes()),
49 sigma_max(map.getDataConfig().field.sigma_max_factor * map.getRes()),
50 tau_min(map.getDataConfig().field.tau_min_factor * map.getRes()),
51 tau_max(map.getDataConfig().field.tau_max_factor * map.getRes())
73 const Eigen::Vector3f&
ray,
74 const Eigen::Isometry3f&
T_WS,
89 const Eigen::Isometry3f&
T_WS,
118 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
132 template<
class SensorTDummy = SensorT>
133 typename std::enable_if_t<std::is_same<SensorTDummy, se::LeicaLidar>::value,
void>
153 std::vector<std::set<se::OctantBase*>> node_set_;
154 std::vector<se::OctantBase*> updated_blocks_vector_;
155 std::set<se::OctantBase*> updated_blocks_set_;
156 std::set<const se::OctantBase*>* updated_octants_ =
nullptr;
157 RayIntegratorConfig config_;
159 Eigen::Isometry3f T_SW_;
160 Eigen::Vector3f ray_;
161 Eigen::Vector3i last_visited_voxel_;
163 const float map_res_;
165 int free_space_scale_ = 0;
166 int computed_integration_scale_ = 0;
170 float ray_dist_ = 0.;
172 float three_sigma_ = 0.;
176#include "impl/ray_integrator_impl.hpp"
The base class of all octants (se::Node and se::Block) in an se::Octree.
Definition octant.hpp:19
MapType::OctreeType OctreeType
Definition ray_integrator.hpp:37
MapType::DataType DataType
Definition ray_integrator.hpp:36
bool resetIntegrator(const Eigen::Vector3f &ray, const Eigen::Isometry3f &T_WS, const timestamp_t timestamp, bool skip_check=false)
Reset ray, pose and timestamp for the integrator.
void propagateBlocksToCoarsestScale()
se::RayState computeVariance(const float ray_step_depth)
Return a conservative measure of the expected variance of a sensor model inside a voxel given its pos...
MapType::OctreeType::NodeType NodeType
Definition ray_integrator.hpp:38
RayIntegrator(MapType &map, const SensorT &sensor, const Eigen::Vector3f &ray, const Eigen::Isometry3f &T_WS, const timestamp_t timestamp, std::set< const OctantBase * > *const updated_octants=nullptr)
Setup the single ray carver.
Map< Data< se::Field::Occupancy, ColB, SemB >, se::Res::Multi, BlockSize > MapType
Definition ray_integrator.hpp:35
MapType::OctreeType::BlockType BlockType
Definition ray_integrator.hpp:39
void propagateToRoot()
Update Operations.
void operator()()
Allocate and update along the ray using a step size depending on the chosen resolution.
Definition ray_integrator.hpp:19
RayIntegrator(MapT &, const SensorT &, const Eigen::Vector3f &, const Eigen::Isometry3f &, const timestamp_t, std::set< const OctantBase * > *const)
Definition ray_integrator.hpp:21
Helper wrapper to allocate and de-allocate octants in the octree.
Definition bounded_vector.hpp:14
RayState
Definition ray_integrator.hpp:16
const float sigma_min
Definition ray_integrator.hpp:55
const float sigma_max
Definition ray_integrator.hpp:56
const float tau_min
Definition ray_integrator.hpp:57
RayIntegratorConfig(const MapType &map)
Definition ray_integrator.hpp:47
const float tau_max
Definition ray_integrator.hpp:58