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
Passive joint moment that's a function of coordinates at multiple joints
- Ross Miller
- Posts: 375
- Joined: Tue Sep 22, 2009 2:02 pm
- 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
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.
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.
- 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
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).
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).
- 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
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
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
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
- 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
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
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
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
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
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
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