wbc
Scene.hpp
Go to the documentation of this file.
1#ifndef WBC_CORE_SCENE_HPP
2#define WBC_CORE_SCENE_HPP
3
4#include "Task.hpp"
5#include "Constraint.hpp"
7#include "RobotModel.hpp"
8#include "QPSolver.hpp"
10
11namespace wbc{
12
16class Scene{
17protected:
20 Eigen::VectorXd solver_output;
21 std::vector<types::Wrench> contact_wrenches;
22
23public:
25 ~Scene();
26
31 virtual bool configure(const std::vector<TaskPtr> &tasks) = 0;
32
37 virtual const HierarchicalQP& update() = 0;
38
43 virtual const types::JointCommand& solve(const HierarchicalQP& hqp) = 0;
44
49
54
58 const Eigen::VectorXd& getSolverOutputRaw() const { return solver_output; }
59
63 const std::vector<types::Wrench>& getContactWrenches(){return contact_wrenches;}
64};
65
66typedef std::shared_ptr<Scene> ScenePtr;
67
68template<typename T,typename RobotModelPtr,typename QPSolverPtr> Scene* createT(RobotModelPtr robot_model, QPSolverPtr solver, const double dt){return new T(robot_model,solver,dt);}
69
71 typedef std::map<std::string, Scene*(*)(RobotModelPtr, QPSolverPtr, double)> SceneMap;
72
73 static Scene *createInstance(const std::string& name, RobotModelPtr robot_model, QPSolverPtr solver, const double dt) {
74 SceneMap::iterator it = getSceneMap()->find(name);
75 if(it == getSceneMap()->end())
76 throw std::runtime_error("Failed to create instance of plugin " + name + ". Is the plugin registered?");
77 return it->second(robot_model, solver, dt);
78 }
79
80 template<typename T>
81 static T* createInstance(const std::string& name, RobotModelPtr robot_model, QPSolverPtr solver, const double dt){
82 Scene* tmp = createInstance(name, robot_model, solver, dt);
83 T* ret = dynamic_cast<T*>(tmp);
84 return ret;
85 }
86
88 if(!scene_map)
89 scene_map = new SceneMap;
90 return scene_map;
91 }
92
93 static void clear(){
94 scene_map->clear();
95 }
96
97private:
98 static SceneMap *scene_map;
99};
100
101template<typename T>
103 SceneRegistry(const std::string& name) {
104 SceneMap::iterator it = getSceneMap()->find(name);
105 if(it != getSceneMap()->end())
106 throw std::runtime_error("Failed to register plugin with name " + name + ". A plugin with the same name is already registered");
107
108 getSceneMap()->insert(std::make_pair(name, &createT<T,RobotModelPtr,QPSolverPtr>));
109 }
110};
111
112} // namespace wbc
113
114#endif // WBC_CORE_SCENE_HPP
Base class for all wbc scenes.
Definition Scene.hpp:16
virtual const HierarchicalQP & update()=0
Update the wbc scene and return the (updated) optimization problem.
std::vector< types::Wrench > contact_wrenches
Definition Scene.hpp:21
RobotModelPtr robot_model
Definition Scene.hpp:18
const Eigen::VectorXd & getSolverOutputRaw() const
Get current solver output in raw values.
Definition Scene.hpp:58
const std::vector< types::Wrench > & getContactWrenches()
Get estimated contact wrenches.
Definition Scene.hpp:63
Scene(RobotModelPtr robot_model, QPSolverPtr solver, const double dt)
Definition Scene.cpp:9
QPSolverPtr getSolver()
Return the current solver.
Definition Scene.hpp:53
virtual bool configure(const std::vector< TaskPtr > &tasks)=0
Configure the WBC scene. Create tasks and sort them by priority given the task config.
Eigen::VectorXd solver_output
Definition Scene.hpp:20
virtual const types::JointCommand & solve(const HierarchicalQP &hqp)=0
Solve the given optimization problem.
~Scene()
Definition Scene.cpp:14
RobotModelPtr getRobotModel()
Return the current robot model.
Definition Scene.hpp:48
QPSolverPtr solver
Definition Scene.hpp:19
Definition JointCommand.hpp:8
Definition ContactsAccelerationConstraint.cpp:3
QPSolver * createT()
Definition QPSolver.hpp:35
std::shared_ptr< Scene > ScenePtr
Definition Scene.hpp:66
std::shared_ptr< QPSolver > QPSolverPtr
Definition QPSolver.hpp:33
std::shared_ptr< RobotModel > RobotModelPtr
Definition RobotModel.hpp:318
Describes a hierarchy of quadratic programs.
Definition QuadraticProgram.hpp:53
Definition Scene.hpp:70
static SceneMap * getSceneMap()
Definition Scene.hpp:87
std::map< std::string, Scene *(*)(RobotModelPtr, QPSolverPtr, double)> SceneMap
Definition Scene.hpp:71
static T * createInstance(const std::string &name, RobotModelPtr robot_model, QPSolverPtr solver, const double dt)
Definition Scene.hpp:81
static Scene * createInstance(const std::string &name, RobotModelPtr robot_model, QPSolverPtr solver, const double dt)
Definition Scene.hpp:73
static void clear()
Definition Scene.hpp:93
SceneRegistry(const std::string &name)
Definition Scene.hpp:103