Skip to content

Muscle FiberVelocityInfo and MuscleDynamicsInfo refactor #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 13 commits into
base: draft-merge-target
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
210 changes: 57 additions & 153 deletions OpenSim/Actuators/DeGrooteFregly2016Muscle.cpp

Large diffs are not rendered by default.

47 changes: 13 additions & 34 deletions OpenSim/Actuators/DeGrooteFregly2016Muscle.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
/// If ignore_activation_dynamics is true, this gets excitation instead.
double getActivation(const SimTK::State& s) const override {
// We override the Muscle's implementation because Muscle requires
// realizing to Dynamics to access activation from MuscleDynamicsInfo,
// realizing to Dynamics to access activation from MuscleVelocityInfo,
// which is unnecessary if the activation is a state.
if (get_ignore_activation_dynamics()) {
return getControl(s);
Expand All @@ -206,7 +206,6 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
setStateVariableValue(s, STATE_ACTIVATION_NAME, activation);
}
markCacheVariableInvalid(s, "velInfo");
markCacheVariableInvalid(s, "dynamicsInfo");
}

protected:
Expand All @@ -215,9 +214,9 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
void calcMuscleLengthInfo(
const SimTK::State& s, MuscleLengthInfo& mli) const override;
void calcFiberVelocityInfo(
const SimTK::State& s, FiberVelocityInfo& fvi) const override;
void calcMuscleDynamicsInfo(
const SimTK::State& s, MuscleDynamicsInfo& mdi) const override;
const SimTK::State& s,
const MuscleLengthInfo& mli,
FiberVelocityInfo& fvi) const override;
void calcMusclePotentialEnergyInfo(const SimTK::State& s,
MusclePotentialEnergyInfo& mpei) const override;

Expand Down Expand Up @@ -362,7 +361,6 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
s, STATE_NORMALIZED_TENDON_FORCE_NAME, normTendonForce);
markCacheVariableInvalid(s, "lengthInfo");
markCacheVariableInvalid(s, "velInfo");
markCacheVariableInvalid(s, "dynamicsInfo");
}
}
/// @}
Expand Down Expand Up @@ -710,18 +708,15 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
const SimTK::Real& activation, const SimTK::Real& normTendonForce,
const SimTK::Real& normTendonForceDerivative) const {

MuscleLengthInfo mli;
FiberVelocityInfo fvi;
MuscleDynamicsInfo mdi;
FiberVelocityInfoCache fvi;
MuscleLengthInfo& mli = fvi;
calcMuscleLengthInfoHelper(
muscleTendonLength, false, mli, normTendonForce);
calcFiberVelocityInfoHelper(muscleTendonVelocity, activation, false,
false, mli, fvi, normTendonForce, normTendonForceDerivative);
calcMuscleDynamicsInfoHelper(activation, muscleTendonVelocity, false,
mli, fvi, mdi, normTendonForce);

return mdi.normTendonForce -
mdi.fiberForceAlongTendon / get_max_isometric_force();
return (fvi.tendonForce - fvi.calcFiberForceAlongTendon())
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't this different?

/ get_max_isometric_force();
}

/// The residual (i.e. error) in the time derivative of the linearized
Expand All @@ -738,20 +733,17 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
const SimTK::Real& activation, const SimTK::Real& normTendonForce,
const SimTK::Real& normTendonForceDerivative) const {

MuscleLengthInfo mli;
FiberVelocityInfo fvi;
MuscleDynamicsInfo mdi;
FiberVelocityInfoCache fvi;
MuscleLengthInfo& mli = fvi;
calcMuscleLengthInfoHelper(
muscleTendonLength, false, mli, normTendonForce);
calcFiberVelocityInfoHelper(muscleTendonVelocity, activation, false,
m_isTendonDynamicsExplicit, mli, fvi, normTendonForce,
normTendonForceDerivative);
calcMuscleDynamicsInfoHelper(activation, muscleTendonVelocity, false,
mli, fvi, mdi, normTendonForce);

return mdi.fiberStiffnessAlongTendon * fvi.fiberVelocityAlongTendon -
mdi.tendonStiffness *
(muscleTendonVelocity - fvi.fiberVelocityAlongTendon);
return fvi.calcFiberStiffnessAlongTendon() * fvi.calcFiberVelocityAlongTendon() -
fvi.tendonStiffness *
(muscleTendonVelocity - fvi.calcFiberVelocityAlongTendon());
}
/// @}

Expand Down Expand Up @@ -821,11 +813,6 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
const MuscleLengthInfo& mli, FiberVelocityInfo& fvi,
const SimTK::Real& normTendonForce = SimTK::NaN,
const SimTK::Real& normTendonForceDerivative = SimTK::NaN) const;
void calcMuscleDynamicsInfoHelper(const SimTK::Real& activation,
const SimTK::Real& muscleTendonVelocity,
const bool& ignoreTendonCompliance, const MuscleLengthInfo& mli,
const FiberVelocityInfo& fvi, MuscleDynamicsInfo& mdi,
const SimTK::Real& normTendonForce = SimTK::NaN) const;
void calcMusclePotentialEnergyInfoHelper(const bool& ignoreTendonCompliance,
const MuscleLengthInfo& mli, MusclePotentialEnergyInfo& mpei) const;

Expand Down Expand Up @@ -949,14 +936,6 @@ class OSIMACTUATORS_API DeGrooteFregly2016Muscle : public Muscle {
// kT, users specify tendon strain at 1 norm force, which is more intuitive.
SimTK::Real m_kT = SimTK::NaN;
bool m_isTendonDynamicsExplicit = true;

// Indices for MuscleDynamicsInfo::userDefinedDynamicsExtras.
constexpr static int m_mdi_passiveFiberElasticForce = 0;
constexpr static int m_mdi_passiveFiberDampingForce = 1;
constexpr static int m_mdi_partialPennationAnglePartialFiberLength = 2;
constexpr static int m_mdi_partialFiberForceAlongTendonPartialFiberLength =
3;
constexpr static int m_mdi_partialTendonForcePartialFiberLength = 4;
};

} // namespace OpenSim
Expand Down
Loading