1 #define BIORBD_API_EXPORTS
2 #include "Muscles/Muscle.h"
4 #include "Utils/Error.h"
5 #include "RigidBody/Joints.h"
6 #include "RigidBody/GeneralizedCoordinates.h"
7 #include "RigidBody/GeneralizedVelocity.h"
8 #include "Muscles/PathModifiers.h"
9 #include "Muscles/StateDynamics.h"
10 #include "Muscles/StateDynamicsBuchanan.h"
11 #include "Muscles/StateDynamicsDeGroote.h"
12 #include "Muscles/Characteristics.h"
13 #include "Muscles/Geometry.h"
17 m_position(std::make_shared<biorbd::muscles::
Geometry>()),
18 m_characteristics(std::make_shared<biorbd::muscles::
Characteristics>()),
19 m_state(std::make_shared<biorbd::muscles::
State>())
29 m_position(std::make_shared<biorbd::muscles::
Geometry>(position)),
30 m_characteristics(std::make_shared<biorbd::muscles::
Characteristics>(characteristics)),
31 m_state(std::make_shared<biorbd::muscles::
State>())
42 m_position(std::make_shared<biorbd::muscles::
Geometry>(position)),
43 m_characteristics(std::make_shared<biorbd::muscles::
Characteristics>(characteristics)),
44 m_state(std::make_shared<biorbd::muscles::
State>(dynamicState))
54 biorbd::muscles::
Compound (name, pathModifiers),
55 m_position(std::make_shared<biorbd::muscles::
Geometry>(position)),
56 m_characteristics(std::make_shared<biorbd::muscles::
Characteristics>(characteristics)),
57 m_state(std::make_shared<biorbd::muscles::
State>())
64 m_position(other.m_position),
65 m_characteristics(other.m_characteristics),
66 m_state(other.m_state)
73 m_position(other->m_position),
74 m_characteristics(other->m_characteristics),
75 m_state(other->m_state)
85 biorbd::muscles::
Compound(name,pathModifiers),
86 m_position(std::make_shared<biorbd::muscles::
Geometry>(g)),
87 m_characteristics(std::make_shared<biorbd::muscles::
Characteristics>(c)),
88 m_state(std::make_shared<biorbd::muscles::
State>())
105 *m_state = other.
m_state->DeepCopy();
114 m_position->updateKinematics(model,*m_characteristics,*m_pathChanger,&Q,
nullptr,updateKin);
123 m_position->updateKinematics(model,*m_characteristics,*m_pathChanger,&Q,&Qdot,updateKin);
126 std::vector<biorbd::utils::Vector3d>& musclePointsInGlobal,
129 m_position->updateKinematics(musclePointsInGlobal,jacoPointsInGlobal,*m_characteristics,
nullptr);
132 std::vector<biorbd::utils::Vector3d>& musclePointsInGlobal,
137 m_position->updateKinematics(musclePointsInGlobal,jacoPointsInGlobal,*m_characteristics,&Qdot);
143 *m_position = positions;
154 if (updateKin != 0) {
155 m_position->updateKinematics(
156 model,*m_characteristics,*m_pathChanger,&Q,
nullptr,updateKin);
159 return position().length();
167 if (updateKin != 0) {
168 m_position->updateKinematics(
169 m,*m_characteristics,*m_pathChanger,&Q,
nullptr,updateKin);
172 return m_position->musculoTendonLength();
182 m_position->updateKinematics(
183 model,*m_characteristics,*m_pathChanger,&Q,&Qdot);
186 return m_position->velocity();
191 bool alreadyNormalized)
const
193 std::shared_ptr<biorbd::muscles::StateDynamics> state_copy =
194 std::dynamic_pointer_cast<biorbd::muscles::StateDynamics>(m_state);
196 state_copy !=
nullptr,
197 "The muscle " + name() +
" is not a dynamic muscle");
198 return state_copy->timeDerivativeActivation(
199 state, characteristics(), alreadyNormalized);
204 *m_force = getForceFromActivation(emg);
211 m_position->updateKinematics(model,*m_characteristics,*m_pathChanger,&Q,
nullptr);
213 return musclesPointsInGlobal();
218 return m_position->musclesPointsInGlobal();
222 const biorbd::utils::Scalar& forceMax)
224 m_characteristics->setForceIsoMax(forceMax);
230 *m_characteristics = characteristics;
234 return *m_characteristics;
241 if (emg.
type() == biorbd::muscles::STATE_TYPE::BUCHANAN){
244 else if (emg.
type() == biorbd::muscles::STATE_TYPE::DE_GROOTE){
247 else if (emg.
type() == biorbd::muscles::STATE_TYPE::DYNAMIC){