Interaction between maximum force and maximum excitation in CoordinateActuators

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

Interaction between maximum force and maximum excitation in CoordinateActuators

Post by Ross Miller » Wed Feb 02, 2022 7:13 am

Hi all,

I'm confused on how CoordinateActuators work and was hoping someone could clarify. I suspect this has been answered previously but I wasn't able to find it. I also looked through the code on GitHub to try and find the form of the calculations below but couldn't locate them.

CoordinateActuators (and ActivationCoordinateActuators) have an "optimal_force" parameter and a "max_control" parameter. Is the force produce by the actuator equal to optimal_force*control (and, for ActivationCoordinateActuators, similarly equal to optimal_force*activation), regardless of the value of max_control?

Another way of asking this question: is the "optimal_force" of a CoordinateActuator (or ActivationCoordinateActuator) the force produced when the control (or activation) = max_control, or is it the force produce when the control (or activation) = 1.0?

My confusion is arising from comments in model files often stating that the optimal_force parameter is "the maximum force produced by the actuator", but that force seems like it's only necessarily the maximum force if max_control = 1.0, unless the control in the actuator's force calculation is scaled by the max_control or something similar.

My application is I want to make an actuator that can produce a muscle-like torque magnitude, e.g. ~100 Nm, but is "expensive" to used compared to muscles, e.g. it would have to use an excitation of u = 10 to produce this torque instead of u = ~1 for a muscle.

A more specific example/question: if I want my actuator to have a maximum torque of 100 Nm and I want it to produce that torque when the control = 10, what values should I set optimal_force and max_control? My intuition is optimal_force = 100 and max_control = 10, but from above, I'm unclear on if this means the maximum force output of the actuator is then optimal_force*u (which would not be 100 Nm here) or optimal_force*u/max_control (which would equal 100 Nm). I've also seen actuators defined with max_control of +Inf, which is further adding to my confusion on when this actuator would produce a force equal to optimal_force.

Thanks much!
Ross

Tags:

User avatar
Jacob J. Banks
Posts: 88
Joined: Tue Jul 15, 2014 5:17 am

Re: Interaction between maximum force and maximum excitation in CoordinateActuators

Post by Jacob J. Banks » Wed Feb 02, 2022 4:37 pm

Ross,
My experience informs me that the 'optimal force' is really in fact the 'maximum force'.

Therefore, in your desired application I would set the 'optimal force' to 10N and max activation to 10 (so it would take a "u" of 10 to get 100N).

As I am sure you can deduce, setting optimal force/torque to infinity is handy when/if you have joint with no muscles crossing it. Then that torque actuator won't impact your optimization much... if at all. Similarly, I often set max/min activation to infinity just to insure that the optimization will solve.

Hope this helps (and I am correct!).
Jake Banks

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

Re: Interaction between maximum force and maximum excitation in CoordinateActuators

Post by Carmichael Ong » Thu Feb 03, 2022 11:01 am

You are both spot on, optimal_force = 10 and max_control = 10 is correct here (and either min_control = -10 or min_control = 0 depending on your application). For both of these classes, generalized force = optimal_force * (some control value). The key function in code for this is "computeActuation()". Here are the relevant lines for ActivationCoordinateActuator and CoordinateActuator. Note that I was a little vague on "some control value" above, as you can see in CoordinateActuator that it directly uses "getControl(state)", while ActivationCoordinateActuator pulls the "activation" state variable (because "activation" is not technically the control value; just like in muscles, the true "control" is like an excitation input into the muscle, but the final force computed is based on the "activation" after first-order dynamics).

Ross, your use of increasing or decreasing the "optimal_force" parameter to make it more or less expensive, respectively, for an optimization problem is right on, and we often use this in some of the typical pipelines like SO/CMC for reserve actuators.

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

Re: Interaction between maximum force and maximum excitation in CoordinateActuators

Post by Ross Miller » Fri Feb 04, 2022 9:48 am

Thanks both. If I'm understanding correctly, "optimal_force" is NOT the maximum force the actuator can produce, it's the force the actuator produces when it is fed a control value of u = 1.0 (in other words, "optimal_force" could be considered the "force_per_unit_control"), and the actual maximum force is optimal_force*max_control.

Ross

User avatar
Jacob J. Banks
Posts: 88
Joined: Tue Jul 15, 2014 5:17 am

Re: Interaction between maximum force and maximum excitation in CoordinateActuators

Post by Jacob J. Banks » Fri Feb 04, 2022 12:44 pm

Yes, that is a more elegant and better way of putting it (e.g., force/unit control).
It should only be viewed as a 'maximum force' in the same way the MTAs treat it as a 'maximum force'... as force/unit control. Sorry for any confusion.
Jake Banks

POST REPLY