Biorbd
StateDynamicsBuchanan.cpp
1 #define BIORBD_API_EXPORTS
2 #include "Muscles/StateDynamicsBuchanan.h"
3 
4 #include <math.h>
5 
7  const biorbd::utils::Scalar& neuralCommand,
8  const biorbd::utils::Scalar& excitation) :
9  biorbd::muscles::StateDynamics(excitation,0),
10  m_neuralCommand(std::make_shared<biorbd::utils::Scalar>(neuralCommand)),
11  m_shapeFactor(std::make_shared<biorbd::utils::Scalar>(-3)),
12  m_excitationDot(std::make_shared<biorbd::utils::Scalar>(0))
13 {
14  setType();
15  // Update activation
17 }
18 
21  biorbd::muscles::StateDynamics(other),
22  m_neuralCommand(other.m_neuralCommand),
23  m_shapeFactor(other.m_shapeFactor),
24  m_excitationDot(other.m_excitationDot)
25 {
26 
27 }
28 
30 {
31  //dtor
32 }
33 
35 {
37  copy.DeepCopy(*this);
38  return copy;
39 }
40 
43 {
45  *m_neuralCommand = *other.m_neuralCommand;
46  *m_shapeFactor = *other.m_shapeFactor;
47  *m_excitationDot = *other.m_excitationDot;
48 }
49 
51  const biorbd::utils::Scalar& shape_factor)
52 {
53  *m_shapeFactor = shape_factor;
54 
55  // Update activation
56  setActivation(0);
57 }
58 
59 const biorbd::utils::Scalar& biorbd::muscles::StateDynamicsBuchanan::shapeFactor() const
60 {
61  return *m_shapeFactor;
62 }
63 
65  const biorbd::muscles::Characteristics &characteristics,
66  bool alreadyNormalized){
67  // Move excitation to activation to use properly biorbd::muscles::StateDynamics::timeDerivativeActivation
68  biorbd::utils::Scalar activationTp = *m_activation;
69  *m_activation = *m_excitation;
70  biorbd::utils::Scalar excitationTp = *m_excitation;
71  *m_excitation = *m_neuralCommand;
72 
73  // Compute excitationDot
74  *m_excitationDot = biorbd::muscles::StateDynamics::timeDerivativeActivation(characteristics, alreadyNormalized);
75  // Set back activationDot to 0 (since it is suppose to calculate excitationDot)
76  *m_activationDot = 0;
77  *m_excitation = excitationTp;
78  *m_activation = activationTp;
79 
80  return *m_excitationDot;
81 }
82 
84  const biorbd::utils::Scalar& val,
85  bool)
86 {
88 
89  // Update activation
90  setActivation(0);
91 }
92 
94  const biorbd::utils::Scalar& val)
95 {
96  *m_neuralCommand = val;
97 }
98 
100  const biorbd::utils::Scalar&,
101  bool)
102 {
103  biorbd::utils::Scalar expShapeFactor(exp(*m_shapeFactor));
104  *m_activation = ( pow(expShapeFactor, *m_excitation) - 1) / (expShapeFactor - 1) ;
105 }
106 
108 {
109  *m_stateType = biorbd::muscles::STATE_TYPE::BUCHANAN;
110 }
111 
biorbd::muscles::StateDynamicsBuchanan::~StateDynamicsBuchanan
~StateDynamicsBuchanan()
Destroy class properly.
Definition: StateDynamicsBuchanan.cpp:29
biorbd::muscles::StateDynamicsBuchanan::StateDynamicsBuchanan
StateDynamicsBuchanan(const biorbd::utils::Scalar &neuralCommand=0, const biorbd::utils::Scalar &excitation=0)
Construct state dynamics.
Definition: StateDynamicsBuchanan.cpp:6
biorbd::muscles::StateDynamicsBuchanan::m_neuralCommand
std::shared_ptr< biorbd::utils::Scalar > m_neuralCommand
The muscle neural command.
Definition: StateDynamicsBuchanan.h:102
biorbd::muscles::StateDynamicsBuchanan::setActivation
void setActivation(const biorbd::utils::Scalar &notUsed, bool turnOffWarnings=false)
Set the muscle activation.
Definition: StateDynamicsBuchanan.cpp:99
biorbd::muscles::StateDynamics::DeepCopy
biorbd::muscles::StateDynamics DeepCopy() const
Deep copy of state dynamics.
Definition: StateDynamics.cpp:34
biorbd::muscles::StateDynamicsBuchanan
Time derivative of activation as described by Buchanan (https://www.sciencedirect....
Definition: StateDynamicsBuchanan.h:13
biorbd::muscles::StateDynamicsBuchanan::setExcitation
virtual void setExcitation(const biorbd::utils::Scalar &val, bool turnOffWarnings=false)
Set the muscle excitation.
Definition: StateDynamicsBuchanan.cpp:83
biorbd::muscles::StateDynamicsBuchanan::shapeFactor
const biorbd::utils::Scalar & shapeFactor() const
Return the shape factor.
Definition: StateDynamicsBuchanan.cpp:59
biorbd::muscles::StateDynamicsBuchanan::DeepCopy
biorbd::muscles::StateDynamicsBuchanan DeepCopy() const
Deep copy of state dynamics Buchanan.
Definition: StateDynamicsBuchanan.cpp:34
biorbd::muscles::StateDynamicsBuchanan::timeDerivativeExcitation
virtual const biorbd::utils::Scalar & timeDerivativeExcitation(const Characteristics &characteristics, bool alreadyNormalized)
Compute and return the excitation velocity.
Definition: StateDynamicsBuchanan.cpp:64
biorbd::muscles::StateDynamicsBuchanan::setType
virtual void setType()
Set type to Buchanan.
Definition: StateDynamicsBuchanan.cpp:107
biorbd::muscles::State::activation
const biorbd::utils::Scalar & activation() const
Return the muscle activation.
Definition: State.cpp:127
biorbd::muscles::StateDynamicsBuchanan::m_shapeFactor
std::shared_ptr< biorbd::utils::Scalar > m_shapeFactor
The shape factor (Buchanan2004, march 22nd, 2018)
Definition: StateDynamicsBuchanan.h:103
biorbd::muscles::StateDynamicsBuchanan::setNeuralCommand
virtual void setNeuralCommand(const biorbd::utils::Scalar &val)
Set the neural command.
Definition: StateDynamicsBuchanan.cpp:93
biorbd::muscles::StateDynamics::setExcitation
virtual void setExcitation(const biorbd::utils::Scalar &val, bool turnOffWarnings=false)
Set the muscle excitation.
Definition: StateDynamics.cpp:125
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::StateDynamicsBuchanan::m_excitationDot
std::shared_ptr< biorbd::utils::Scalar > m_excitationDot
The excitation velocity.
Definition: StateDynamicsBuchanan.h:104
biorbd::muscles::Characteristics
Class Holds that muscle characteristics.
Definition: Characteristics.h:17