mc_rtc  2.12.0
DynamicFunction.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_tvm/api.h>
8 
9 #include <mc_rbdyn/fwd.h>
10 
11 #include <tvm/function/abstract/LinearFunction.h>
12 
13 #include <RBDyn/Jacobian.h>
14 
15 #include <SpaceVecAlg/SpaceVecAlg>
16 
17 namespace mc_tvm
18 {
19 
31 struct MC_TVM_DLLAPI DynamicFunction : public tvm::function::abstract::LinearFunction
32 {
33 public:
34  using Output = tvm::function::abstract::LinearFunction::Output;
35  DISABLE_OUTPUTS(Output::JDot)
36  SET_UPDATES(DynamicFunction, Jacobian, B)
37 
38 
39  DynamicFunction(const mc_rbdyn::Robot & robot);
40 
54  const tvm::VariableVector & addContact(const mc_rbdyn::RobotFrame & frame,
55  std::vector<sva::PTransformd> points,
56  double dir);
57 
62  void removeContact(const mc_rbdyn::RobotFrame & frame);
63 
70  sva::ForceVecd contactForce(const mc_rbdyn::RobotFrame & f) const;
71 
72 protected:
73  void updateb();
74 
75  const mc_rbdyn::Robot & robot_;
76 
78  struct ForceContact
79  {
81  ForceContact(const mc_rbdyn::RobotFrame & frame, std::vector<sva::PTransformd> points, double dir);
82 
85 
87  sva::ForceVecd force() const;
88 
91 
93  tvm::VariableVector forces_;
94 
96  std::vector<sva::PTransformd> points_;
97 
99  double dir_;
100 
102  rbd::Jacobian jac_;
104  rbd::Blocks blocks_;
105 
107  Eigen::MatrixXd force_jac_;
108  Eigen::MatrixXd full_jac_;
109  };
110  std::vector<ForceContact> contacts_;
111 
112  std::vector<ForceContact>::const_iterator findContact(const mc_rbdyn::RobotFrame & frame) const;
113 
115 };
116 
117 using DynamicFunctionPtr = std::shared_ptr<DynamicFunction>;
118 
119 } // namespace mc_tvm
#define MC_TVM_DLLAPI
Definition: api.h:47
Definition: generic_gripper.h:15
std::shared_ptr< const RobotFrame > ConstRobotFramePtr
Definition: fwd.h:25
Definition: CollisionFunction.h:16
std::shared_ptr< DynamicFunction > DynamicFunctionPtr
Definition: DynamicFunction.h:117
Definition: Contact.h:67
Definition: RobotFrame.h:22
Definition: DynamicFunction.h:79
Eigen::MatrixXd force_jac_
Definition: DynamicFunction.h:107
std::vector< sva::PTransformd > points_
Definition: DynamicFunction.h:96
mc_rbdyn::ConstRobotFramePtr frame_
Definition: DynamicFunction.h:90
rbd::Blocks blocks_
Definition: DynamicFunction.h:104
void updateJacobians(DynamicFunction &parent)
double dir_
Definition: DynamicFunction.h:99
ForceContact(const mc_rbdyn::RobotFrame &frame, std::vector< sva::PTransformd > points, double dir)
rbd::Jacobian jac_
Definition: DynamicFunction.h:102
Eigen::MatrixXd full_jac_
Definition: DynamicFunction.h:108
tvm::VariableVector forces_
Definition: DynamicFunction.h:93
Definition: DynamicFunction.h:32
tvm::function::abstract::LinearFunction::Output Output
Definition: DynamicFunction.h:34
std::vector< ForceContact > contacts_
Definition: DynamicFunction.h:110
std::vector< ForceContact >::const_iterator findContact(const mc_rbdyn::RobotFrame &frame) const
Definition: RobotFrame.h:28
Definition: Robot.h:49