Can a body have 2 joints?
- Elon Martin
- Posts: 6
- Joined: Sat Oct 05, 2013 12:11 pm
Can a body have 2 joints?
I am trying to create a mesh type system in OpenSim that can contract and extend when forces act upon it. In real life, each body segment in the system would have three joints on it. I have no idea if OpenSim lets you do this but It seems like it would be rather complicated to accomplish. Any help is gladly appreciated!
Re: Can a body have 2 joints?
Hi Elon,
A body can have multiple joints. You can look at the pelvis as an example (two legs and a trunk). If you want a looped structure of bodies, there needs to be at least 1 constraint (rather than a joint).
Cheers,
-james
A body can have multiple joints. You can look at the pelvis as an example (two legs and a trunk). If you want a looped structure of bodies, there needs to be at least 1 constraint (rather than a joint).
Cheers,
-james
- Elon Martin
- Posts: 6
- Joined: Sat Oct 05, 2013 12:11 pm
Re: Can a body have 2 joints?
So in the case of the pelvis, the body object only has one associated joint in the xml code (pelvis to trunk). The two leg joints are actually associated with each femur body object. They connect and I suppose they would be considered pelvis joints. I guess what I am asking is can a single body object have more than one associated joint in the xml code?
Re: Can a body have 2 joints?
Hi Elon,
You can't have bodies with two joints like you are suggesting. You would have to use a combination of 'slave' bodies connected with constraints. The Simbody manual has some description of this;
https://simtk.org/docman/?group_id=47
Gluck,
-james
You can't have bodies with two joints like you are suggesting. You would have to use a combination of 'slave' bodies connected with constraints. The Simbody manual has some description of this;
https://simtk.org/docman/?group_id=47
Gluck,
-james
- Michael Sherman
- Posts: 806
- Joined: Fri Apr 01, 2005 6:05 pm
Re: Can a body have 2 joints?
Hi, Elon. To add to James' response --
The discussion in the Simbody theory manual is in section 2.3 and is brief. This is easier to do in practice than it may sound. When you have a topological loop in the graph formed by the bodies and joints, you have to cut the loop so that the mobility of the bodies is represented by a tree (that is, each body has a single joint leading back towards the ground). That establishes the set of coordinates in which the system's motion is expressed. Then constraints must be added to restrict that motion in a way consistent with the loop.
The easiest way to do that is to make the cut in a body, rather than at a joint which at first seems more natural. That is, you pick one of the bodies that is in the loop and split it into two bodies, each with half the mass (and half the inertia). Each body specifies one of the two joints. Then add a Weld constraint to reattach the two halves of the body.
OpenSim's assembly analysis will solve for a set of coordinates that satisfies the Weld constraint. You may have to help by setting the initial conditions so that the welded pieces are brought approximately together (say within 45 degrees of the proper orientation). Then OpenSim will go the rest of the way to satisfy the Weld to a very high precision, after which the body will look and behave as though it were in just one piece.
We have plans to automate this process in a future OpenSim release, but for now you have to do it manually.
Regards,
Sherm
The discussion in the Simbody theory manual is in section 2.3 and is brief. This is easier to do in practice than it may sound. When you have a topological loop in the graph formed by the bodies and joints, you have to cut the loop so that the mobility of the bodies is represented by a tree (that is, each body has a single joint leading back towards the ground). That establishes the set of coordinates in which the system's motion is expressed. Then constraints must be added to restrict that motion in a way consistent with the loop.
The easiest way to do that is to make the cut in a body, rather than at a joint which at first seems more natural. That is, you pick one of the bodies that is in the loop and split it into two bodies, each with half the mass (and half the inertia). Each body specifies one of the two joints. Then add a Weld constraint to reattach the two halves of the body.
OpenSim's assembly analysis will solve for a set of coordinates that satisfies the Weld constraint. You may have to help by setting the initial conditions so that the welded pieces are brought approximately together (say within 45 degrees of the proper orientation). Then OpenSim will go the rest of the way to satisfy the Weld to a very high precision, after which the body will look and behave as though it were in just one piece.
We have plans to automate this process in a future OpenSim release, but for now you have to do it manually.
Regards,
Sherm
- Tom Van Wouwe
- Posts: 3
- Joined: Sun Sep 07, 2014 9:22 am
Re: Can a body have 2 joints?
In order to do predictive simulations I want to build up a model from ground via the feet up to the torso. This means (in topology view) that I do have to create a loop (that comes together at the pelvis) and I will try it like James and Michael have suggested. I am now trying to understand how the state, specifically the kinematics, of the model are kept consistent. Suppose I assign a kinematic state to the model which breaks my weld constraint between my two pelvis bodies. To respect the weld constraint in the model, some coordinates will need to be adapted. How does OpenSim/Simbody deal with this?
Regards
Tom
Regards
Tom
- Thomas Uchida
- Posts: 1789
- Joined: Wed May 16, 2012 11:40 am
Re: Can a body have 2 joints?
See the Simbody Theory Manual here: https://github.com/simbody/simbody/tree ... imbody/doc (e.g., Section 8.2, Chapter 10). For example, if you call Coordinate::setValue() with the "enforce constraints" flag set to true (see the doxygen here: https://simtk.org/api_docs/opensim/api_ ... 0004213229), the coordinate's value will be set and then the model's pose will be adjusted so that the kinematic constraints are satisfied.Suppose I assign a kinematic state to the model which breaks my weld constraint between my two pelvis bodies. To respect the weld constraint in the model, some coordinates will need to be adapted. How does OpenSim/Simbody deal with this?
Additional information can be found in the doxygen documentation for the SimTK::Assembler class here: https://simtk.org/api_docs/simbody/3.5/ ... mbler.html.