Page 1 of 1

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

Posted: Wed Apr 08, 2020 1:02 am
by rosshm
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

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

Posted: Thu Apr 09, 2020 3:11 pm
by ongcf
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.

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

Posted: Thu Apr 09, 2020 7:31 pm
by rosshm
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).

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

Posted: Thu Apr 09, 2020 9:27 pm
by chrisdembia
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.

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

Posted: Thu Apr 09, 2020 9:38 pm
by aafox
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

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

Posted: Fri Apr 10, 2020 3:45 am
by rosshm
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

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

Posted: Fri Apr 10, 2020 5:09 am
by aafox
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

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

Posted: Tue Apr 14, 2020 6:52 pm
by aafox
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