TVM  0.9.4
Proportional.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017-2020 CNRS-AIST JRL and CNRS-UM LIRMM
3  */
4 
5 #pragma once
6 
7 // std::variant is basically unusable in clang 6 + libstdc++ due to a bug
8 // see, e.g. https://bugs.llvm.org/show_bug.cgi?id=33222
9 // We use https://github.com/mpark/variant/ instead
10 #include <mpark/variant.hpp>
11 
13 
14 namespace tvm
15 {
16 
17 namespace task_dynamics
18 {
19 
24 {
25 public:
26  using Gain = mpark::variant<double, Eigen::VectorXd, Eigen::MatrixXd>;
27 
29  {
30  public:
31  Impl(FunctionPtr f, constraint::Type t, const Eigen::VectorXd & rhs, const Gain & kp);
32  void updateValue() override;
33 
34  ~Impl() override = default;
35 
37  void gain(double kp);
39  void gain(const Eigen::VectorXd & kp);
41  void gain(const Eigen::MatrixXd & kp);
43  const Gain & gain() const;
48  template<typename T>
49  const T & gain() const
50  { return mpark::get<T>(kp_); }
55  Gain & gain();
62  template<typename T>
63  T & gain()
64  { return mpark::get<T>(kp_); }
65 
66  private:
67  Gain kp_;
68  };
69 
71  Proportional(double kp);
73  Proportional(const Eigen::VectorXd & kp);
75  Proportional(const Eigen::MatrixXd & kp);
76 
77  ~Proportional() override = default;
78 
79 protected:
80  std::unique_ptr<abstract::TaskDynamicsImpl> impl_(FunctionPtr f,
82  const Eigen::VectorXd & rhs) const override;
83  Order order_() const override;
84 
86 
87 private:
88  Gain kp_;
89 };
90 
92 using P = Proportional;
93 } // namespace task_dynamics
94 
95 } // namespace tvm
#define TASK_DYNAMICS_DERIVED_FACTORY(...)
Definition: TaskDynamics.h:62
#define TVM_DLLAPI
Definition: api.h:35
Definition: Proportional.h:29
T & gain()
Definition: Proportional.h:63
Impl(FunctionPtr f, constraint::Type t, const Eigen::VectorXd &rhs, const Gain &kp)
void gain(const Eigen::VectorXd &kp)
const T & gain() const
Definition: Proportional.h:49
void gain(const Eigen::MatrixXd &kp)
Definition: Proportional.h:24
std::unique_ptr< abstract::TaskDynamicsImpl > impl_(FunctionPtr f, constraint::Type t, const Eigen::VectorXd &rhs) const override
Proportional(const Eigen::MatrixXd &kp)
Order order_() const override
Proportional(const Eigen::VectorXd &kp)
~Proportional() override=default
mpark::variant< double, Eigen::VectorXd, Eigen::MatrixXd > Gain
Definition: Proportional.h:26
Definition: TaskDynamicsImpl.h:33
Definition: TaskDynamics.h:37
Type
Definition: enums.h:15
Order
Definition: enums.h:14
Definition: Clock.h:12
std::shared_ptr< function::abstract::Function > FunctionPtr
Definition: defs.h:57