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 
11 class ARAPlanner;
12 
13 namespace ugv_nav4d
14 {
15 
16 class PlannerDump;
17 
18 class Planner
19 {
20 protected:
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 
37 public:
45  };
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:39
void updateMap(const MLSBase &mls)
Definition: Planner.hpp:67
const maps::grid::TraversabilityMap3d< traversability_generator3d::TravGenNode * > & getTraversabilityMap() const
Definition: Planner.cpp:292
std::vector< int > solutionIds
Definition: Planner.hpp:30
const maps::grid::TraversabilityMap3d< traversability_generator3d::TravGenNode * > & getObstacleMap() const
Definition: Planner.cpp:297
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:287
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:319
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:302
std::function< void()> travMapCallback
Definition: Planner.hpp:32
Planner(const sbpl_spline_primitives::SplinePrimitivesConfig &primitiveConfig, const traversability_generator3d::TraversabilityConfig &traversabilityConfig, const Mobility &mobility, const PlannerConfig &plannerConfig)
Definition: Planner.cpp:21
void setTravMapCallback(const std::function< void()> &callback)
Definition: Planner.cpp:45
void setInitialPatch(const Eigen::Affine3d &body2Mls, double patchRadius)
Definition: Planner.cpp:30
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:134
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:330
Definition: Dijkstra.cpp:8
Definition: Mobility.hpp:12
Definition: PlannerConfig.hpp:8