PostureTask.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2022 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_tasks/MetaTask.h>
8 
9 #include <mc_rtc/void_ptr.h>
10 
11 #include <Tasks/QPTasks.h>
12 
13 namespace mc_tasks
14 {
15 
24 {
25 public:
26  PostureTask(const mc_solver::QPSolver & solver, unsigned int rIndex, double stiffness = 1, double weight = 10);
27 
28  void reset() override;
29 
31  void load(mc_solver::QPSolver & solver, const mc_rtc::Configuration & config) override;
32 
38  void dimWeight(const Eigen::VectorXd & dimW) override;
39 
40  Eigen::VectorXd dimWeight() const override;
41 
46  void selectActiveJoints(mc_solver::QPSolver & solver,
47  const std::vector<std::string> & activeJointsName,
48  const std::map<std::string, std::vector<std::array<int, 2>>> & activeDofs = {}) override;
49 
54  void selectUnactiveJoints(mc_solver::QPSolver & solver,
55  const std::vector<std::string> & unactiveJointsName,
56  const std::map<std::string, std::vector<std::array<int, 2>>> & unactiveDofs = {}) override;
57 
62  void resetJointsSelector(mc_solver::QPSolver & solver) override;
63 
64  Eigen::VectorXd eval() const override;
65 
66  Eigen::VectorXd speed() const override;
67 
69  void posture(const std::vector<std::vector<double>> & p);
70 
75  void refVel(const Eigen::VectorXd & refVel) noexcept;
76 
78  const Eigen::VectorXd & refVel() const noexcept;
79 
84  void refAccel(const Eigen::VectorXd & refAccel) noexcept;
85 
87  const Eigen::VectorXd & refAccel() const noexcept;
88 
90  std::vector<std::vector<double>> posture() const;
91 
93  void jointGains(const mc_solver::QPSolver & solver, const std::vector<tasks::qp::JointGains> & jgs);
94 
96  void jointStiffness(const mc_solver::QPSolver & solver, const std::vector<tasks::qp::JointStiffness> & jss);
97 
99  void jointWeights(const std::map<std::string, double> & jws);
100 
106  void target(const std::map<std::string, std::vector<double>> & joints);
107 
115  void stiffness(double s);
116 
118  double stiffness() const;
119 
125  void damping(double d);
126 
128  double damping() const;
129 
137  void setGains(double stiffness, double damping);
138 
140  void weight(double w);
141 
143  double weight() const;
144 
146  bool inSolver() const;
147 
148 protected:
149  void addToSolver(mc_solver::QPSolver & solver) override;
150 
151  void removeFromSolver(mc_solver::QPSolver & solver) override;
152 
153  void update(mc_solver::QPSolver &) override;
154 
155  void addToGUI(mc_rtc::gui::StateBuilder &) override;
156 
157  void addToLogger(mc_rtc::Logger & logger) override;
158 
159 private:
161  bool inSolver_ = false;
163  const mc_rbdyn::Robots & robots_;
164  unsigned int rIndex_;
173  mc_rtc::void_ptr pt_;
175  double dt_;
177  std::vector<std::vector<double>> posture_;
179  std::unordered_map<std::string, std::vector<int>> mimics_;
181  Eigen::VectorXd eval_;
183  Eigen::VectorXd speed_;
184 };
185 
186 using PostureTaskPtr = std::shared_ptr<PostureTask>;
187 
188 } // namespace mc_tasks
mc_rtc::Configuration
Simplify access to values hold within a JSON file.
Definition: Configuration.h:165
mc_rbdyn::Robots
Definition: Robots.h:15
void_ptr.h
mc_tasks::MetaTask
Represents a generic task.
Definition: MetaTask.h:39
mc_tasks::PostureTask
Definition: PostureTask.h:23
MC_TASKS_DLLAPI
#define MC_TASKS_DLLAPI
Definition: api.h:50
mc_solver::QPSolver
Definition: QPSolver.h:85
mc_rtc::Logger
Logs controller data to disk.
Definition: Logger.h:29
mc_rtc::void_ptr
std::unique_ptr< void, void(*)(void *)> void_ptr
Definition: void_ptr.h:14
mc_rtc::gui::StateBuilder
Definition: StateBuilder.h:27
mc_tasks::PostureTaskPtr
std::shared_ptr< PostureTask > PostureTaskPtr
Definition: PostureTask.h:186
MetaTask.h
mc_tasks
Definition: StabilizerStandingState.h:11