TVMTrajectoryTaskGeneric.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 
8 
10 
11 #include <tvm/ControlProblem.h>
12 #include <tvm/task_dynamics/Proportional.h>
13 #include <tvm/task_dynamics/ProportionalDerivative.h>
14 
15 namespace mc_tasks
16 {
17 
18 namespace details
19 {
20 
21 template<typename ErrorT>
22 void set_ref_vel(void * task, const Eigen::VectorXd & refVel)
23 {
24  static_cast<ErrorT *>(task)->refVel(refVel);
25 }
26 
27 template<typename ErrorT>
28 void set_ref_accel(void * task, const Eigen::VectorXd & refAccel)
29 {
30  static_cast<ErrorT *>(task)->refAccel(refAccel);
31 }
32 
34 {
35  tvm::TaskWithRequirementsPtr task_; // null if the task is not in solver
36  bool dynamicIsPD_ = false; // is task_ dynamic a PD or a P, irrelevant if task_ is null
37  Eigen::VectorXd dimWeight_;
38 
39  using set_ref_vel_t = void (*)(void *, const Eigen::VectorXd &);
40  using set_ref_accel_t = void (*)(void *, const Eigen::VectorXd &);
41 
44 
45  template<typename ErrorT>
46  void init(ErrorT * error)
47  {
48  dimWeight_ = Eigen::VectorXd::Ones(error->size());
49  if constexpr(details::has_refVel_v<ErrorT>) { setRefVel = set_ref_vel<ErrorT>; }
50  if constexpr(details::has_refAccel_v<ErrorT>) { setRefAccel = set_ref_accel<ErrorT>; }
51  }
52 };
53 
54 using TVMTrajectoryTaskGenericPtr = std::shared_ptr<TVMTrajectoryTaskGeneric>;
55 
56 } // namespace details
57 
58 } // namespace mc_tasks
mc_tasks::details::TVMTrajectoryTaskGeneric::init
void init(ErrorT *error)
Definition: TVMTrajectoryTaskGeneric.h:46
mc_tasks::details::TVMTrajectoryTaskGeneric::task_
tvm::TaskWithRequirementsPtr task_
Definition: TVMTrajectoryTaskGeneric.h:35
mc_tasks::details::TVMTrajectoryTaskGeneric::dimWeight_
Eigen::VectorXd dimWeight_
Definition: TVMTrajectoryTaskGeneric.h:37
mc_tasks::details::TVMTrajectoryTaskGeneric::set_ref_accel_t
void(*)(void *, const Eigen::VectorXd &) set_ref_accel_t
Definition: TVMTrajectoryTaskGeneric.h:40
mc_tasks::details::TVMTrajectoryTaskGeneric::setRefAccel
set_ref_accel_t setRefAccel
Definition: TVMTrajectoryTaskGeneric.h:43
mc_tasks::details::TVMTrajectoryTaskGeneric::setRefVel
set_ref_vel_t setRefVel
Definition: TVMTrajectoryTaskGeneric.h:42
tasks_traits.h
mc_tasks::details::TVMTrajectoryTaskGeneric::set_ref_vel_t
void(*)(void *, const Eigen::VectorXd &) set_ref_vel_t
Definition: TVMTrajectoryTaskGeneric.h:39
mc_tasks::details::set_ref_accel
void set_ref_accel(void *task, const Eigen::VectorXd &refAccel)
Definition: TVMTrajectoryTaskGeneric.h:28
mc_tasks::details::set_ref_vel
void set_ref_vel(void *task, const Eigen::VectorXd &refVel)
Definition: TVMTrajectoryTaskGeneric.h:22
mc_tasks::details::TVMTrajectoryTaskGeneric::dynamicIsPD_
bool dynamicIsPD_
Definition: TVMTrajectoryTaskGeneric.h:36
mc_rtc::log::error
void error(Args &&... args)
Definition: logging.h:63
TVMQPSolver.h
mc_tasks::details::TVMTrajectoryTaskGenericPtr
std::shared_ptr< TVMTrajectoryTaskGeneric > TVMTrajectoryTaskGenericPtr
Definition: TVMTrajectoryTaskGeneric.h:54
mc_tasks
Definition: StabilizerStandingState.h:11
mc_tasks::details::TVMTrajectoryTaskGeneric
Definition: TVMTrajectoryTaskGeneric.h:33