3#include <maps/grid/MLSMap.hpp>
6#include <unordered_map>
11#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
12#include <CGAL/Polyhedron_3.h>
13#include <CGAL/convex_hull_3.h>
14#include <CGAL/Polygon_mesh_processing/intersection.h>
17typedef CGAL::Exact_predicates_inexact_constructions_kernel
K;
29 typedef maps::grid::MLSMapSloped
MLGrid;
33 typedef MLGrid::CellType
Cell;
36 typedef MLGrid::PatchType
Patch;
47 maps::grid::TraversabilityMap3d<TravGenNode*>
trMap;
48 maps::grid::TraversabilityMap3d<SoilNode*>
soilMap;
56 double computeSlope(
const Eigen::Hyperplane<
double,
int(3) >& plane)
const;
74 const Eigen::Hyperplane<double, 3>& plane,
double yaw);
80#ifdef ENABLE_DEBUG_DRAWINGS
85 const maps::grid::SurfacePatch<maps::grid::MLSConfig::SLOPE>*
p,
86 const Eigen::Vector3d& pos);
98 const maps::grid::SurfacePatch<maps::grid::MLSConfig::SLOPE>*
patch;
110 const std::vector<YawCheckPatch>&
patches);
242 void setMLSGrid(std::shared_ptr<MLGrid> &grid);
248 const maps::grid::TraversabilityMap3d<SoilNode *> &
getSoilMap()
const;
K::Point_3 Point_3
Definition TraversabilityGenerator3d.hpp:19
CGAL::Exact_predicates_inexact_constructions_kernel K
Definition TraversabilityGenerator3d.hpp:17
CGAL::Polyhedron_3< K > Polyhedron_3
Definition TraversabilityGenerator3d.hpp:18
Definition SoilSample.hpp:24
Definition TraversabilityConfig.hpp:17
Definition TraversabilityGenerator3d.hpp:25
void expandAll(const std::vector< Eigen::Vector3d > &positions)
Definition TraversabilityGenerator3d.cpp:1102
bool finalizeNode(TravGenNode *node, NodeClassification classification, PrefitCache *prefits)
Definition TraversabilityGenerator3d.cpp:1659
SoilNode * findMatchingSoilPatchAt(maps::grid::Index idx, const double curHeight) const
Definition TraversabilityGenerator3d.cpp:2078
TraversabilityConfig config
Definition TraversabilityGenerator3d.hpp:198
std::unordered_map< uint64_t, PrefitEntry > PrefitCache
Definition TraversabilityGenerator3d.hpp:162
void clearSoilMap()
Definition TraversabilityGenerator3d.cpp:1581
NodeClassification
Definition TraversabilityGenerator3d.hpp:125
@ Unknown
node type is UNKNOWN: skip
@ Traversable
passed all checks
@ PreexistingObstacle
node was already OBSTACLE: seed inflation only
@ Obstacle
failed slope / step-height / incline checks
bool computePlaneRansac(TravGenNode &node)
Definition TraversabilityGenerator3d.cpp:209
bool getConnectedPatch(const maps::grid::Index &idx, double height, const Patch *&patch)
MLGrid::PatchType Patch
Definition TraversabilityGenerator3d.hpp:36
void setMLSGrid(std::shared_ptr< MLGrid > &grid)
Definition TraversabilityGenerator3d.cpp:1547
const maps::grid::TraversabilityMap3d< SoilNode * > & getSoilMap() const
Definition TraversabilityGenerator3d.cpp:198
void inflateObstacles()
Definition TraversabilityGenerator3d.cpp:1360
std::vector< TravGenNode * > obstacleNodesGrowList
Definition TraversabilityGenerator3d.hpp:45
std::vector< YawCheckPatch > collectYawCheckPatches(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:864
SoilNode * generateStartSoilNode(const Eigen::Vector3d &startPos)
Definition TraversabilityGenerator3d.cpp:1627
int currentSoilNodeId
Definition TraversabilityGenerator3d.hpp:51
void setSoilType(SoilNode *node, SoilType soilType)
Definition TraversabilityGenerator3d.cpp:2101
void clearTrMap()
Definition TraversabilityGenerator3d.cpp:1568
void setInitialPatch(const Eigen::Affine3d &ground2Mls, double patchRadius)
Definition TraversabilityGenerator3d.cpp:182
void updateSoilInformation()
Definition TraversabilityGenerator3d.cpp:2015
int getNumNodes() const
Definition TraversabilityGenerator3d.cpp:203
double computeSlope(const Eigen::Hyperplane< double, int(3) > &plane) const
Definition TraversabilityGenerator3d.cpp:456
double patchRadius
Definition TraversabilityGenerator3d.hpp:43
NeighborRequest computeNeighborRequest(const TravGenNode *node, const maps::grid::Index &idxS, maps::grid::Index &outIdx, double &outHeight) const
Definition TraversabilityGenerator3d.cpp:1860
maps::grid::MLSMapSloped MLGrid
Definition TraversabilityGenerator3d.hpp:29
Eigen::Affine3d initialPatch2Mls
Definition TraversabilityGenerator3d.hpp:42
maps::grid::TraversabilityMap3d< TravGenNode * > trMap
Definition TraversabilityGenerator3d.hpp:47
bool checkStepHeightAABB(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:676
bool checkForFrontier(const TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:476
void addConnectedPatches(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:1902
SoilNode * createSoilPatchAt(maps::grid::Index idx, const double curHeight)
Definition TraversabilityGenerator3d.cpp:2002
virtual bool expandNode(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:1654
TravGenNode * finishPatchNode(const PrefitPatch &prefit, const maps::grid::Index &idx)
Definition TraversabilityGenerator3d.cpp:1824
Polyhedron_3 generatePolyhedron(const std::vector< Eigen::Vector3d > &points)
Definition TraversabilityGenerator3d.cpp:152
Polyhedron_3 createPolyhedronFromSurfacePatch(const maps::grid::SurfacePatch< maps::grid::MLSConfig::SLOPE > *p, const Eigen::Vector3d &position)
Definition TraversabilityGenerator3d.cpp:789
bool checkStepHeightOBB(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:716
virtual ~TraversabilityGenerator3d()
Definition TraversabilityGenerator3d.cpp:176
BodyHull buildBodyPolyhedron(const Eigen::Vector3d &nodePos, const Eigen::Hyperplane< double, 3 > &plane, double yaw)
Definition TraversabilityGenerator3d.cpp:506
bool checkCollisionForYaw(TravGenNode *node, double yaw, const std::vector< YawCheckPatch > &patches)
Definition TraversabilityGenerator3d.cpp:898
maps::grid::TraversabilityMap3d< SoilNode * > soilMap
Definition TraversabilityGenerator3d.hpp:48
PrefitPatch buildPatchNodeAt(const maps::grid::Index &idx, const double curHeight)
Definition TraversabilityGenerator3d.cpp:1744
void inflateFrontiers()
Definition TraversabilityGenerator3d.cpp:1041
MLGrid::View View
Definition TraversabilityGenerator3d.hpp:34
const maps::grid::TraversabilityMap3d< TravGenNode * > & getTraversabilityMap() const
Definition TraversabilityGenerator3d.cpp:193
bool computeSafeOrientations(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:983
TravGenNode * findMatchingTraversabilityPatchAt(maps::grid::Index idx, const double curHeight) const
Definition TraversabilityGenerator3d.cpp:1838
bool addInitialPatch
Definition TraversabilityGenerator3d.hpp:41
View::CellType ViewCell
Definition TraversabilityGenerator3d.hpp:35
virtual TravGenNode * generateStartNode(const Eigen::Vector3d &startPos)
Definition TraversabilityGenerator3d.cpp:1594
Eigen::Vector3d computeSlopeDirection(const Eigen::Hyperplane< double, int(3) > &plane) const
Definition TraversabilityGenerator3d.cpp:464
std::shared_ptr< MLGrid > mlsGrid
Definition TraversabilityGenerator3d.hpp:40
double gaussian2D(double x, double y, double meanX, double meanY, double sigmaX, double sigmaY)
Definition TraversabilityGenerator3d.cpp:2106
bool computeAllowedOrientations(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:375
Eigen::AlignedBox3d rotationSafeSearchBox(const Eigen::Vector3d &nodePos) const
Definition TraversabilityGenerator3d.cpp:493
int currentNodeId
Definition TraversabilityGenerator3d.hpp:50
TravGenNode * createTraversabilityPatchAt(maps::grid::Index idx, const double curHeight)
Definition TraversabilityGenerator3d.cpp:1833
NodeClassification classifyNode(TravGenNode *node)
Definition TraversabilityGenerator3d.cpp:1706
NeighborRequest
Definition TraversabilityGenerator3d.hpp:172
std::vector< TravGenNode * > frontierNodesGrowList
Definition TraversabilityGenerator3d.hpp:53
void setConfig(const TraversabilityConfig &config)
Definition TraversabilityGenerator3d.cpp:1077
static double interpolate(double x, double x0, double y0, double x1, double y1)
Definition TraversabilityGenerator3d.cpp:449
bool addSoilNode(const SoilSample &sample)
Definition TraversabilityGenerator3d.cpp:2118
void addInitialPatchToMLS()
Definition TraversabilityGenerator3d.cpp:1492
MLGrid::CellType Cell
Definition TraversabilityGenerator3d.hpp:33
Definition SoilNode.hpp:9
maps::grid::TraversabilityNode< TravGenTrackingData > TravGenNode
Definition TravGenNode.hpp:135
maps::grid::TraversabilityNode< SoilData > SoilNode
Definition SoilNode.hpp:76
SoilType
Definition SoilSample.hpp:9
Definition TraversabilityGenerator3d.hpp:67
Eigen::Vector3d heightOffset
Definition TraversabilityGenerator3d.hpp:71
Eigen::Vector3d planeNormal
Definition TraversabilityGenerator3d.hpp:69
Polyhedron_3 poly
Definition TraversabilityGenerator3d.hpp:68
std::vector< Eigen::Vector3d > bottomCorners
Definition TraversabilityGenerator3d.hpp:70
Definition TraversabilityGenerator3d.hpp:157
PrefitPatch patch
Definition TraversabilityGenerator3d.hpp:160
double requestHeight
Definition TraversabilityGenerator3d.hpp:159
maps::grid::Index idx
Definition TraversabilityGenerator3d.hpp:158
Definition TraversabilityGenerator3d.hpp:142
TravGenNode * node
Definition TraversabilityGenerator3d.hpp:143
Definition TraversabilityGenerator3d.hpp:94
Eigen::Vector3d pos
Definition TraversabilityGenerator3d.hpp:99
Polyhedron_3 poly
Definition TraversabilityGenerator3d.hpp:95
const maps::grid::SurfacePatch< maps::grid::MLSConfig::SLOPE > * patch
Definition TraversabilityGenerator3d.hpp:98
Eigen::Vector2d cellXY
Definition TraversabilityGenerator3d.hpp:96
double zMax
Definition TraversabilityGenerator3d.hpp:97