Skip to content

WISCO_Ligament implementation #1790

Open
@clnsmith

Description

@clnsmith

Hi all,

After a long delay... I have the ligament model working and ready for input. Still needs some cleanup.

https://github.com/clnsmith/wisco_opensim/blob/master/plugin/WISCO_Ligament.cpp
https://github.com/clnsmith/wisco_opensim/blob/master/plugin/WISCO_Ligament.h

A lot of the comments in those files are from the previous OpenSim 3.3 version and need updating.

Here is a document with a general overview of the ligament model (again implementation details need updating):
https://github.com/clnsmith/wisco_opensim/blob/master/documentation/UWLigamentUserGuide.pdf

There are two main parameters that must be selected for each ligament strand: Linear Stiffness and slack length. Linear stiffness is pretty straight forward (currently must be defined in N/strain, would be nice to add an option for N/mm).

There are three ways that would be useful to be able to define slack length:

slack_length: input the actual slack length of the ligament

reference_strain: input the strain in the ligament when the model is posed at the default coordinates (this is nice for scaling because it remains constant and then a new slack length can be computed for the scaled geometries). This is what we currently use for nearly everything, common in multibody knee model literature.

reference_force: input the force in the ligament when the model is posed at the default coordinates. This is nice for surgical simulations (ACL reconstruction etc) where pretension (ligament force at a certain flexion angle) is something the surgeon sets.

These options are implemented as optional properties: "slack_length", "reference_force", and "reference_strain". Another property "defining_slack_length_property" determines which one of the three options are used by the model. There is also a method "equilibriateSlackLengthProperties(state)" that will compute the other two options from the defining_slack_length_property.

I have written some simple tests for the ligament here:
https://github.com/clnsmith/wisco_opensim/tree/master/tests/testWISCOLigament

Currently it tests for the force at multiple strains/strain rates and checks that energy is conserved in a simple block hanging from a ligament simulation.

Aside from cleanup, the last major thing I can think of to implement is scaling. Right now it just has whatever scaling methods were in the OpenSim Ligament class that I started from.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions