Some BushingForce things
Posted: Thu Nov 11, 2010 8:36 pm
Hey,
I stumbled across this page recently and figured I'd post what I've learned so far about using the BushingForce function in OpenSim, and some of the problems you might face since I've been using it quite a bit in my work.
Some of the stuff mentioned here was (shamelessly) plagiarized from the OpenSim forum post https://simtk.org/forum/message.php?msg_id=5130
In brief (this is from the Docygen documentation, and the forum post mentioned above):
* A Bushing Force is the force proportional to the deviation of two frames. One can think of the Bushing as being composed of 3 linear and 3 torsional spring-dampers, which act along or about the bushing frames. The underlying Force in Simbody is a SimtK::Force::LinearBushing
An example XML representation looks like this:
<BushingForce name = "L_Bushing">
<body_1> pelvis </body_1>
<body_2>lumbar5</body_2>
<location_body_1>0.0 0.0 0.0</location_body_1>
<orientation_body_1>0.0 0.0 0.0</orientation_body_1>
<location_body_2>0.0 0.0 0.0</location_body_2>
<orientation_body_2>0.0 0.0 0.0</orientation_body_2>
<rotational_stiffness>10.0 20.0 30.0</rotational_stiffness>
<translational_stiffness>0.0 0.0 0.0</translational_stiffness>
<rotational_damping>0.0 0.0 0.0</rotational_damping>
<translational_damping>0.0 0.0 0.0</translational_damping>
</BushingForce>
I like to think of the BushingForce as sort of a diagonal stiffness matrix where the force/torque exerted by the BushingForce is linearly proportional to the displacements/rotations (I haven't done anything with the damping terms so far, so I'm just going to assume that those are set to zero throughout and not bother with them).
I.e. if at time "t", your body is rotated about the "X" axis by 30 degrees, and your BushingForce rotational_stiffness in the X-direction is 10.0Nm/rad, then
BushingForce exerted on body_1 (at time t) = 10Nm/rad * 30deg * (pi radian/180 deg)
while
BushingForce exerted on body_2 (at time t) = -BushingForce exerted on body_1 (at time t)
To get OpenSim to calculate this for you automatically, go to
Analyze -> Analyses tab -> click "Add" -> ForceReporter.
You will get 12 values output for each BushingForce you have in your model -- 6 for body_1 and 6 for body_2 which correspond to the 3 translational and the 3 rotational DOFs.
A very important thing to keep in mind here though is that this is only true iff your BushingForce location coincides with the coordinates of the joint that it's acting on.
That is,
<location_body_1> of the Bushing Force <=> <location_in_parent> of the Joint
<location_body_2> of the Bushing Force <=> <location> of the Joint
where
BushingForce <body_1> <=> Joint <parent _body>
BushingForce <body_2> <=> Joint <child_body> (i.e. the body the Joint is defined in).
Hope this helps!
adila
I stumbled across this page recently and figured I'd post what I've learned so far about using the BushingForce function in OpenSim, and some of the problems you might face since I've been using it quite a bit in my work.
Some of the stuff mentioned here was (shamelessly) plagiarized from the OpenSim forum post https://simtk.org/forum/message.php?msg_id=5130
In brief (this is from the Docygen documentation, and the forum post mentioned above):
* A Bushing Force is the force proportional to the deviation of two frames. One can think of the Bushing as being composed of 3 linear and 3 torsional spring-dampers, which act along or about the bushing frames. The underlying Force in Simbody is a SimtK::Force::LinearBushing
An example XML representation looks like this:
<BushingForce name = "L_Bushing">
<body_1> pelvis </body_1>
<body_2>lumbar5</body_2>
<location_body_1>0.0 0.0 0.0</location_body_1>
<orientation_body_1>0.0 0.0 0.0</orientation_body_1>
<location_body_2>0.0 0.0 0.0</location_body_2>
<orientation_body_2>0.0 0.0 0.0</orientation_body_2>
<rotational_stiffness>10.0 20.0 30.0</rotational_stiffness>
<translational_stiffness>0.0 0.0 0.0</translational_stiffness>
<rotational_damping>0.0 0.0 0.0</rotational_damping>
<translational_damping>0.0 0.0 0.0</translational_damping>
</BushingForce>
I like to think of the BushingForce as sort of a diagonal stiffness matrix where the force/torque exerted by the BushingForce is linearly proportional to the displacements/rotations (I haven't done anything with the damping terms so far, so I'm just going to assume that those are set to zero throughout and not bother with them).
I.e. if at time "t", your body is rotated about the "X" axis by 30 degrees, and your BushingForce rotational_stiffness in the X-direction is 10.0Nm/rad, then
BushingForce exerted on body_1 (at time t) = 10Nm/rad * 30deg * (pi radian/180 deg)
while
BushingForce exerted on body_2 (at time t) = -BushingForce exerted on body_1 (at time t)
To get OpenSim to calculate this for you automatically, go to
Analyze -> Analyses tab -> click "Add" -> ForceReporter.
You will get 12 values output for each BushingForce you have in your model -- 6 for body_1 and 6 for body_2 which correspond to the 3 translational and the 3 rotational DOFs.
A very important thing to keep in mind here though is that this is only true iff your BushingForce location coincides with the coordinates of the joint that it's acting on.
That is,
<location_body_1> of the Bushing Force <=> <location_in_parent> of the Joint
<location_body_2> of the Bushing Force <=> <location> of the Joint
where
BushingForce <body_1> <=> Joint <parent _body>
BushingForce <body_2> <=> Joint <child_body> (i.e. the body the Joint is defined in).
Hope this helps!
adila