Biorbd Release_1.13.0
Loading...
Searching...
No Matches
State.cpp
1#define BIORBD_API_EXPORTS
2#include "InternalForces/Muscles/State.h"
3
4#include "Utils/Error.h"
5
6using namespace BIORBD_NAMESPACE;
8 const utils::Scalar& excitation,
9 const utils::Scalar& activation)
10 : m_stateType(std::make_shared<internal_forces::muscles::STATE_TYPE>()),
11 m_excitation(std::make_shared<utils::Scalar>(excitation)),
12 m_excitationNorm(std::make_shared<utils::Scalar>(0)),
13 m_activation(std::make_shared<utils::Scalar>(activation)) {
14 setType();
15}
16
23
27
34
42
44 const utils::Scalar& val,
45 bool turnOffWarnings) {
46#ifdef BIORBD_USE_CASADI_MATH
47 *m_excitation = val;
48#else
49 if (val < 0) {
50 if (!turnOffWarnings) {
52 0, "Excitation can't be lower than 0, 0 is used then");
53 }
54 *m_excitation = 0;
55 } else {
56 *m_excitation = val;
57 }
58#endif
59}
60
61const utils::Scalar& internal_forces::muscles::State::excitation() const {
62 return *m_excitation;
63}
64
67 bool turnOffWarnings) {
68#ifndef BIORBD_USE_CASADI_MATH
69 if (!turnOffWarnings) {
71 *m_excitation < emgMax.excitation(),
72 "Excitation is higher than maximal excitation.");
73 }
74#endif
76
77 return *m_excitationNorm;
78}
79
81 const utils::Scalar& val) {
82 *m_excitationNorm = val;
83}
84
86 return *m_excitationNorm;
87}
88
90 const utils::Scalar& val,
91 bool turnOffWarnings) {
92#ifdef BIORBD_USE_CASADI_MATH
93 *m_activation = val;
94#else
95 if (val < 0) {
96 if (!turnOffWarnings) {
98 0,
99 "Activation is " + utils::String::to_string(val) +
100 " but can't be lower than 0, 0 is used then");
101 }
102 *m_activation = 0;
103 } else if (val > 1) {
104 if (!turnOffWarnings) {
106 0,
107 "Activation " + utils::String::to_string(val) +
108 " but can't be higher than 1, 1 is used then");
109 }
110 *m_activation = 1;
111 } else {
112 *m_activation = val;
113 }
114#endif
115}
116
118 return *m_activation;
119}
120
121internal_forces::muscles::STATE_TYPE internal_forces::muscles::State::type()
122 const {
123 return *m_stateType;
124}
125
127 *m_stateType = internal_forces::muscles::STATE_TYPE::SIMPLE_STATE;
128}
EMG holder to interact with the muscle.
Definition State.h:17
void setExcitationNorm(const utils::Scalar &val)
Force set the normalized excitation.
Definition State.cpp:80
virtual ~State()
Destroy class properly.
Definition State.cpp:24
State DeepCopy() const
Deep copy of state.
Definition State.cpp:28
std::shared_ptr< STATE_TYPE > m_stateType
The state type.
Definition State.h:127
virtual void setActivation(const utils::Scalar &val, bool turnOffWarnings=false)
Set the muscle activation.
Definition State.cpp:89
virtual void setExcitation(const utils::Scalar &val, bool turnOffWarnings=false)
Set the muscle excitation.
Definition State.cpp:43
std::shared_ptr< utils::Scalar > m_activation
The muscle activation.
Definition State.h:131
const utils::Scalar & excitationNorm() const
Return the previously normalized excitation.
Definition State.cpp:85
const utils::Scalar & excitation() const
Return the muscle excitation.
Definition State.cpp:61
std::shared_ptr< utils::Scalar > m_excitationNorm
The normalized excitation.
Definition State.h:130
const utils::Scalar & normalizeExcitation(const State &emgMax, bool turnOffWarnings=false)
Compute and return the normalized excitation.
Definition State.cpp:65
std::shared_ptr< utils::Scalar > m_excitation
The muscle excitation.
Definition State.h:128
const utils::Scalar & activation() const
Return the muscle activation.
Definition State.cpp:117
State(const utils::Scalar &excitation=0, const utils::Scalar &activation=0)
Construct a state.
Definition State.cpp:7
STATE_TYPE type() const
Return the state type.
Definition State.cpp:121
virtual void setType()
Set the type to simple_state.
Definition State.cpp:126
static void warning(bool cond, const String &message)
Non-blocking assert that displays the error message if false.
Definition Error.cpp:16
static String to_string(double val)
Overload of the to_string C++11 function to allow for X-digits precision.
Definition String.cpp:92