Dear Dr. Thomas Geijtenbeek,
I'm using Scone to train an agent with SconePy. Regarding SconePy (and the simulation methods), there're some terms making me confused:
1. Beside the term "excitation" in class Muscle() in SconePy, there's also another term called "activation", is that used for MTU muscle force calculation, as described in reference [29] of the paper by Geyer and Herr?
2. With both "activation" and "excitation" plotted in Analysis Window for muscles in healthy gait, I found that their values are very close and it seems like the colour of muscles in animation depend on the corresponding "activation" value. Then what are "excitation" for? in another word, what's the difference between "excitation" and "activation"?
3. And why does the "activation" keep changing during the simulation?
4. In Sconegym, I found that in the "reset()" function, after having randomized the dof poses, velocities and activations, etc. Functions "init_muscle_activation()" and "init_states_from_dofs()" are called everytime, what happens behind that? Why only with "set_dof_poses()" or "set_dof_velocities()" doesn't work?
5. What is the function "adjust_state_for_load()" for? and correspondingly what is "init_load"? There's also a method "contact_load()" in class Leg(), what is the difference between "force" and "load"?
I'd really appreciate it if you could give any hints on those questions.
Thanks in advance.
API terms in SconePy
- Thomas Geijtenbeek
- Posts: 473
- Joined: Wed Mar 12, 2014 8:08 am
Re: API terms in SconePy
The activation is indeed what is used in the force calculation, the excitation is the input signal. Search for "muscle activation dynamics" to learn all about how the two are related
The init_state_from_dofs() function equilibrates the muscles, i.e. it determines the tendon and fiber length of each muscle, based on the MTU length and the activation. It must be called once after all calls to init_muscle_activations() and set_dof_poses/velocities(); these functions don't equilibrate to reduce redundancy and increase performance.
The adjust_state_for_load() moves the model vertically so that the initial contact force matches the the init_load value; i.e. it makes sure the model stands on the ground with a certain load. The init_load is the fraction of the total gravitational pull of the model (e.g. init_load = 1 means the body stands on the ground with all of its weight).
The init_state_from_dofs() function equilibrates the muscles, i.e. it determines the tendon and fiber length of each muscle, based on the MTU length and the activation. It must be called once after all calls to init_muscle_activations() and set_dof_poses/velocities(); these functions don't equilibrate to reduce redundancy and increase performance.
The adjust_state_for_load() moves the model vertically so that the initial contact force matches the the init_load value; i.e. it makes sure the model stands on the ground with a certain load. The init_load is the fraction of the total gravitational pull of the model (e.g. init_load = 1 means the body stands on the ground with all of its weight).
Re: API terms in SconePy
Thanks for the reply. Now I have a better understanding on such so called forward dynamics mechanism. Following your answer I still have two questions.
1. Since the excitation is the input of muscle, and all muscles are actuators. Does it mean the Arg of function set_actuator_input() should be the excitations?
2. What if the actuators are joint motors? I think in this case the Arg of function set_actuator_input() is exactly the output torque one wants to have, with all coefficients like k_p and k_d are set as 0?
1. Since the excitation is the input of muscle, and all muscles are actuators. Does it mean the Arg of function set_actuator_input() should be the excitations?
2. What if the actuators are joint motors? I think in this case the Arg of function set_actuator_input() is exactly the output torque one wants to have, with all coefficients like k_p and k_d are set as 0?