Using a custom joint on a prosthetic leg - Forward Dynamics question
Posted: Fri Nov 12, 2021 4:40 am
Hi Everyone,
Currently, I am developing a plugin that creates a new custom joint. This joint is simply a torsional spring that replaces the ankle joint in a prosthetic leg. This spring should always pull the foot back to the zero position.
The plugin is finished, and inserted in the ankle of a model with a prosthetic leg. Now, what I am attempting to do is run Forward Dynamics (FD) simulations to see the behavior of the plugin on the model.
This results in unstable simulations, where the model 'goes crazy' and the leg shoots upwards behind the head. This is somewhat expected because the FD blindly applies the controls from the controls file.
What I found in another forum post is that you can make use of a 'correction controller' (CC). This applies small amounts of torque to all coordinates of the model to counter the accumulation of errors. When I use the correction controller in my FD simulations, the simulation does become stable, and the model follows the desired motion nicely.
However, the CC applies a lot of torque in the ankle to sustain the motion. The total torque on the ankle is now 50% from the correction controller and about 50% from the spring plugin that I made. With so much torque coming from the CC, rather than the spring, I cannot see the behavior of the spring on the model.
My goal is to disable the CC for the ankle joint only.
What I tried first is to specify the actuators to be tracked. This can be done in the FD setup xml file. Under 'correction controller' there is an XML-node called <actuator_list>. However, after trying many things, I am about 95% confident that the CC ignores this <actuator_list> information (perhaps it is bugged?).
So now my questions are:
1. Is there a way to disable the tracking of the Correction Controller for one joint?
2. If this is not possible, what is the best way to see the effect that a custom actuator/joint has on the motion of a model?
This might be a confusing question, so I hope I explained it well enough. Any help would be appreciated greatly!
Thank you in advance,
Levi
Currently, I am developing a plugin that creates a new custom joint. This joint is simply a torsional spring that replaces the ankle joint in a prosthetic leg. This spring should always pull the foot back to the zero position.
The plugin is finished, and inserted in the ankle of a model with a prosthetic leg. Now, what I am attempting to do is run Forward Dynamics (FD) simulations to see the behavior of the plugin on the model.
This results in unstable simulations, where the model 'goes crazy' and the leg shoots upwards behind the head. This is somewhat expected because the FD blindly applies the controls from the controls file.
What I found in another forum post is that you can make use of a 'correction controller' (CC). This applies small amounts of torque to all coordinates of the model to counter the accumulation of errors. When I use the correction controller in my FD simulations, the simulation does become stable, and the model follows the desired motion nicely.
However, the CC applies a lot of torque in the ankle to sustain the motion. The total torque on the ankle is now 50% from the correction controller and about 50% from the spring plugin that I made. With so much torque coming from the CC, rather than the spring, I cannot see the behavior of the spring on the model.
My goal is to disable the CC for the ankle joint only.
What I tried first is to specify the actuators to be tracked. This can be done in the FD setup xml file. Under 'correction controller' there is an XML-node called <actuator_list>. However, after trying many things, I am about 95% confident that the CC ignores this <actuator_list> information (perhaps it is bugged?).
So now my questions are:
1. Is there a way to disable the tracking of the Correction Controller for one joint?
2. If this is not possible, what is the best way to see the effect that a custom actuator/joint has on the motion of a model?
This might be a confusing question, so I hope I explained it well enough. Any help would be appreciated greatly!
Thank you in advance,
Levi