Hello,
I am interested in determining the wrench (force and moment) at the end of a kinematic chain (arm or leg) when a set of muscle-induced joint torques are applied along that chain and the endpoint is assumed to have all motion resisted. So along the lines of equation 3 (and associated concepts) in the attached paper. I was wondering if there is a relatively straightforward way of doing this using OpenSim, rather than having to compute the Jacobian of the geometric model of the limb with respect to joint velocities.
One thought that comes to mind is applying a weld constraint to the endpoint ('fusing' it to the ground) and determining joint reactions, but this might be a bit cumbersome if I want to examine many different postures (and therefore locations of the endpoint w.r.t. the ground). Especially if I wanted to automate this process via MATLAB.
Hopefully my question makes sense. Any suggestions would be most appreciated!
Thanks,
Peter Bishop.
Determining wrench at end of a kinematic chain
- Peter Bishop
- Posts: 21
- Joined: Thu Aug 28, 2014 10:47 pm
Determining wrench at end of a kinematic chain
- Attachments
-
- Valero-Cuevas (2009); A Mathematical Approach to the Mechanical Capabilities of Limbs and Fingers.pdf
- (495.11 KiB) Downloaded 17 times
Tags:
- Thomas Uchida
- Posts: 1793
- Joined: Wed May 16, 2012 11:40 am
Re: Determining wrench at end of a kinematic chain
The weld constraint sounds like a good approach. If you will need to adjust the position/orientation of the limb and don't want to move the constraint around directly, you could connect a dummy body to Ground via a FreeJoint and connect the constraint between the dummy body and the limb. The coordinates of the FreeJoint can then be adjusted (and locked) as necessary.One thought that comes to mind is applying a weld constraint to the endpoint ('fusing' it to the ground) and determining joint reactions, but this might be a bit cumbersome if I want to examine many different postures (and therefore locations of the endpoint w.r.t. the ground).
- Peter Bishop
- Posts: 21
- Joined: Thu Aug 28, 2014 10:47 pm
Re: Determining wrench at end of a kinematic chain
Thanks Thomas, clever idea! I'll give it a go.
- Rebecca Abbott
- Posts: 12
- Joined: Wed Sep 26, 2012 12:09 pm
Re: Determining wrench at end of a kinematic chain
Hi Peter,
I'm wondering if you had any success with this?
I am attempting to do something similar with the neck model. I want to determine the wrench at the forehead when a particular muscle activation pattern is applied. However, the Jacobian is not invertible because is both not full rank and not square. I am doing these calculations outside of OpenSim in Matlab after I get the Jacobian, moment arms, force-length multipliers, and generalized forces from gravity from OpenSim for a particular static pose.
Using your method with forward dynamics, you will not be able to ensure that there is no internal torque or motion at the intermediate joints, correct? I'm not sure what model you are using, but if it has more than 6 DOF, the problem may be ill-posed.
Eager to hear if this approach worked!
Rebecca
I'm wondering if you had any success with this?
I am attempting to do something similar with the neck model. I want to determine the wrench at the forehead when a particular muscle activation pattern is applied. However, the Jacobian is not invertible because is both not full rank and not square. I am doing these calculations outside of OpenSim in Matlab after I get the Jacobian, moment arms, force-length multipliers, and generalized forces from gravity from OpenSim for a particular static pose.
Using your method with forward dynamics, you will not be able to ensure that there is no internal torque or motion at the intermediate joints, correct? I'm not sure what model you are using, but if it has more than 6 DOF, the problem may be ill-posed.
Eager to hear if this approach worked!
Rebecca
- Peter Bishop
- Posts: 21
- Joined: Thu Aug 28, 2014 10:47 pm
Re: Determining wrench at end of a kinematic chain
Hello Rebecca,
thanks for your thoughts! I must admit that I have yet to try out testing this in OpenSim. This is something I've been hoping to work on in my spare time, but unfortunately I haven't had much of that lately. So sorry I can't give you any progress update as yet.
I think I understand what you are saying regarding the use of forward dynamics, and yes I expect that there would be motion at the intermediate joints. I was thinking of taking the results for the ~first time step as my estimate of the wrench for the given test posture. An alternative approach I've pondered is using a combination of the inverse dynamics (once muscle-induced moments are determined) and/or joint reaction tools instead. I'm still thinking about that...
Happy to hear any further thoughts you may have!
Peter.
thanks for your thoughts! I must admit that I have yet to try out testing this in OpenSim. This is something I've been hoping to work on in my spare time, but unfortunately I haven't had much of that lately. So sorry I can't give you any progress update as yet.
I think I understand what you are saying regarding the use of forward dynamics, and yes I expect that there would be motion at the intermediate joints. I was thinking of taking the results for the ~first time step as my estimate of the wrench for the given test posture. An alternative approach I've pondered is using a combination of the inverse dynamics (once muscle-induced moments are determined) and/or joint reaction tools instead. I'm still thinking about that...
Happy to hear any further thoughts you may have!
Peter.
- Peter Bishop
- Posts: 21
- Joined: Thu Aug 28, 2014 10:47 pm
Re: Determining wrench at end of a kinematic chain
Hello Thomas,
it's taken me a while, but I've finally got around to testing out your suggestion. Conceptually I think I understand what I need to do to make it work, but I've managed to confuse myself (!). I created a simple test model with two joints, an image of which is below (I've also included all the necessary files as an attachment):
The end point where I wish to measure the wrench is also labelled. I added a dummy body at this end point and connected it to the ground via a FreeJoint, and welded it to Segment3, as per the below topology (on the left):
Now, when I provide some muscle forces to the JointReaction tool, the reactions for the FreeJointWithGround are all zero (and nothing is reported for the weld between the dummy body and Segment3). I can make the reactions non-zero if I lock all 6 dofs for the FreeJointWithGround, but then model won't behave; adjusting one of the two joints causes the other joint (and some of the 6 dofs connecting Segment 1 with the ground) to vary!
I've also tried using two dummy bodies as per the topology on the right in the above image. The first dummy body is parented to Segment 3 via a 6-dof custom joint, located at the end point I'm interested in. This first dummy body is then welded to a second dummy body, which is spatially coincident with it. The idea behind this approach was to create a 'legitimate' joint at the end point (called "EndJoint" in the model file), which when all of its 6 dofs are locked I can get reaction forces and moments (= wrench). To do this I need to set the tag <is_free_to_satisfy_constraints> to false for all 6 dofs of the FreeJointWithGround joint between dummy body 2 and the ground, otherwise the model behaves weirdly as I try to adjust the values of the joint angles.
Still, looking at the results spat out by the JointReaction tool, I am not convinced that their values are correct. I've included a simple working example with just one muscle (muscle 3) that provides force (and gravity is turned off) that should help demonstrate this.
If you or anyone else has any insight that could help clarify things for me, that would be most appreciated!
Many thanks,
Peter.
it's taken me a while, but I've finally got around to testing out your suggestion. Conceptually I think I understand what I need to do to make it work, but I've managed to confuse myself (!). I created a simple test model with two joints, an image of which is below (I've also included all the necessary files as an attachment):
The end point where I wish to measure the wrench is also labelled. I added a dummy body at this end point and connected it to the ground via a FreeJoint, and welded it to Segment3, as per the below topology (on the left):
Now, when I provide some muscle forces to the JointReaction tool, the reactions for the FreeJointWithGround are all zero (and nothing is reported for the weld between the dummy body and Segment3). I can make the reactions non-zero if I lock all 6 dofs for the FreeJointWithGround, but then model won't behave; adjusting one of the two joints causes the other joint (and some of the 6 dofs connecting Segment 1 with the ground) to vary!
I've also tried using two dummy bodies as per the topology on the right in the above image. The first dummy body is parented to Segment 3 via a 6-dof custom joint, located at the end point I'm interested in. This first dummy body is then welded to a second dummy body, which is spatially coincident with it. The idea behind this approach was to create a 'legitimate' joint at the end point (called "EndJoint" in the model file), which when all of its 6 dofs are locked I can get reaction forces and moments (= wrench). To do this I need to set the tag <is_free_to_satisfy_constraints> to false for all 6 dofs of the FreeJointWithGround joint between dummy body 2 and the ground, otherwise the model behaves weirdly as I try to adjust the values of the joint angles.
Still, looking at the results spat out by the JointReaction tool, I am not convinced that their values are correct. I've included a simple working example with just one muscle (muscle 3) that provides force (and gravity is turned off) that should help demonstrate this.
If you or anyone else has any insight that could help clarify things for me, that would be most appreciated!
Many thanks,
Peter.
- Attachments
-
- TestModel.zip
- (39.31 KiB) Downloaded 15 times