Loading...
Searching...
No Matches
MotionBenchmakerDemo.h
1#ifndef MOTION_BENCHMAKER_DEMO_H_
2#define MOTION_BENCHMAKER_DEMO_H_
3
4#include <string>
5#include <vector>
6#include <map>
7#include <memory>
8#include <chrono>
9
10#include <ompl/base/SpaceInformation.h>
11#include <ompl/base/Planner.h>
12#include <ompl/geometric/SimpleSetup.h>
13#include <boost/property_tree/ptree.hpp>
14#include <vamp/collision/environment.hh>
15
20{
21 bool solved = false;
22 double planningTime = 0.0;
23 double simplificationTime = 0.0;
24 unsigned int planningIterations = 0;
25 unsigned int pathVertices = 0;
26 double pathCost = 0.0;
27};
28
33{
34public:
42 MotionBenchmakerDemo(const std::string &robotName, const std::string &problemFile,
43 const std::string &plannerName = "RRTConnect");
44
54 std::vector<PlanningResult> benchmarkProblem(const std::string &problemName, unsigned int numTrials = 1,
55 double timeoutSeconds = 5.0);
56
66 std::map<std::string, std::vector<PlanningResult>> benchmarkAll(unsigned int numTrials = 1,
67 double timeoutSeconds = 5.0,
68 bool print_failures = false);
69
73 const std::vector<std::string> &getProblemNames() const
74 {
75 return problemNames_;
76 }
77
81 static void printStatistics(const std::string &problemName, const std::vector<PlanningResult> &results);
82
83private:
84 std::string robotName_;
85 std::string plannerName_;
86 std::vector<std::string> problemNames_;
87 std::map<std::string, std::vector<boost::property_tree::ptree>> problems_;
88 std::shared_ptr<ompl::base::StateSpace> space_;
89 std::shared_ptr<ompl::geometric::SimpleSetup> ss_;
90
91 // Environment for collision checking
92 using Environment = vamp::collision::Environment<vamp::FloatVector<vamp::FloatVectorWidth>>;
93 std::shared_ptr<Environment> currentEnv_;
94
98 void loadProblemsFromJSON(const std::string &filename);
99
103 void initializeStateSpace();
104
108 bool setupProblem(const std::string &problemName, const boost::property_tree::ptree &problemData);
109
113 PlanningResult solveInstance(const std::string &problemName, const boost::property_tree::ptree &problemData,
114 double timeoutSeconds);
118 PlanningResult benchmarkInstance(const std::string &problemName, const boost::property_tree::ptree &problemData,
119 unsigned int benchmarkTrials, double timeoutSeconds);
120
124 std::shared_ptr<ompl::base::Planner> createPlanner(const std::shared_ptr<ompl::base::SpaceInformation> &si) const;
125};
126
127#endif
std::map< std::string, std::vector< PlanningResult > > benchmarkAll(unsigned int numTrials=1, double timeoutSeconds=5.0, bool print_failures=false)
Run benchmarks on all problems in the loaded file.
static void printStatistics(const std::string &problemName, const std::vector< PlanningResult > &results)
Print summary statistics for a set of results.
const std::vector< std::string > & getProblemNames() const
Get the list of available problem names.
MotionBenchmakerDemo(const std::string &robotName, const std::string &problemFile, const std::string &plannerName="RRTConnect")
Initialize with a robot type and JSON problem file.
std::vector< PlanningResult > benchmarkProblem(const std::string &problemName, unsigned int numTrials=1, double timeoutSeconds=5.0)
Run a benchmark on a specific problem.
Results from a single planning trial.