Passive joint moment that's a function of coordinates at multiple joints

Provide easy-to-use, extensible software for modeling, simulating, controlling, and analyzing the neuromusculoskeletal system.
POST REPLY
User avatar
Ross Miller
Posts: 375
Joined: Tue Sep 22, 2009 2:02 pm

Passive joint moment that's a function of coordinates at multiple joints

Post by Ross Miller » Wed Apr 08, 2020 1:02 am

Hi all,

I would like to define a passive joint moment M that is a function of coordinates at multiple joints, for example:

M = k1*hip_flexion_r + k2*knee_angle_r

Is this possible? <ExpressionBasedBushingForce> is close but seems like it requires the coordinates to be all from the same joint, for example with EBBF I could do:

M = k1*hip_flexion_r + k2*hip_adduction_r

but could not do:

M = k1*hip_flexion_r + k2*knee_angle_r

My motivation for this is to include a "lumped parameter" model of passive joint stiffness that accounts for biarticular muscles (e.g. Riener & Edrich 1999: https://www.ncbi.nlm.nih.gov/pubmed/10327008)

Ross

Tags:

User avatar
Carmichael Ong
Posts: 401
Joined: Fri Feb 24, 2012 11:50 am

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Carmichael Ong » Thu Apr 09, 2020 3:11 pm

Unfortunately, I think the provided classes in OpenSim don't give a clear way to implement your problem using MATLAB. Creating a class to do this in C++ would likely work but may not be trivial to do.

I wonder if there could be a way around this by implementing your equations in MATLAB. Depending on your use case, you might be able to update the force/moment of some actuator during a simulation to mimic the passive moments. For instance, you could have a CoordinateActuator at each joint, and you update the control of the actuator based on your calculations on the MATLAB side.

User avatar
Ross Miller
Posts: 375
Joined: Tue Sep 22, 2009 2:02 pm

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Ross Miller » Thu Apr 09, 2020 7:31 pm

Thanks Carmichael, that's a good idea. That might be possible with a custom Goal in Moco.

Another thought I had was I could disable the parallel elastic component for all muscles except the biarticular muscles, subtract their passive torque-angle function from the joint torque-angle curves, then the remaining passive torque-angle curve is just a function of that local joint's coordinates and can be specified with ExpressionBasedCoordinateForce (or Bushing in 3D).

User avatar
Christopher Dembia
Posts: 506
Joined: Fri Oct 12, 2012 4:09 pm

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Christopher Dembia » Thu Apr 09, 2020 9:27 pm

The next release of OpenSim will contain a path-based ligament (Blankevoort1991Ligament) that Colin Smith contributed: http://myosin.sourceforge.net/2620/clas ... ament.html Using this might be simpler than using a muscle as a passive force element, but you can't specify the torsional stiffness at each joint as easily as you initially proposed.

User avatar
Aaron Fox
Posts: 289
Joined: Sun Aug 06, 2017 10:54 pm

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Aaron Fox » Thu Apr 09, 2020 9:38 pm

Hi Ross,

I encountered a similar problem undertaking some recent simulations of upper limb motion. We wanted to simulate varying degrees of passive force at the glenohumeral joint under different conditions - based on the data we were using the amount of passive force was dependent on both humeral elevation and rotation (i.e. two coordinates). For this I adapted the expression based coordinate force into a plugin for a 'dual' expression based coordinate force (i.e. taking into account two coordinates value and acceleration in a force expression). The only caveat to this against your example is that it only applies force to one coordinate - although you could simply have two in the model to extend it to two joints.

We're just going through the final drafts of this paper and I plan to put the code and data from it up on SimTK (including the plugin), but we can discuss further if you're interested?

Aaron

User avatar
Ross Miller
Posts: 375
Joined: Tue Sep 22, 2009 2:02 pm

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Ross Miller » Fri Apr 10, 2020 3:45 am

Hi Aaron,

That sounds a lot like ExpressionBasedBushingForce (moment as a function of two coordinates of the same joint) but if it's possible the coordinates can be from different joints, then it would work for my problem. M in my example above is a moment at just single coordinate so that's fine, e.g. M_at_knee_angle_r = f(hip_flexion_r) + f(knee_angle_r)

Ross

User avatar
Aaron Fox
Posts: 289
Joined: Sun Aug 06, 2017 10:54 pm

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Aaron Fox » Fri Apr 10, 2020 5:09 am

Hi Ross,

I believe the code is written in a way that the coordinates don't need to come from the same joint. I think the only limitation (only for certain cases) is that the resultant torques from the expression have to be applied to the 'first' coordinate from the expression - that is, I don't think I disconnected that initial feature of the expression based coordinate force being isolated to a single coordinate. It doesn't sound like that would be a problem for you though.

Aaron

User avatar
Aaron Fox
Posts: 289
Joined: Sun Aug 06, 2017 10:54 pm

Re: Passive joint moment that's a function of coordinates at multiple joints

Post by Aaron Fox » Tue Apr 14, 2020 6:52 pm

Hi Ross,

I've uploaded the .dll file and some basic example uses to a SimTK project page - https://simtk.org/projects/gh-caps-sims.

I just followed the basic plugin usage guides on OpenSim's documentation pages for how to load and use this plugin within Matlab.

We can discuss further if need be.

Aaron

POST REPLY