Biorbd
StateDynamicsDeGroote.cpp
1 #define BIORBD_API_EXPORTS
2 #include "Muscles/StateDynamicsDeGroote.h"
3 
4 #include <math.h>
5 #include "Utils/Error.h"
6 #include "Utils/String.h"
7 #include "Muscles/Characteristics.h"
8 
10  const biorbd::utils::Scalar& excitation,
11  const biorbd::utils::Scalar& activation) :
12  biorbd::muscles::StateDynamics(excitation,activation)
13 {
14  setType();
15 }
16 
19  biorbd::muscles::StateDynamics(other)
20 {
21 
22 }
23 
25 {
27  copy.DeepCopy(*this);
28  return copy;
29 }
30 
32 {
34 }
35 
37  const biorbd::muscles::Characteristics &characteristics,
38  bool alreadyNormalized){
39  // From DeGroote https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5043004/
40 
41  // Get activation and excitation and make difference
42  biorbd::utils::Scalar diff; //(e - a)
43  biorbd::utils::Scalar f; //activation dynamics
44  //std::tanh;
45 
46  diff = *m_excitation - *m_activation;
47  f = 0.5 * tanh(0.1*diff);
48 
49  biorbd::utils::Scalar denom_activation = characteristics.torqueActivation() * (0.5+1.5* *m_activation);
50  biorbd::utils::Scalar denom_deactivation = characteristics.torqueDeactivation() / (0.5+1.5* *m_activation);
51 
52  *m_activationDot = (((f+0.5)/denom_activation)+((-f + 0.5)/denom_deactivation))*diff;
53  return *m_activationDot;
54 }
55 
57 {
58  *m_stateType = biorbd::muscles::STATE_TYPE::DE_GROOTE;
59 }
biorbd::muscles::StateDynamicsDeGroote
EMG with the capability to compute the time derivative.
Definition: StateDynamicsDeGroote.h:13
biorbd::muscles::StateDynamics::DeepCopy
biorbd::muscles::StateDynamics DeepCopy() const
Deep copy of state dynamics.
Definition: StateDynamics.cpp:34
biorbd::muscles::StateDynamicsDeGroote::DeepCopy
biorbd::muscles::StateDynamicsDeGroote DeepCopy() const
Deep copy of state dynamics.
Definition: StateDynamicsDeGroote.cpp:24
biorbd::muscles::StateDynamicsDeGroote::StateDynamicsDeGroote
StateDynamicsDeGroote(const biorbd::utils::Scalar &excitation=0, const biorbd::utils::Scalar &activation=0)
Construct the state dynamics.
Definition: StateDynamicsDeGroote.cpp:9
biorbd::muscles::Characteristics::torqueActivation
const biorbd::utils::Scalar & torqueActivation() const
Return the time activation constant.
Definition: Characteristics.cpp:156
biorbd::muscles::StateDynamicsDeGroote::setType
virtual void setType()
Set the type to simple_state.
Definition: StateDynamicsDeGroote.cpp:56
biorbd::muscles::Characteristics::torqueDeactivation
const biorbd::utils::Scalar & torqueDeactivation() const
Return the time deactivation constant.
Definition: Characteristics.cpp:166
biorbd::muscles::StateDynamics::timeDerivativeActivation
virtual const biorbd::utils::Scalar & timeDerivativeActivation()
Return the previously computed activation time derivative.
Definition: StateDynamics.cpp:120
biorbd::muscles::StateDynamics
EMG with the capability to compute the time derivative.
Definition: StateDynamics.h:14
biorbd::muscles::Characteristics
Class Holds that muscle characteristics.
Definition: Characteristics.h:17