ugv_nav4d
Planner.hpp
Go to the documentation of this file.
1#pragma once
2#include <base/samples/RigidBodyState.hpp>
3#include <sbpl_spline_primitives/SbplSplineMotionPrimitives.hpp>
5#include <trajectory_follower/SubTrajectory.hpp>
6#include "PlannerConfig.hpp"
7
8#include <memory>
9
10class ARAPlanner;
11
12namespace ugv_nav4d
13{
14
15class PlannerDump;
16
18{
19protected:
20 friend class PlannerDump;
21 std::shared_ptr<EnvironmentXYZTheta> env;
22 std::shared_ptr<ARAPlanner> planner;
23
24 const sbpl_spline_primitives::SplinePrimitivesConfig splinePrimitiveConfig;
26 traversability_generator3d::TraversabilityConfig traversabilityConfig;
28 std::vector<int> solutionIds;
29
31 std::vector<Eigen::Vector3d> previousStartPositions;
32
33public:
43
44 Planner(const sbpl_spline_primitives::SplinePrimitivesConfig &primitiveConfig,
45 const traversability_generator3d::TraversabilityConfig &traversabilityConfig,
46 const Mobility& mobility,
48
49 void updateMap(const traversability_generator3d::TravMap3d &map)
50 {
51 std::shared_ptr<traversability_generator3d::TravMap3d> mapPtr = std::make_shared<traversability_generator3d::TravMap3d>(map);
52
53 if(!env)
54 {
56 env->setCorridorWidth(plannerConfig.corridorWidth);
57 env->setGoalOrientationMargin(plannerConfig.goalOrientationMargin);
58 env->setGoalDistanceMargin(plannerConfig.goalDistanceMargin);
59 }
60 else
61 {
62 env->updateMap(mapPtr);
63 env->setCorridorWidth(plannerConfig.corridorWidth);
64 env->setGoalOrientationMargin(plannerConfig.goalOrientationMargin);
65 env->setGoalDistanceMargin(plannerConfig.goalDistanceMargin);
66 }
67 }
68
69 void enablePathStatistics(bool enable);
70
74 bool isEnvironmentInitialized() const { return static_cast<bool>(env); }
75
76 std::vector<Motion> getMotions() const;
77
111 PLANNING_RESULT plan(const base::Time& maxTime, const base::samples::RigidBodyState& start_pose,
112 const base::samples::RigidBodyState& end_pose, std::vector<trajectory_follower::SubTrajectory>& resultTrajectory2D,
113 std::vector<trajectory_follower::SubTrajectory>& resultTrajectory3D, bool dumpOnError = false, bool dumpOnSuccess = false);
114
115 void setTravConfig(const traversability_generator3d::TraversabilityConfig& config);
116
117 void setPlannerConfig(const PlannerConfig& config);
118
119 const std::shared_ptr<const traversability_generator3d::TravMap3d> getTraversabilityMap() const;
120 std::shared_ptr<trajectory_follower::SubTrajectory> findTrajectoryOutOfObstacle(const Eigen::Vector3d& start, double theta,
121 const Eigen::Affine3d& ground2Body, bool setZToZero);
122
123 private:
124 bool calculateGoal(Eigen::Vector3d& goal_translation, const double yaw);
125 bool tryGoal(const Eigen::Vector3d& translation, const double yaw);
126
127};
128
129}
Definition EnvironmentXYZTheta.hpp:27
Definition PlannerDump.hpp:17
Definition Planner.hpp:18
std::shared_ptr< ARAPlanner > planner
Definition Planner.hpp:22
const Mobility mobility
Definition Planner.hpp:25
traversability_generator3d::TraversabilityConfig traversabilityConfig
Definition Planner.hpp:26
void enablePathStatistics(bool enable)
Definition Planner.cpp:36
std::vector< int > solutionIds
Definition Planner.hpp:28
const std::shared_ptr< const traversability_generator3d::TravMap3d > getTraversabilityMap() const
Definition Planner.cpp:338
std::shared_ptr< EnvironmentXYZTheta > env
Definition Planner.hpp:21
std::vector< Eigen::Vector3d > previousStartPositions
Definition Planner.hpp:31
std::vector< Motion > getMotions() const
Definition Planner.cpp:330
PLANNING_RESULT
Definition Planner.hpp:34
@ INTERNAL_ERROR
Definition Planner.hpp:39
@ NO_MAP
Definition Planner.hpp:38
@ START_INVALID
Definition Planner.hpp:36
@ TIMEOUT
Definition Planner.hpp:41
@ FOUND_SOLUTION
Definition Planner.hpp:40
@ GOAL_INVALID
Definition Planner.hpp:35
@ NO_SOLUTION
Definition Planner.hpp:37
void setTravConfig(const traversability_generator3d::TraversabilityConfig &config)
Definition Planner.cpp:364
PlannerConfig plannerConfig
Definition Planner.hpp:27
std::shared_ptr< trajectory_follower::SubTrajectory > findTrajectoryOutOfObstacle(const Eigen::Vector3d &start, double theta, const Eigen::Affine3d &ground2Body, bool setZToZero)
Definition Planner.cpp:346
bool isEnvironmentInitialized() const
Definition Planner.hpp:74
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:103
const sbpl_spline_primitives::SplinePrimitivesConfig splinePrimitiveConfig
Definition Planner.hpp:24
void updateMap(const traversability_generator3d::TravMap3d &map)
Definition Planner.hpp:49
void setPlannerConfig(const PlannerConfig &config)
Definition Planner.cpp:379
Definition ConfigLoader.hpp:9
Definition Mobility.hpp:12
Definition PlannerConfig.hpp:8
double goalDistanceMargin
Definition PlannerConfig.hpp:35
double corridorWidth
Definition PlannerConfig.hpp:25
double goalOrientationMargin
Definition PlannerConfig.hpp:31