Page 1 of 1

Is it possible to define 2 joints on one body?

Posted: Fri May 14, 2021 6:39 am
by zxyzxyzxy
Hello all, I'm trying to add a 3D model to the model Gait2392. Since my model is base on parallel robot, I have two joints which has the same child frame. And when I try to open it in Opensim, the software has no response. I wonder if it's because that there can't be two joints who have the same child frame.
Here's my code. Joint "qiufu1" and joint "qiufulianjie" have the same child frame "qiufu1_offset".

Code: Select all

<WeldJoint name="qiufu1">
	<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The parent frame for the joint.).-->
	<socket_parent_frame>tuigan1_offset</socket_parent_frame>
	<!--Path to a Component that satisfies the Socket 'child_frame' of type PhysicalFrame (description: The child frame for the joint.).-->
	<socket_child_frame>qiufu1_offset</socket_child_frame>
	<!--Physical offset frames owned by the Joint that are typically used to satisfy the owning Joint's parent and child frame connections (sockets). PhysicalOffsetFrames are often used to describe the fixed transformation from a Body's origin to another location of interest on the Body (e.g., the joint center). When the joint is deleted, so are the PhysicalOffsetFrame components in this list.-->
	<frames>
		<PhysicalOffsetFrame name="tuigan1_offset">
			<!--The geometry used to display the axes of this Frame.-->
			<FrameGeometry name="frame_geometry">
				<!--Path to a Component that satisfies the Socket 'frame' of type Frame.-->
				<socket_frame>..</socket_frame>
				<!--Scale factors in X, Y, Z directions respectively.-->
				<scale_factors>0.20000000000000001 0.20000000000000001 0.20000000000000001</scale_factors>
			</FrameGeometry>
			<!--Path to a Component that satisfies the Socket 'parent' of type C (description: The parent frame to this frame.).-->
			<socket_parent>/bodyset/tuigan1</socket_parent>
			<!--Translational offset (in meters) of this frame's origin from the parent frame's origin, expressed in the parent frame.-->
			<translation>0.0 0 0</translation>
			<!--Orientation offset (in radians) of this frame in its parent frame, expressed as a frame-fixed x-y-z rotation sequence.-->
			<orientation>0 0 0</orientation>
			</PhysicalOffsetFrame>
			<PhysicalOffsetFrame name="qiufu1_offset">
			<!--The geometry used to display the axes of this Frame.-->
			<FrameGeometry name="frame_geometry">
				<!--Path to a Component that satisfies the Socket 'frame' of type Frame.-->
				<socket_frame>..</socket_frame>
				<!--Scale factors in X, Y, Z directions respectively.-->
				<scale_factors>0.20000000000000001 0.20000000000000001 0.20000000000000001</scale_factors>
				</FrameGeometry>
			<!--Path to a Component that satisfies the Socket 'parent' of type C (description: The parent frame to this frame.).-->
			<socket_parent>/bodyset/qiufu1</socket_parent>
			<!--Translational offset (in meters) of this frame's origin from the parent frame's origin, expressed in the parent frame.-->
			<translation>0 0.01 -0.065</translation>
			<!--Orientation offset (in radians) of this frame in its parent frame, expressed as a frame-fixed x-y-z rotation sequence.-->
			<orientation>-1.5708 0 0 </orientation>
		</PhysicalOffsetFrame>
	</frames>
</WeldJoint>
<BallJoint name="qiufulianjie">
	<WeldJoint name="qiufu1">
	<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The parent frame for the joint.).-->
	<socket_parent_frame>qiufuzuo1_offset</socket_parent_frame>
	<!--Path to a Component that satisfies the Socket 'child_frame' of type PhysicalFrame (description: The child frame for the joint.).-->
	<socket_child_frame>qiufu1_offset</socket_child_frame>

Re: Is it possible to define 2 joints on one body?

Posted: Fri May 14, 2021 12:23 pm
by aymanh
Hello,

The underlying multibody system of an OpenSim model is a Tree (you can see this in the Application/GUI Topology View). As such if you want to have loops/connections that breaks the Tree structure, then you'll have to do it with Constraints. Please check the doxygen documentation here
https://simtk.org/api_docs/opensim/api_ ... raint.html
and expand the "Inheritance diagram" to see what Constraints are available that would fit your needs.

Hope this helps,
-Ayman

Re: Is it possible to define 2 joints on one body?

Posted: Fri May 14, 2021 6:34 pm
by zxyzxyzxy
aymanh wrote:
Fri May 14, 2021 12:23 pm
Hello,

The underlying multibody system of an OpenSim model is a Tree (you can see this in the Application/GUI Topology View). As such if you want to have loops/connections that breaks the Tree structure, then you'll have to do it with Constraints. Please check the doxygen documentation here
https://simtk.org/api_docs/opensim/api_ ... raint.html
and expand the "Inheritance diagram" to see what Constraints are available that would fit your needs.

Hope this helps,
-Ayman
Thanks! It helps a lot!