ugv_nav4d
Planner.hpp
Go to the documentation of this file.
1#pragma once
2#include <maps/grid/MLSMap.hpp>
3#include <base/samples/RigidBodyState.hpp>
4#include <sbpl_spline_primitives/SbplSplineMotionPrimitives.hpp>
6#include <trajectory_follower/SubTrajectory.hpp>
7#include "PlannerConfig.hpp"
8
9#include <memory>
10
11class ARAPlanner;
12
13namespace ugv_nav4d
14{
15
16class PlannerDump;
17
19{
20protected:
21 friend class PlannerDump;
23 std::shared_ptr<EnvironmentXYZTheta> env;
24 std::shared_ptr<ARAPlanner> planner;
25
26 const sbpl_spline_primitives::SplinePrimitivesConfig splinePrimitiveConfig;
28 traversability_generator3d::TraversabilityConfig traversabilityConfig;
30 std::vector<int> solutionIds;
31
32 std::function<void ()> travMapCallback;
33
35 std::vector<Eigen::Vector3d> previousStartPositions;
36
37public:
46
47 Planner(const sbpl_spline_primitives::SplinePrimitivesConfig &primitiveConfig,
48 const traversability_generator3d::TraversabilityConfig &traversabilityConfig,
49 const Mobility& mobility,
51
52 template <maps::grid::MLSConfig::update_model SurfacePatch>
53 void updateMap(const maps::grid::MLSMap<SurfacePatch>& mls)
54 {
55 std::shared_ptr<MLSBase> mlsPtr = std::make_shared<MLSBase>(mls);
56
57 if(!env)
58 {
60 }
61 else
62 {
63 env->updateMap(mlsPtr);
64 }
65 }
66
67 void updateMap(const MLSBase &mls)
68 {
69 std::shared_ptr<MLSBase> mlsPtr= std::make_shared<MLSBase>(mls);
70
71 if(!env)
72 {
74 }
75 else
76 {
77 env->updateMap(mlsPtr);
78 }
79 }
80 void setInitialPatch(const Eigen::Affine3d& body2Mls, double patchRadius);
81
82 void enablePathStatistics(bool enable);
83
88 void setTravMapCallback(const std::function<void ()> &callback);
89
90 std::vector<Motion> getMotions() const;
91
125 PLANNING_RESULT plan(const base::Time& maxTime, const base::samples::RigidBodyState& start_pose,
126 const base::samples::RigidBodyState& end_pose, std::vector<trajectory_follower::SubTrajectory>& resultTrajectory2D,
127 std::vector<trajectory_follower::SubTrajectory>& resultTrajectory3D, bool dumpOnError = false, bool dumpOnSuccess = false);
128
129 void setTravConfig(const traversability_generator3d::TraversabilityConfig& config);
130
131 void setPlannerConfig(const PlannerConfig& config);
132
133 const maps::grid::TraversabilityMap3d<traversability_generator3d::TravGenNode*> &getTraversabilityMap() const;
134
135 const maps::grid::TraversabilityMap3d<traversability_generator3d::TravGenNode*> &getObstacleMap() const;
136
137 std::shared_ptr<trajectory_follower::SubTrajectory> findTrajectoryOutOfObstacle(const Eigen::Vector3d& start, double theta,
138 const Eigen::Affine3d& ground2Body);
139
140 private:
141 bool calculateGoal(const Eigen::Vector3d& start_translation, Eigen::Vector3d& goal_translation, const double yaw) noexcept;
142 bool tryGoal(const Eigen::Vector3d& translation, const double yaw) noexcept;
143
144};
145
146}
Definition EnvironmentXYZTheta.hpp:25
traversability_generator3d::TraversabilityGenerator3d::MLGrid MLGrid
Definition EnvironmentXYZTheta.hpp:27
Definition PlannerDump.hpp:15
Definition Planner.hpp:19
std::shared_ptr< ARAPlanner > planner
Definition Planner.hpp:24
const Mobility mobility
Definition Planner.hpp:27
traversability_generator3d::TraversabilityConfig traversabilityConfig
Definition Planner.hpp:28
EnvironmentXYZTheta::MLGrid MLSBase
Definition Planner.hpp:22
void enablePathStatistics(bool enable)
Definition Planner.cpp:42
void updateMap(const MLSBase &mls)
Definition Planner.hpp:67
const maps::grid::TraversabilityMap3d< traversability_generator3d::TravGenNode * > & getTraversabilityMap() const
Definition Planner.cpp:289
std::vector< int > solutionIds
Definition Planner.hpp:30
const maps::grid::TraversabilityMap3d< traversability_generator3d::TravGenNode * > & getObstacleMap() const
Definition Planner.cpp:294
std::shared_ptr< EnvironmentXYZTheta > env
Definition Planner.hpp:23
std::vector< Eigen::Vector3d > previousStartPositions
Definition Planner.hpp:35
std::vector< Motion > getMotions() const
Definition Planner.cpp:284
PLANNING_RESULT
Definition Planner.hpp:38
@ INTERNAL_ERROR
Definition Planner.hpp:43
@ NO_MAP
Definition Planner.hpp:42
@ START_INVALID
Definition Planner.hpp:40
@ FOUND_SOLUTION
Definition Planner.hpp:44
@ GOAL_INVALID
Definition Planner.hpp:39
@ NO_SOLUTION
Definition Planner.hpp:41
void setTravConfig(const traversability_generator3d::TraversabilityConfig &config)
Definition Planner.cpp:316
PlannerConfig plannerConfig
Definition Planner.hpp:29
std::shared_ptr< trajectory_follower::SubTrajectory > findTrajectoryOutOfObstacle(const Eigen::Vector3d &start, double theta, const Eigen::Affine3d &ground2Body)
Definition Planner.cpp:299
std::function< void()> travMapCallback
Definition Planner.hpp:32
void setTravMapCallback(const std::function< void()> &callback)
Definition Planner.cpp:48
void setInitialPatch(const Eigen::Affine3d &body2Mls, double patchRadius)
Definition Planner.cpp:33
PLANNING_RESULT plan(const base::Time &maxTime, const base::samples::RigidBodyState &start_pose, const base::samples::RigidBodyState &end_pose, std::vector< trajectory_follower::SubTrajectory > &resultTrajectory2D, std::vector< trajectory_follower::SubTrajectory > &resultTrajectory3D, bool dumpOnError=false, bool dumpOnSuccess=false)
Definition Planner.cpp:138
void updateMap(const maps::grid::MLSMap< SurfacePatch > &mls)
Definition Planner.hpp:53
const sbpl_spline_primitives::SplinePrimitivesConfig splinePrimitiveConfig
Definition Planner.hpp:26
void setPlannerConfig(const PlannerConfig &config)
Definition Planner.cpp:328
Definition Dijkstra.cpp:8
Definition Mobility.hpp:12
Definition PlannerConfig.hpp:8