Page 1 of 1

Add prescribed force - reference axis

Posted: Wed Mar 15, 2017 4:44 am
by mariakrgrg
Hello,
I want to add an external force to a body with these settings:
The point of application should be in body frame, so that when the body moves, the force to 'follow' it.
But the direction of the force should be constant in x-direction of global frame.

Can someone help me how to do that using the API? I think I am doing it right, but I am not sure, because the visualization in the GUI is a bit tricky!

Here is my code now:

Code: Select all

 PrescribedForce *prescribedForce = new PrescribedForce(&model.updBodySet().get("tibia_r"));
	prescribedForce->setForceFunctions(new Constant(-110.0), new Constant(0.0), new Constant(0.0));
	prescribedForce->setPointFunctions(new Constant(0.0), new Constant(-0.3), new Constant(0.0));
	prescribedForce->setForceIsInGlobalFrame(true);
	prescribedForce->setPointIsInGlobalFrame(false);
	model.addForce(prescribedForce);
When I export the force with ForceReporter, and load it in the OpenSim GUI, it seems like the point of application is right, but when the tibia rotates, rotates the force as well, as if the direction of the force is set in x-direction of body frame (not global).

Re: Add prescribed force - reference axis

Posted: Wed Mar 15, 2017 2:48 pm
by tkuchida
Some suggestions:
- Use model.print("test.osim") to confirm that the model has been correctly constructed.
- A PrescribedForce is defined programmatically in this example: https://github.com/opensim-org/opensim- ... mplete.cpp
- Test on a simpler model first (e.g., a block or chain of blocks) in a variety of scenarios to verify that the PrescribedForce is working as you expect.

Re: Add prescribed force - reference axis

Posted: Sun Mar 19, 2017 4:43 am
by mariakrgrg
Tom, thanks for your response.
I followed your advices and I simulated a simple senario with a ground and a block with different local axis and no gravity. I think I understood how the force is applied by observing the movement of the block. But still cannot visualize the force arrow properly, in the GUI.
That's why I am not sure 100% that I know it.

To be more specific, I load the motion file, then I click "Associate motion data..." (to load the prescribed force as I exported it programmatically).
Then "Edit motion objects...", select my force and "Edit" again:

Image

"Force Expressed in: ground" is like "PrescribedForce::setForceIsInGlobalFrame(true)" from the API?
And correspondingly "Point Expressed in: "tibia_r" is like "PrescribedForce::setPointIsInGlobalFrame(false)" ?

Re: Add prescribed force - reference axis

Posted: Sun Mar 19, 2017 7:15 pm
by tkuchida
"Force Expressed in: ground" is like "PrescribedForce::setForceIsInGlobalFrame(true)" from the API? And correspondingly "Point Expressed in: "tibia_r" is like "PrescribedForce::setPointIsInGlobalFrame(false)" ?
That sounds right. There is some additional information here:
- Doxygen: https://simtk.org/api_docs/opensim/api_ ... ml#details
- Confluence: http://simtk-confluence.stanford.edu:80 ... h+a+Motion