Hi everyone,
According to the research [1], during movement, the joint strength (i.e. the torque limit of a joint) is dynamic and is a function of joint angles. In Moco, we use CoordinateActuator to drive a joint with calling setMaxControl(c) to set the torque limit. The c in the parenthesis is a constant. However, this way can only result in a static joint strength instead of a dynamic joint strength proposed in [1].
I know that there is a class OpenSim:: MocoControlBoundConstraint that could set different joint torque limits over time. But I think that it makes the torque limit a function of the time, rather than a function of abovementioned joint angles. Is there any way to set the dynamic joint strength?
Thanks in advance,
Simon
Reference
[1] Stobbe, T. (1982) The development of a practical strength testing program in industry. Unpublished Ph.D. thesis, University of Michigan, Ann Arbor.
Dynamic Joint Strength
- Pasha van Bijlert
- Posts: 227
- Joined: Sun May 10, 2020 3:15 am
Re: Dynamic Joint Strength
Hi Simon,
I'm not sure if this is what you're after, but ExpressionBasedCoordinateForce can add joint torques/moments as a function of the joint angle (generalized coordinate). This is like adding a rotational spring to a hinge joint. I wrote some code to add a quadratic spring to a model in this thread on the main OpenSim forum: viewtopicPhpbb.php?f=91&t=13581&p=38981&start=0&view= The formulation is specific to my situation though, so make sure you adapt it to your needs.
This is obviously not a controllable moment, in the sense that it responds purely to the state (so joint angle, and velocity if you add damping). If you're actually looking for something that is controllable, but has a max moment which depends on the joint angle, I suppose this is just a muscle (perhaps without contraction dynamics, if you want something that's instantaneous).
Cheers,
Pasha
I'm not sure if this is what you're after, but ExpressionBasedCoordinateForce can add joint torques/moments as a function of the joint angle (generalized coordinate). This is like adding a rotational spring to a hinge joint. I wrote some code to add a quadratic spring to a model in this thread on the main OpenSim forum: viewtopicPhpbb.php?f=91&t=13581&p=38981&start=0&view= The formulation is specific to my situation though, so make sure you adapt it to your needs.
This is obviously not a controllable moment, in the sense that it responds purely to the state (so joint angle, and velocity if you add damping). If you're actually looking for something that is controllable, but has a max moment which depends on the joint angle, I suppose this is just a muscle (perhaps without contraction dynamics, if you want something that's instantaneous).
Cheers,
Pasha
- Nicholas Bianco
- Posts: 1050
- Joined: Thu Oct 04, 2012 8:09 pm
Re: Dynamic Joint Strength
Hi Simon,
I think what you're looking for is something like the actuators in the this study: https://pubmed.ncbi.nlm.nih.gov/26258930/.
That study used CoordinateActuators with "muscle-like" properties to improve efficiency while including force-length and force-velocity properties.
There's a version of these actuators in the OpenSim repository, located in the Sandbox files: https://github.com/opensim-org/opensim- ... Actuator.h.
If you create a local build you could access these, but we should probably add it in the main libraries at some point.
Best,
-Nick
I think what you're looking for is something like the actuators in the this study: https://pubmed.ncbi.nlm.nih.gov/26258930/.
That study used CoordinateActuators with "muscle-like" properties to improve efficiency while including force-length and force-velocity properties.
There's a version of these actuators in the OpenSim repository, located in the Sandbox files: https://github.com/opensim-org/opensim- ... Actuator.h.
If you create a local build you could access these, but we should probably add it in the main libraries at some point.
Best,
-Nick
- Chonghui Zhang
- Posts: 10
- Joined: Wed May 19, 2021 1:58 am
Re: Dynamic Joint Strength
Hi Nick,
Could you tell me how to use this kind of customized actuator in Moco? It is not in the main library and the GUI could not recognize it.
Thanks,
San
Could you tell me how to use this kind of customized actuator in Moco? It is not in the main library and the GUI could not recognize it.
Thanks,
San
- Simon Jeng
- Posts: 87
- Joined: Fri Sep 07, 2018 8:26 pm
Re: Dynamic Joint Strength
Hi Nick,
Thanks a lot, that's helpful.
Before manipulating this muscle-like actuator, I have tried to create a plugin for a custom actuator. The custom actuator is the PistonActuator in the example "CustomActuatorExample". I added DLL.h, RegisterTypes.c and RegisterTypes.h for it and compiled the example "CustomActuatorExample" into a .dll and copied it into <OpenSimInstallDir>/plugins. I launched OpenSim and loaded the plugin from Tools->User Plugins. The plugin was successfully added, but when I load the .osim of this example in the GUI, an error appeared:
What comes to this? To make it easier for you to find the reason, the files are attached at the bottom.
In order to access the muscle-like actuator you recommended, should I load it into OpenSim just like the way I did for "CustomActuatorExample"?
Best,
Simon
Thanks a lot, that's helpful.
Before manipulating this muscle-like actuator, I have tried to create a plugin for a custom actuator. The custom actuator is the PistonActuator in the example "CustomActuatorExample". I added DLL.h, RegisterTypes.c and RegisterTypes.h for it and compiled the example "CustomActuatorExample" into a .dll and copied it into <OpenSimInstallDir>/plugins. I launched OpenSim and loaded the plugin from Tools->User Plugins. The plugin was successfully added, but when I load the .osim of this example in the GUI, an error appeared:
Code: Select all
Object::newInstanceOfType(): object type '{PistonActuator}' is not a registered Object! It will be ignored.
In order to access the muscle-like actuator you recommended, should I load it into OpenSim just like the way I did for "CustomActuatorExample"?
Best,
Simon
- Attachments
-
- CustomActuatorExample.zip
- (30.98 KiB) Downloaded 62 times
- Nicholas Bianco
- Posts: 1050
- Joined: Thu Oct 04, 2012 8:09 pm
Re: Dynamic Joint Strength
Hi Simon,
Is it only the PistonActuator type that is an issue, or does ControllableSpring fail too (you may need to remove PistonActuator from the model to test if ControllableSpring works)? Let's try narrowing that down first.
-Nick
Is it only the PistonActuator type that is an issue, or does ControllableSpring fail too (you may need to remove PistonActuator from the model to test if ControllableSpring works)? Let's try narrowing that down first.
-Nick