single 'Coordinate' - multiple 'SpatialTransform' DoFs during Inverse Dynamics

Provide easy-to-use, extensible software for modeling, simulating, controlling, and analyzing the neuromusculoskeletal system.
POST REPLY
User avatar
Wen Wu
Posts: 5
Joined: Tue Jun 13, 2017 8:49 pm

single 'Coordinate' - multiple 'SpatialTransform' DoFs during Inverse Dynamics

Post by Wen Wu » Tue Mar 31, 2020 10:35 pm

I am trying to figure out how CustomJoint Coordinates and SpatialTransform work during Inverse Dynamics.

I understand if only 1 SpatialTransform DOF (either rotation or translation) is dependent on a given coordinate, the ID result will be either moment or force, with the header named as coordinate_moment or coordinate_force, respectively. And it represents the net moment/force about the DOF.

However, when multiple SpatialTransform DOFs are dependent on one coordinate. For example, in Gait2392.osim, 1 rotation and 2 translation DOFs are dependent on 'knee_angle_r' (see below), and the ID result is like 'knee_angle_r_moment' (no '_force'). So I am wondering how ID works here. I tried to remove the relationships between 'knee_angle_r' and the 2 translation DOFs, and the calculated 'knee_angle_r_moment' decreased a bit.

So I feel like if multiple DOFs are dependent on a single coordinate, the ID somehow sums up results of all DOFs. But how are force and moment summed up with different units? And it seems incorrect to call the ID result as knee moment because it also includes translations' contribution.

Thanks!

Code: Select all

<SpatialTransform>
	<!--3 Axes for rotations are listed first.-->
	<TransformAxis name="rotation1">
		<!--Names of the coordinates that serve as the independent variables         of the transform function.-->
		<coordinates>knee_angle_r</coordinates>
		<!--Rotation or translation axis for the transform.-->
		<axis>0 0 1</axis>
		<!--Transform function of the generalized coordinates used to        represent the amount of displacement along a specified axis.-->
		<LinearFunction name="function">
			<coefficients> 1 0</coefficients>
		</LinearFunction>
	</TransformAxis>
	<TransformAxis name="rotation2">
		<!--Names of the coordinates that serve as the independent variables         of the transform function.-->
		<coordinates></coordinates>
		<!--Rotation or translation axis for the transform.-->
		<axis>0 1 0</axis>
		<!--Transform function of the generalized coordinates used to        represent the amount of displacement along a specified axis.-->
		<Constant name="function">
			<value>0</value>
		</Constant>
	</TransformAxis>
	<TransformAxis name="rotation3">
		<!--Names of the coordinates that serve as the independent variables         of the transform function.-->
		<coordinates></coordinates>
		<!--Rotation or translation axis for the transform.-->
		<axis>1 0 0</axis>
		<!--Transform function of the generalized coordinates used to        represent the amount of displacement along a specified axis.-->
		<Constant name="function">
			<value>0</value>
		</Constant>
	</TransformAxis>
	<!--3 Axes for translations are listed next.-->
	<TransformAxis name="translation1">
		<!--Names of the coordinates that serve as the independent variables         of the transform function.-->
		<coordinates>knee_angle_r</coordinates>
		<!--Rotation or translation axis for the transform.-->
		<axis>1 0 0</axis>
		<!--Transform function of the generalized coordinates used to        represent the amount of displacement along a specified axis.-->
		<SimmSpline name="function">
			<x> -2.0944 -1.74533 -1.39626 -1.0472 -0.698132 -0.349066 -0.174533 0.197344 0.337395 0.490178 1.52146 2.0944</x>
			<y> -0.0032 0.00179 0.00411 0.0041 0.00212 -0.001 -0.0031 -0.005227 -0.005435 -0.005574 -0.005435 -0.00525</y>
		</SimmSpline>
	</TransformAxis>
	<TransformAxis name="translation2">
		<!--Names of the coordinates that serve as the independent variables         of the transform function.-->
		<coordinates>knee_angle_r</coordinates>
		<!--Rotation or translation axis for the transform.-->
		<axis>0 1 0</axis>
		<!--Transform function of the generalized coordinates used to        represent the amount of displacement along a specified axis.-->
		<SimmSpline name="function">
			<x> -2.0944 -1.22173 -0.523599 -0.349066 -0.174533 0.159149 2.0944</x>
			<y> -0.4226 -0.4082 -0.399 -0.3976 -0.3966 -0.395264 -0.396</y>
		</SimmSpline>
	</TransformAxis>
	<TransformAxis name="translation3">
		<!--Names of the coordinates that serve as the independent variables         of the transform function.-->
		<coordinates></coordinates>
		<!--Rotation or translation axis for the transform.-->
		<axis>0 0 1</axis>
		<!--Transform function of the generalized coordinates used to        represent the amount of displacement along a specified axis.-->
		<Constant name="function">
			<value>0</value>
		</Constant>
	</TransformAxis>
</SpatialTransform>
					

Tags:

POST REPLY