This commit is contained in:
davidpagnon 2024-01-18 16:58:52 +01:00
commit f24f1515f4
36 changed files with 30823 additions and 71 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,352 @@
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSimDocument Version="40000">
<MarkerSet name="markerset">
<objects>
<Marker name="r.ASIS_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/pelvis</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.028000000000000001 0.01 0.128</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L.ASIS_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/pelvis</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.028000000000000001 0.01 -0.128</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r.PSIS_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/pelvis</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.154 0.025000000000000001 0.050000000000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L.PSIS_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/pelvis</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.154 0.025000000000000001 -0.050000000000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_knee_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0080000000000000002 -0.40400000000000003 0.055</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_mknee_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.010999999999999999 -0.40100000000000002 -0.055</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_ankle_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.02 -0.38500000000000001 0.052999999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_mankle_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0060000000000000001 -0.38 -0.037999999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_toe_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/calcn_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.18684400000000001 0.0083665300000000005 0.0052662100000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_5meta_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/calcn_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.14000000000000001 0.0050000000000000001 0.065000000000000002</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_calc_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/calcn_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.032161500000000003 0.032569300000000002 -0.011169500000000001</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_knee_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0080000000000000002 -0.40400000000000003 -0.055</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_mknee_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.010999999999999999 -0.40100000000000002 0.055</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_ankle_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.02 -0.38500000000000001 -0.052999999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_mankle_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0060000000000000001 -0.38 0.037999999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_toe_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/calcn_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.18684400000000001 0.0083665300000000005 -0.00526621</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_calc_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/calcn_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.0321615 0.0325693 0.0111695</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_5meta_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/calcn_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.14000000000000001 0.0050000000000000001 -0.065000000000000002</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_shoulder_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/torso</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0 0.41799999999999998 0.14199999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_shoulder_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/torso</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0 0.41799999999999998 -0.14199999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="C7_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/torso</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.080000000000000002 0.41999999999999998 0.0030000000000000001</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_lelbow_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/humerus_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.014999999999999999 -0.28000000000000003 0.040000000000000001</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="r_melbow_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/humerus_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0022499999999999998 -0.28599999999999998 -0.050000000000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="r_lwrist_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/radius_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.00050000000000000001 -0.22500000000000001 0.050000000000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="r_mwrist_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/radius_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.021999999999999999 -0.22500000000000001 -0.021999999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="L_lelbow_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/humerus_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.014999999999999999 -0.28000000000000003 -0.040000000000000001</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="L_melbow_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/humerus_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0022499999999999998 -0.28599999999999998 0.050000000000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="L_lwrist_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/radius_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.00050000000000000001 -0.22500000000000001 -0.050000000000000003</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="L_mwrist_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/radius_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.021999999999999999 -0.22500000000000001 0.021999999999999999</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>true</fixed>
</Marker>
<Marker name="r_thigh1_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.09 -0.15 0.07</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_thigh2_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.055 -0.25 0.085</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_thigh3_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.02 -0.14 0.1</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_thigh1_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.09 -0.15 -0.07</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_thigh2_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.055 -0.25 -0.085</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_thigh3_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/femur_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.02 -0.14 -0.1</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_sh1_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0 -0.115 0.07</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_sh2_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.026 -0.23 0.08</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="r_sh3_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_r</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.05 -0.22 0.08</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_sh1_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.0 -0.115 -0.07</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_sh2_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>0.026 -0.23 -0.08</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="L_sh3_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/tibia_l</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.05 -0.22 -0.08</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="RHJC_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/pelvis</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.056276 -0.078490000000000004 0.077259999999999995</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
<Marker name="LHJC_study">
<!--Path to a Component that satisfies the Socket 'parent_frame' of type PhysicalFrame (description: The frame to which this station is fixed.).-->
<socket_parent_frame>/bodyset/pelvis</socket_parent_frame>
<!--The fixed location of the station expressed in its parent frame.-->
<location>-0.056276 -0.078490000000000004 -0.077259999999999995</location>
<!--Flag (true or false) specifying whether the marker is fixed in its parent frame during the marker placement step of scaling. If false, the marker is free to move within its parent Frame to match its experimental counterpart.-->
<fixed>false</fixed>
</Marker>
</objects>
<groups />
</MarkerSet>
</OpenSimDocument>

View File

@ -0,0 +1,289 @@
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSimDocument Version="40000">
<InverseKinematicsTool name="generic">
<!--Directory used for writing results.-->
<results_directory>Unassigned</results_directory>
<!--Name of the model file (.osim) to use for inverse kinematics.-->
<model_file>Unassigned</model_file>
<!--A positive scalar that weights the relative importance of satisfying constraints. A weighting of 'Infinity' (the default) results in the constraints being strictly enforced. Otherwise, the weighted-squared constraint errors are appended to the cost function.-->
<constraint_weight>Inf</constraint_weight>
<!--The accuracy of the solution in absolute terms. Default is 1e-5. It determines the number of significant digits to which the solution can be trusted.-->
<accuracy>1.0000000000000001e-05</accuracy>
<!--Markers and coordinates to be considered (tasks) and their weightings. The sum of weighted-squared task errors composes the cost function.-->
<IKTaskSet>
<objects>
<IKMarkerTask name="C7_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_shoulder_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_shoulder_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r.ASIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="L.ASIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="r.PSIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="L.PSIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="r_knee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mknee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_ankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_toe_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_5meta_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_calc_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>60</weight>
</IKMarkerTask>
<IKMarkerTask name="L_knee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mknee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_ankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_toe_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_calc_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>60</weight>
</IKMarkerTask>
<IKMarkerTask name="L_5meta_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_lelbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_lelbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_melbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_melbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_lwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_lwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_thigh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_thigh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_thigh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_thigh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_thigh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_thigh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_sh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_sh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_sh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_sh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_sh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_sh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="RHJC_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="LHJC_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
</objects>
<groups />
</IKTaskSet>
<!--TRC file (.trc) containing the time history of observations of marker positions obtained during a motion capture experiment. Markers in this file that have a corresponding task and model marker are included.-->
<marker_file>Unassigned</marker_file>
<!--The name of the storage (.sto or .mot) file containing the time history of coordinate observations. Coordinate values from this file are included if there is a corresponding model coordinate and task. -->
<coordinate_file>Unassigned</coordinate_file>
<!--The desired time range over which inverse kinematics is solved. The closest start and final times from the provided observations are used to specify the actual time range to be processed.-->
<time_range>-Inf Inf</time_range>
<!--Flag (true or false) indicating whether or not to report marker errors from the inverse kinematics solution.-->
<report_errors>true</report_errors>
<!--Name of the resulting inverse kinematics motion (.mot) file.-->
<output_motion_file>Unassigned</output_motion_file>
<!--Flag indicating whether or not to report model marker locations. Note, model marker locations are expressed in Ground.-->
<report_marker_locations>false</report_marker_locations>
</InverseKinematicsTool>
</OpenSimDocument>

View File

@ -0,0 +1,369 @@
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSimDocument Version="40000">
<InverseKinematicsTool name="generic">
<!--Directory used for writing results.-->
<results_directory>Unassigned</results_directory>
<!--Name of the model file (.osim) to use for inverse kinematics.-->
<model_file>Unassigned</model_file>
<!--A positive scalar that weights the relative importance of satisfying constraints. A weighting of 'Infinity' (the default) results in the constraints being strictly enforced. Otherwise, the weighted-squared constraint errors are appended to the cost function.-->
<constraint_weight>Inf</constraint_weight>
<!--The accuracy of the solution in absolute terms. Default is 1e-5. It determines the number of significant digits to which the solution can be trusted.-->
<accuracy>1.0000000000000001e-05</accuracy>
<!--Markers and coordinates to be considered (tasks) and their weightings. The sum of weighted-squared task errors composes the cost function.-->
<IKTaskSet>
<objects>
<IKMarkerTask name="C7_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_shoulder_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_shoulder_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r.ASIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="L.ASIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="r.PSIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="L.PSIS_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="r_knee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mknee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_ankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_toe_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_5meta_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_calc_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>60</weight>
</IKMarkerTask>
<IKMarkerTask name="L_knee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mknee_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_ankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mankle_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_toe_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="L_calc_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>60</weight>
</IKMarkerTask>
<IKMarkerTask name="L_5meta_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>30</weight>
</IKMarkerTask>
<IKMarkerTask name="r_lelbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_lelbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_melbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_melbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_lwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_lwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_thigh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_thigh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_thigh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_thigh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_thigh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_thigh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_sh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_sh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="r_sh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_sh1_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_sh2_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="L_sh3_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>4</weight>
</IKMarkerTask>
<IKMarkerTask name="RHJC_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKMarkerTask name="LHJC_study">
<!--Whether or not this task will be used during inverse kinematics solve.-->
<apply>true</apply>
<!--Weight given to a marker or coordinate for solving inverse kinematics problems.-->
<weight>25</weight>
</IKMarkerTask>
<IKCoordinateTask name="sh_tx_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_ty_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_tz_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_axial_rot_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.00005</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_tx_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_ty_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_tz_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="sh_axial_rot_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.00005</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
</objects>
<groups />
</IKTaskSet>
<!--TRC file (.trc) containing the time history of observations of marker positions obtained during a motion capture experiment. Markers in this file that have a corresponding task and model marker are included.-->
<marker_file>Unassigned</marker_file>
<!--The name of the storage (.sto or .mot) file containing the time history of coordinate observations. Coordinate values from this file are included if there is a corresponding model coordinate and task. -->
<coordinate_file>Unassigned</coordinate_file>
<!--The desired time range over which inverse kinematics is solved. The closest start and final times from the provided observations are used to specify the actual time range to be processed.-->
<time_range>-Inf Inf</time_range>
<!--Flag (true or false) indicating whether or not to report marker errors from the inverse kinematics solution.-->
<report_errors>true</report_errors>
<!--Name of the resulting inverse kinematics motion (.mot) file.-->
<output_motion_file>Unassigned</output_motion_file>
<!--Flag indicating whether or not to report model marker locations. Note, model marker locations are expressed in Ground.-->
<report_marker_locations>false</report_marker_locations>
</InverseKinematicsTool>
</OpenSimDocument>

View File

@ -0,0 +1,749 @@
<?xml version="1.0" encoding="UTF-8" ?>
<OpenSimDocument Version="40000">
<ScaleTool name="RajagopalModified2016_withArms">
<!--Mass of the subject in kg. Subject-specific model generated by scaling step will have this total mass.-->
<mass>75.337</mass>
<!--Height of the subject in mm. For informational purposes only (not used by scaling).-->
<height>1.8899999999999999</height>
<!--Age of the subject in years. For informational purposes only (not used by scaling).-->
<age>-1</age>
<!--Notes for the subject.-->
<notes>Unassigned</notes>
<!--Specifies the name of the unscaled model (.osim) and the marker set.-->
<GenericModelMaker>
<!--Model file (.osim) for the unscaled model.-->
<model_file>Unassigned</model_file>
<!--Set of model markers used to scale the model. Scaling is done based on distances between model markers compared to the same distances between the corresponding experimental markers.-->
<marker_set_file>Unassigned</marker_set_file>
</GenericModelMaker>
<!--Specifies parameters for scaling the model.-->
<ModelScaler>
<!--Whether or not to use the model scaler during scale-->
<apply>true</apply>
<!--Specifies the scaling method and order. Valid options are 'measurements', 'manualScale', singly or both in any sequence.-->
<scaling_order> measurements</scaling_order>
<!--Specifies the measurements by which body segments are to be scaled.-->
<MeasurementSet>
<objects>
<Measurement name="foot">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_calc_study r_toe_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_calc_study r_5meta_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_calc_study L_toe_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_calc_study L_5meta_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="talus_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="calcn_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="toes_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="talus_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="calcn_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="toes_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="tibia_r">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_knee_study r_ankle_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_mknee_study r_mankle_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="tibia_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="femur_r">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> RHJC_study r_knee_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="femur_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="patella_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="tibia_l">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_knee_study L_ankle_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_mknee_study L_mankle_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="tibia_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="femur_l">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> LHJC_study L_knee_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="femur_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="patella_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="pelvisXY">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r.ASIS_study r.PSIS_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L.ASIS_study L.PSIS_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="pelvis">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="pelvisZ">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> RHJC_study LHJC_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="pelvis">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="torsoXY">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_shoulder_study r.PSIS_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_shoulder_study L.PSIS_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> C7_study r.PSIS_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> C7_study L.PSIS_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="torso">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y</axes>
</BodyScale>
<BodyScale name="scapulaPhantom_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y</axes>
</BodyScale>
<BodyScale name="scapulaPhantom_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="torsoZ">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_shoulder_study L_shoulder_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="torso">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> Z</axes>
</BodyScale>
<BodyScale name="scapulaPhantom_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> Z</axes>
</BodyScale>
<BodyScale name="scapulaPhantom_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="humerus">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_shoulder_study r_lelbow_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_shoulder_study r_melbow_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_shoulder_study L_lelbow_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_shoulder_study L_melbow_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="humerus_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="humerus_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
<Measurement name="radius">
<!--Flag to turn on and off scaling for this measurement.-->
<apply>true</apply>
<!--Set of marker pairs used to determine the scale factors.-->
<MarkerPairSet>
<objects>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_lwrist_study r_lelbow_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> r_mwrist_study r_melbow_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_lwrist_study L_lelbow_study</markers>
</MarkerPair>
<MarkerPair>
<!--Names of two markers, the distance between which is used to compute a body scale factor.-->
<markers> L_mwrist_study L_melbow_study</markers>
</MarkerPair>
</objects>
<groups />
</MarkerPairSet>
<!--Set of bodies to be scaled by this measurement.-->
<BodyScaleSet>
<objects>
<BodyScale name="ulna_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="radius_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="hand_r">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="ulna_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="radius_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
<BodyScale name="hand_l">
<!--Axes (X Y Z) along which to scale a body. For example, 'X Y Z' scales along all three axes, and 'Y' scales just along the Y axis.-->
<axes> X Y Z</axes>
</BodyScale>
</objects>
<groups />
</BodyScaleSet>
</Measurement>
</objects>
<groups />
</MeasurementSet>
<!--Scale factors to be used for manual scaling.-->
<ScaleSet>
<objects />
<groups />
</ScaleSet>
<!--TRC file (.trc) containing the marker positions used for measurement-based scaling. This is usually a static trial, but doesn't need to be. The marker-pair distances are computed for each time step in the TRC file and averaged across the time range.-->
<marker_file>Unassigned</marker_file>
<!--Time range over which to average marker-pair distances in the marker file (.trc) for measurement-based scaling.-->
<time_range> 3.41 3.66</time_range>
<!--Flag (true or false) indicating whether or not to preserve relative mass between segments.-->
<preserve_mass_distribution>true</preserve_mass_distribution>
<!--Name of OpenSim model file (.osim) to write when done scaling.-->
<output_model_file />
<!--Name of file to write containing the scale factors that were applied to the unscaled model (optional).-->
<output_scale_file />
</ModelScaler>
<!--Specifies parameters for placing markers on the model once a model is scaled. -->
<MarkerPlacer>
<!--Whether or not to use the marker placer during scale-->
<apply>true</apply>
<!--Task set used to specify weights used in the IK computation of the static pose.-->
<IKTaskSet>
<objects>
<IKMarkerTask name="r.ASIS_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L.ASIS_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r.PSIS_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L.PSIS_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="RHJC_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="LHJC_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_knee_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mknee_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_ankle_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mankle_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_toe_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_5meta_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_calc_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_knee_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mknee_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_ankle_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mankle_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_toe_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_calc_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="L_5meta_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>10</weight>
</IKMarkerTask>
<IKMarkerTask name="r_shoulder_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_shoulder_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="C7_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>20</weight>
</IKMarkerTask>
<IKMarkerTask name="r_lelbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>1</weight>
</IKMarkerTask>
<IKMarkerTask name="r_lwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="r_mwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_lelbow_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>1</weight>
</IKMarkerTask>
<IKMarkerTask name="L_lwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKMarkerTask name="L_mwrist_study">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>5</weight>
</IKMarkerTask>
<IKCoordinateTask name="hip_flexion_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="hip_rotation_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>false</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="knee_angle_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="ankle_angle_r">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0.087266462599716474</value>
</IKCoordinateTask>
<IKCoordinateTask name="hip_flexion_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="hip_rotation_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>false</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="knee_angle_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="ankle_angle_l">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0.087266462599716474</value>
</IKCoordinateTask>
<IKCoordinateTask name="lumbar_extension">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="lumbar_bending">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
<IKCoordinateTask name="lumbar_rotation">
<!--Whether or not this task will be used during inverse kinematics solve, default is true.-->
<apply>true</apply>
<!--Weight given to the task when solving inverse kinematics problems, default is 0.-->
<weight>0.10000000000000001</weight>
<!--Indicates the source of the coordinate value for this task. Possible values are default_value (use default value of coordinate, as specified in the model file, as the fixed target value), manual_value (use the value specified in the value property of this task as the fixed target value), or from_file (use the coordinate values from the coordinate data specified by the coordinates_file property).-->
<value_type>manual_value</value_type>
<!--This value will be used as the desired (or prescribed) coordinate value if value_type is set to manual_value.-->
<value>0</value>
</IKCoordinateTask>
</objects>
<groups />
</IKTaskSet>
<!--TRC file (.trc) containing the time history of experimental marker positions (usually a static trial).-->
<marker_file>Unassigned</marker_file>
<!--Name of file containing the joint angles used to set the initial configuration of the model for the purpose of placing the markers. These coordinate values can also be included in the optimization problem used to place the markers. Before the model markers are placed, a single frame of an inverse kinematics (IK) problem is solved. The IK problem can be solved simply by matching marker positions, but if the model markers are not in the correct locations, the IK solution will not be very good and neither will marker placement. Alternatively, coordinate values (specified in this file) can be specified and used to influence the IK solution. This is valuable particularly if you have high confidence in the coordinate values. For example, you know for the static trial the subject was standing will all joint angles close to zero. If the coordinate set (see the CoordinateSet property) contains non-zero weights for coordinates, the IK solution will try to match not only the marker positions, but also the coordinates in this file. Least-squared error is used to solve the IK problem. -->
<coordinate_file>Unassigned</coordinate_file>
<!--Time range over which the marker positions are averaged.-->
<time_range> 3.41 3.66</time_range>
<!--Name of the motion file (.mot) written after marker relocation (optional).-->
<output_motion_file />
<!--Output OpenSim model file (.osim) after scaling and maker placement.-->
<output_model_file />
<!--Output marker set containing the new marker locations after markers have been placed.-->
<output_marker_file />
<!--Maximum amount of movement allowed in marker data when averaging frames of the static trial. A negative value means there is not limit.-->
<max_marker_movement>-1</max_marker_movement>
</MarkerPlacer>
</ScaleTool>
</OpenSimDocument>

View File

@ -27,7 +27,7 @@ frame_range = [] # For example [10,300], or [] for all frames
exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Only taken into account if want to use marker augmentation
participant_height = 1.7 # m
participant_mass = 70 # kg
@ -94,8 +94,7 @@ calibration_type = 'convert' # 'convert' or 'calculate'
[pose]
pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII
#With mediapipe: BLAZEPOSE.
#With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
#With deeplabcut: CUSTOM. See example at the end of the file.

View File

@ -27,7 +27,7 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.

View File

@ -27,7 +27,7 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.

View File

@ -27,7 +27,7 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -140,9 +139,9 @@
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
[filtering]
# [filtering]
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
display_figures = true # true or false (lowercase)
# display_figures = true # true or false (lowercase)
# [filtering.butterworth]
# order = 4

View File

@ -27,7 +27,7 @@ frame_range = [] # For example [10,300], or [] for all frames
exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Only taken into account if want to use marker augmentation
participant_height = 1.7 # m
participant_mass = 70 # kg
@ -95,7 +95,6 @@ calibration_type = 'convert' # 'convert' or 'calculate'
[pose]
pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
#With mediapipe: BLAZEPOSE.
#With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
#With deeplabcut: CUSTOM. See example at the end of the file.

View File

@ -27,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -163,7 +162,7 @@
# [opensim]
# static_trial = ['S01_P00_Participant0/S01_P00_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -9,6 +9,7 @@
# If a parameter is not found here, Pose2Sim will look for its value in the
# Config.toml file of the level above. This way, you can set global
# instructions for the Session and alter them for specific Participants or Trials.
#
# If you wish to overwrite a parameter for a specific trial or participant,
# edit its Config.toml file by uncommenting its key (e.g., [project])
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
@ -26,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -95,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -162,7 +162,7 @@
# [opensim]
# static_trial = ['S01_P00_Participant0/S01_P00_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -9,6 +9,7 @@
# If a parameter is not found here, Pose2Sim will look for its value in the
# Config.toml file of the level above. This way, you can set global
# instructions for the Session and alter them for specific Participants or Trials.
#
# If you wish to overwrite a parameter for a specific trial or participant,
# edit its Config.toml file by uncommenting its key (e.g., [project])
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
@ -26,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -95,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -139,9 +139,9 @@
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
[filtering]
# [filtering]
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
display_figures = true # true or false (lowercase)
# display_figures = true # true or false (lowercase)
# [filtering.butterworth]
# order = 4
@ -162,7 +162,7 @@ display_figures = true # true or false (lowercase)
# [opensim]
# static_trial = ['S01_P00_Participant/0S01_P00_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -9,6 +9,7 @@
# If a parameter is not found here, Pose2Sim will look for its value in the
# Config.toml file of the level above. This way, you can set global
# instructions for the Session and alter them for specific Participants or Trials.
#
# If you wish to overwrite a parameter for a specific trial or participant,
# edit its Config.toml file by uncommenting its key (e.g., [project])
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
@ -26,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -95,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -139,9 +139,9 @@
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
[filtering]
# [filtering]
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
display_figures = true # true or false (lowercase)
# display_figures = true # true or false (lowercase)
# [filtering.butterworth]
# order = 4
@ -162,7 +162,7 @@ display_figures = true # true or false (lowercase)
# [opensim]
# static_trial = ['S01_P00_Participant0/S01_P00_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -27,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -163,7 +162,7 @@
# [opensim]
# static_trial = ['S01_P01_Participant1/S01_P01_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -27,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -163,7 +162,7 @@
# [opensim]
# static_trial = ['S01_P01_Participant1/S01_P01_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -27,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -140,9 +139,9 @@
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
[filtering]
# [filtering]
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
display_figures = true # true or false (lowercase)
# display_figures = true # true or false (lowercase)
# [filtering.butterworth]
# order = 4
@ -163,7 +162,7 @@ display_figures = true # true or false (lowercase)
# [opensim]
# static_trial = ['S01_P01_Participant1/S01_P01_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

View File

@ -27,9 +27,9 @@
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
## Only taken into account if want to use marker augmentation
# participant_height = 1.7 # m
# participant_mass = 70 # kg
## Only taken into account if pose_model is 'BODY_25_AUGMENTED' # Coming soon!
## Take heart, calibration is not that complicated once you get the hang of it!
@ -96,7 +96,6 @@
# [pose]
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII,
# BODY_25_AUGMENTED # Coming soon!
# #With mediapipe: BLAZEPOSE.
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
# #With deeplabcut: CUSTOM. See example at the end of the file.
@ -140,9 +139,9 @@
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
[filtering]
# [filtering]
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
display_figures = true # true or false (lowercase)
# display_figures = true # true or false (lowercase)
# [filtering.butterworth]
# order = 4
@ -163,7 +162,7 @@ display_figures = true # true or false (lowercase)
# [opensim]
# static_trial = ['S01_P01_Participant1/S01_P01_T00_StaticTrial']
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']

Binary file not shown.

View File

@ -0,0 +1 @@
{"reference_marker": "midHip"}

View File

@ -0,0 +1 @@
{"class_name": "Sequential", "config": {"name": "sequential_2", "layers": [{"class_name": "InputLayer", "config": {"batch_input_shape": [null, null, 47], "dtype": "float32", "sparse": false, "ragged": false, "name": "lstm_8_input"}}, {"class_name": "LSTM", "config": {"name": "lstm_8", "trainable": true, "dtype": "float32", "batch_input_shape": [null, null, 47], "return_sequences": true, "return_state": false, "go_backwards": false, "stateful": false, "unroll": false, "time_major": false, "units": 128, "activation": "tanh", "recurrent_activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "recurrent_initializer": {"class_name": "Orthogonal", "config": {"gain": 1.0, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "unit_forget_bias": true, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0, "implementation": 2}}, {"class_name": "LSTM", "config": {"name": "lstm_9", "trainable": true, "dtype": "float32", "return_sequences": true, "return_state": false, "go_backwards": false, "stateful": false, "unroll": false, "time_major": false, "units": 128, "activation": "tanh", "recurrent_activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "recurrent_initializer": {"class_name": "Orthogonal", "config": {"gain": 1.0, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "unit_forget_bias": true, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0, "implementation": 2}}, {"class_name": "LSTM", "config": {"name": "lstm_10", "trainable": true, "dtype": "float32", "return_sequences": true, "return_state": false, "go_backwards": false, "stateful": false, "unroll": false, "time_major": false, "units": 128, "activation": "tanh", "recurrent_activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "recurrent_initializer": {"class_name": "Orthogonal", "config": {"gain": 1.0, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "unit_forget_bias": true, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0, "implementation": 2}}, {"class_name": "LSTM", "config": {"name": "lstm_11", "trainable": true, "dtype": "float32", "return_sequences": true, "return_state": false, "go_backwards": false, "stateful": false, "unroll": false, "time_major": false, "units": 128, "activation": "tanh", "recurrent_activation": "sigmoid", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "recurrent_initializer": {"class_name": "Orthogonal", "config": {"gain": 1.0, "seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "unit_forget_bias": true, "kernel_regularizer": null, "recurrent_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "recurrent_constraint": null, "bias_constraint": null, "dropout": 0.0, "recurrent_dropout": 0.0, "implementation": 2}}, {"class_name": "TimeDistributed", "config": {"name": "time_distributed_2", "trainable": true, "dtype": "float32", "layer": {"class_name": "Dense", "config": {"name": "dense_2", "trainable": true, "dtype": "float32", "units": 105, "activation": "linear", "use_bias": true, "kernel_initializer": {"class_name": "GlorotUniform", "config": {"seed": null}}, "bias_initializer": {"class_name": "Zeros", "config": {}}, "kernel_regularizer": null, "bias_regularizer": null, "activity_regularizer": null, "kernel_constraint": null, "bias_constraint": null}}}}]}, "keras_version": "2.12.0", "backend": "tensorflow"}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
{"reference_marker": "midHip"}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@ -420,6 +420,37 @@ def filtering(config=None):
filter_all(config_dict)
def augmenter(config=None):
from Pose2Sim.augmenter import augmentTRC
level, config_dicts = read_config_files(config)
if type(config) == dict:
config_dict = config_dicts[0]
if config_dict.get('project').get('project_dir') is None:
raise ValueError('Please specify the project directory in config_dict:\n \
config_dict.get("project").update({"project_dir":"<YOUR_TRIAL_DIRECTORY>"})')
session_dir = os.path.realpath(os.path.join(config_dicts[0].get('project').get('project_dir'), '..', '..'))
setup_logging(session_dir)
for config_dict in config_dicts:
start = time.time()
project_dir = os.path.realpath(config_dict.get('project').get('project_dir'))
seq_name = os.path.basename(project_dir)
frame_range = config_dict.get('project').get('frame_range')
frames = ["all frames" if frame_range == [] else f"frames {frame_range[0]} to {frame_range[1]}"][0]
logging.info("\n\n---------------------------------------------------------------------")
logging.info(f"Augmentation process for {seq_name}, for {frames}.")
logging.info("---------------------------------------------------------------------")
logging.info(f"\nProject directory: {project_dir}")
augmentTRC(config_dict)
end = time.time()
logging.info(f'Augmentation took {end - start:.2f} s.')
def opensimProcessing(config=None):
'''

213
Pose2Sim/augmenter.py Normal file
View File

@ -0,0 +1,213 @@
import os
import numpy as np
from . import utilsDataman
import copy
import tensorflow as tf
from .utils import TRC2numpy
import json
import os
import glob
# subject_height must be in meters
def get_midhip_data(trc_file):
try:
# Find MidHip data
midhip_data = trc_file.marker("CHip")
if midhip_data is None or len(midhip_data) == 0:
raise ValueError("MidHip data is empty")
except (KeyError, ValueError):
# If MidHip data is not found, calculate it from RHip and LHip
rhip_data = trc_file.marker("RHip")
lhip_data = trc_file.marker("LHip")
midhip_data = (rhip_data + lhip_data) / 2
return midhip_data
def augmentTRC(config_dict):
# get parameters from Config.toml
project_dir = config_dict.get('project').get('project_dir')
session_dir = os.path.realpath(os.path.join(project_dir, '..', '..'))
pathInputTRCFile = os.path.realpath(os.path.join(project_dir, 'pose-3d'))
pathOutputTRCFile = os.path.realpath(os.path.join(project_dir, 'pose-3d'))
subject_height = config_dict.get('project').get('participant_height')
if subject_height is None or subject_height == 0:
raise ValueError("Subject height is not set or invalid in the config file.")
subject_mass = config_dict.get('project').get('participant_mass')
augmenterDir = os.path.join(session_dir, '..', '..', 'MarkerAugmenter')
augmenterModelName = 'LSTM'
augmenter_model = 'v0.3'
offset = True
# Apply all trc files
trc_files = [f for f in glob.glob(os.path.join(pathInputTRCFile, '*.trc')) if '_LSTM' not in f]
for pathInputTRCFile in trc_files:
pathOutputTRCFile = os.path.splitext(pathInputTRCFile)[0] + "_LSTM.trc"
# This is by default - might need to be adjusted in the future.
featureHeight = True
featureWeight = True
# Augmenter types
if augmenter_model == 'v0.0':
from .utils import getOpenPoseMarkers_fullBody
feature_markers_full, response_markers_full = getOpenPoseMarkers_fullBody()
augmenterModelType_all = [augmenter_model]
feature_markers_all = [feature_markers_full]
response_markers_all = [response_markers_full]
elif augmenter_model == 'v0.1' or augmenter_model == 'v0.2':
# Lower body
augmenterModelType_lower = '{}_lower'.format(augmenter_model)
from .utils import getOpenPoseMarkers_lowerExtremity
feature_markers_lower, response_markers_lower = getOpenPoseMarkers_lowerExtremity()
# Upper body
augmenterModelType_upper = '{}_upper'.format(augmenter_model)
from .utils import getMarkers_upperExtremity_noPelvis
feature_markers_upper, response_markers_upper = getMarkers_upperExtremity_noPelvis()
augmenterModelType_all = [augmenterModelType_lower, augmenterModelType_upper]
feature_markers_all = [feature_markers_lower, feature_markers_upper]
response_markers_all = [response_markers_lower, response_markers_upper]
else:
# Lower body
augmenterModelType_lower = '{}_lower'.format(augmenter_model)
from .utils import getOpenPoseMarkers_lowerExtremity2
feature_markers_lower, response_markers_lower = getOpenPoseMarkers_lowerExtremity2()
# Upper body
augmenterModelType_upper = '{}_upper'.format(augmenter_model)
from .utils import getMarkers_upperExtremity_noPelvis2
feature_markers_upper, response_markers_upper = getMarkers_upperExtremity_noPelvis2()
augmenterModelType_all = [augmenterModelType_lower, augmenterModelType_upper]
feature_markers_all = [feature_markers_lower, feature_markers_upper]
response_markers_all = [response_markers_lower, response_markers_upper]
print('Using augmenter model: {}'.format(augmenter_model))
# %% Process data.
# Import TRC file
trc_file = utilsDataman.TRCFile(pathInputTRCFile)
# Loop over augmenter types to handle separate augmenters for lower and
# upper bodies.
outputs_all = {}
n_response_markers_all = 0
for idx_augm, augmenterModelType in enumerate(augmenterModelType_all):
outputs_all[idx_augm] = {}
feature_markers = feature_markers_all[idx_augm]
response_markers = response_markers_all[idx_augm]
augmenterModelDir = os.path.join(augmenterDir, augmenterModelName,
augmenterModelType)
# %% Pre-process inputs.
# Step 1: import .trc file with OpenPose marker trajectories.
trc_data = TRC2numpy(pathInputTRCFile, feature_markers)
# # Add these lines to get RHip and LHip data and calculate midHip
# rhip_data = trc_file.marker("RHip") # Replace "RHip" with the actual name in your trc file
# lhip_data = trc_file.marker("LHip") # Replace "LHip" with the actual name in your trc file
# Calculate the midHip marker as the average of RHip and LHip
midhip_data = get_midhip_data(trc_file)
trc_data_data = trc_data[:,1:]
# Step 2: Normalize with reference marker position.
with open(os.path.join(augmenterModelDir, "metadata.json"), 'r') as f:
metadata = json.load(f)
# Use midhip_data as the reference marker data
referenceMarker_data = midhip_data # instead of trc_file.marker(referenceMarker)
norm_trc_data_data = np.zeros((trc_data_data.shape[0],
trc_data_data.shape[1]))
for i in range(0,trc_data_data.shape[1],3):
norm_trc_data_data[:,i:i+3] = (trc_data_data[:,i:i+3] -
referenceMarker_data)
# Step 3: Normalize with subject's height.
norm2_trc_data_data = copy.deepcopy(norm_trc_data_data)
norm2_trc_data_data = norm2_trc_data_data / subject_height
# Step 4: Add remaining features.
inputs = copy.deepcopy(norm2_trc_data_data)
if featureHeight:
inputs = np.concatenate(
(inputs, subject_height*np.ones((inputs.shape[0],1))), axis=1)
if featureWeight:
inputs = np.concatenate(
(inputs, subject_mass*np.ones((inputs.shape[0],1))), axis=1)
# Step 5: Pre-process data
pathMean = os.path.join(augmenterModelDir, "mean.npy")
pathSTD = os.path.join(augmenterModelDir, "std.npy")
if os.path.isfile(pathMean):
trainFeatures_mean = np.load(pathMean, allow_pickle=True)
inputs -= trainFeatures_mean
if os.path.isfile(pathSTD):
trainFeatures_std = np.load(pathSTD, allow_pickle=True)
inputs /= trainFeatures_std
# Step 6: Reshape inputs if necessary (eg, LSTM)
if augmenterModelName == "LSTM":
inputs = np.reshape(inputs, (1, inputs.shape[0], inputs.shape[1]))
# %% Load model and weights, and predict outputs.
json_file = open(os.path.join(augmenterModelDir, "model.json"), 'r')
pretrainedModel_json = json_file.read()
json_file.close()
model = tf.keras.models.model_from_json(pretrainedModel_json)
model.load_weights(os.path.join(augmenterModelDir, "weights.h5"))
outputs = model.predict(inputs)
# %% Post-process outputs.
# Step 1: Reshape if necessary (eg, LSTM)
if augmenterModelName == "LSTM":
outputs = np.reshape(outputs, (outputs.shape[1], outputs.shape[2]))
# Step 2: Un-normalize with subject's height.
unnorm_outputs = outputs * subject_height
# Step 2: Un-normalize with reference marker position.
unnorm2_outputs = np.zeros((unnorm_outputs.shape[0],
unnorm_outputs.shape[1]))
for i in range(0,unnorm_outputs.shape[1],3):
unnorm2_outputs[:,i:i+3] = (unnorm_outputs[:,i:i+3] +
referenceMarker_data)
# %% Add markers to .trc file.
for c, marker in enumerate(response_markers):
x = unnorm2_outputs[:,c*3]
y = unnorm2_outputs[:,c*3+1]
z = unnorm2_outputs[:,c*3+2]
trc_file.add_marker(marker, x, y, z)
# %% Gather data for computing minimum y-position.
outputs_all[idx_augm]['response_markers'] = response_markers
outputs_all[idx_augm]['response_data'] = unnorm2_outputs
n_response_markers_all += len(response_markers)
# %% Extract minimum y-position across response markers. This is used
# to align feet and floor when visualizing.
responses_all_conc = np.zeros((unnorm2_outputs.shape[0],
n_response_markers_all*3))
idx_acc_res = 0
for idx_augm in outputs_all:
idx_acc_res_end = (idx_acc_res +
(len(outputs_all[idx_augm]['response_markers']))*3)
responses_all_conc[:,idx_acc_res:idx_acc_res_end] = (
outputs_all[idx_augm]['response_data'])
idx_acc_res = idx_acc_res_end
# Minimum y-position across response markers.
min_y_pos = np.min(responses_all_conc[:,1::3])
# %% If offset
if offset:
trc_file.offset('y', -(min_y_pos-0.01))
# %% Return augmented .trc file
trc_file.write(pathOutputTRCFile)
return min_y_pos

View File

@ -464,9 +464,17 @@ def filter_all(config):
# Trc paths
trc_f_in = f'{seq_name}_{f_range[0]}-{f_range[1]}.trc'
trc_f_in_LSTM = f'{seq_name}_{f_range[0]}-{f_range[1]}_LSTM.trc'
trc_f_out = f'{seq_name}_filt_{filter_type}_{f_range[0]}-{f_range[1]}.trc'
trc_f_out_LSTM = f'{seq_name}_filt_{filter_type}_{f_range[0]}-{f_range[1]}_LSTM.trc'
if os.path.exists(os.path.join(pose3d_dir, trc_f_in_LSTM)):
trc_path_in = os.path.join(pose3d_dir, trc_f_in_LSTM)
trc_path_out = os.path.join(pose3d_dir, trc_f_out_LSTM)
elif os.path.exists(os.path.join(pose3d_dir, trc_f_in)):
trc_path_in = os.path.join(pose3d_dir, trc_f_in)
trc_path_out = os.path.join(pose3d_dir, trc_f_out)
else:
raise FileNotFoundError("Not found .trc file.")
# Read trc header
with open(trc_path_in, 'r') as trc_file:

View File

@ -116,7 +116,6 @@ BODY_25 = Node("CHip", id=8, children=[
]),
])
'''BODY_135 (full-body with hands and face, experimental, from OpenPose)
https://github.com/CMU-Perceptual-Computing-Lab/openpose_train/blob/master/experimental_models/README.md)'''
BODY_135 = Node("CHip", id=None, children=[

190
Pose2Sim/utils.py Normal file
View File

@ -0,0 +1,190 @@
from . import utilsDataman
import numpy as np
def TRC2numpy(pathFile, markers,rotation=None):
# rotation is a dict, eg. {'y':90} with axis, angle for rotation
trc_file = utilsDataman.TRCFile(pathFile)
time = trc_file.time
num_frames = time.shape[0]
data = np.zeros((num_frames, len(markers)*3))
if rotation != None:
for axis,angle in rotation.items():
trc_file.rotate(axis,angle)
for count, marker in enumerate(markers):
data[:,3*count:3*count+3] = trc_file.marker(marker)
this_dat = np.empty((num_frames, 1))
this_dat[:, 0] = time
data_out = np.concatenate((this_dat, data), axis=1)
return data_out
def numpy2TRC(f, data, headers, fc=50.0, t_start=0.0, units="m"):
header_mapping = {}
for count, header in enumerate(headers):
header_mapping[count+1] = header
# Line 1.
f.write('PathFileType 4\t(X/Y/Z) %s\n' % os.getcwd())
# Line 2.
f.write('DataRate\tCameraRate\tNumFrames\tNumMarkers\t'
'Units\tOrigDataRate\tOrigDataStartFrame\tOrigNumFrames\n')
num_frames=data.shape[0]
num_markers=len(header_mapping.keys())
# Line 3.
f.write('%.1f\t%.1f\t%i\t%i\t%s\t%.1f\t%i\t%i\n' % (
fc, fc, num_frames,
num_markers, units, fc,
1, num_frames))
# Line 4.
f.write("Frame#\tTime\t")
for key in sorted(header_mapping.keys()):
f.write("%s\t\t\t" % format(header_mapping[key]))
# Line 5.
f.write("\n\t\t")
for imark in np.arange(num_markers) + 1:
f.write('X%i\tY%s\tZ%s\t' % (imark, imark, imark))
f.write('\n')
# Line 6.
f.write('\n')
for frame in range(data.shape[0]):
f.write("{}\t{:.8f}\t".format(frame+1,(frame)/fc+t_start)) # opensim frame labeling is 1 indexed
for key in sorted(header_mapping.keys()):
f.write("{:.5f}\t{:.5f}\t{:.5f}\t".format(data[frame,0+(key-1)*3], data[frame,1+(key-1)*3], data[frame,2+(key-1)*3]))
f.write("\n")
def getOpenPoseMarkerNames():
markerNames = ["Nose", "Neck", "RShoulder", "RElbow", "RWrist",
"LShoulder", "LElbow", "LWrist", "midHip", "RHip",
"RKnee", "RAnkle", "LHip", "LKnee", "LAnkle", "REye",
"LEye", "REar", "LEar", "LBigToe", "LSmallToe",
"LHeel", "RBigToe", "RSmallToe", "RHeel"]
return markerNames
def getOpenPoseFaceMarkers():
faceMarkerNames = ['Nose', 'REye', 'LEye', 'REar', 'LEar']
markerNames = getOpenPoseMarkerNames()
idxFaceMarkers = [markerNames.index(i) for i in faceMarkerNames]
return faceMarkerNames, idxFaceMarkers
def getOpenPoseMarkers_fullBody():
feature_markers = [
"Neck", "RShoulder", "LShoulder", "RHip", "LHip", "RKnee", "LKnee",
"RAnkle", "LAnkle", "RHeel", "LHeel", "RSmallToe", "LSmallToe",
"RBigToe", "LBigToe", "RElbow", "LElbow", "RWrist", "LWrist"]
response_markers = ["C7_study", "r_shoulder_study", "L_shoulder_study",
"r.ASIS_study", "L.ASIS_study", "r.PSIS_study",
"L.PSIS_study", "r_knee_study", "L_knee_study",
"r_mknee_study", "L_mknee_study", "r_ankle_study",
"L_ankle_study", "r_mankle_study", "L_mankle_study",
"r_calc_study", "L_calc_study", "r_toe_study",
"L_toe_study", "r_5meta_study", "L_5meta_study",
"r_lelbow_study", "L_lelbow_study", "r_melbow_study",
"L_melbow_study", "r_lwrist_study", "L_lwrist_study",
"r_mwrist_study", "L_mwrist_study",
"r_thigh1_study", "r_thigh2_study", "r_thigh3_study",
"L_thigh1_study", "L_thigh2_study", "L_thigh3_study",
"r_sh1_study", "r_sh2_study", "r_sh3_study",
"L_sh1_study", "L_sh2_study", "L_sh3_study",
"RHJC_study", "LHJC_study"]
return feature_markers, response_markers
def getOpenPoseMarkers_lowerExtremity():
feature_markers = [
"Neck", "RShoulder", "LShoulder", "RHip", "LHip", "RKnee", "LKnee",
"RAnkle", "LAnkle", "RHeel", "LHeel", "RSmallToe", "LSmallToe",
"RBigToe", "LBigToe"]
response_markers = ["C7_study", "r_shoulder_study", "L_shoulder_study",
"r.ASIS_study", "L.ASIS_study", "r.PSIS_study",
"L.PSIS_study", "r_knee_study", "L_knee_study",
"r_mknee_study", "L_mknee_study", "r_ankle_study",
"L_ankle_study", "r_mankle_study", "L_mankle_study",
"r_calc_study", "L_calc_study", "r_toe_study",
"L_toe_study", "r_5meta_study", "L_5meta_study",
"r_thigh1_study", "r_thigh2_study", "r_thigh3_study",
"L_thigh1_study", "L_thigh2_study", "L_thigh3_study",
"r_sh1_study", "r_sh2_study", "r_sh3_study",
"L_sh1_study", "L_sh2_study", "L_sh3_study",
"RHJC_study", "LHJC_study"]
return feature_markers, response_markers
# Different order of markers compared to getOpenPoseMarkers_lowerExtremity
def getOpenPoseMarkers_lowerExtremity2():
feature_markers = [
"Neck", "RShoulder", "LShoulder", "RHip", "LHip", "RKnee", "LKnee",
"RAnkle", "LAnkle", "RHeel", "LHeel", "RSmallToe", "LSmallToe",
"RBigToe", "LBigToe"]
response_markers = [
'r.ASIS_study', 'L.ASIS_study', 'r.PSIS_study',
'L.PSIS_study', 'r_knee_study', 'r_mknee_study',
'r_ankle_study', 'r_mankle_study', 'r_toe_study',
'r_5meta_study', 'r_calc_study', 'L_knee_study',
'L_mknee_study', 'L_ankle_study', 'L_mankle_study',
'L_toe_study', 'L_calc_study', 'L_5meta_study',
'r_shoulder_study', 'L_shoulder_study', 'C7_study',
'r_thigh1_study', 'r_thigh2_study', 'r_thigh3_study',
'L_thigh1_study', 'L_thigh2_study', 'L_thigh3_study',
'r_sh1_study', 'r_sh2_study', 'r_sh3_study', 'L_sh1_study',
'L_sh2_study', 'L_sh3_study', 'RHJC_study', 'LHJC_study']
return feature_markers, response_markers
def getMarkers_upperExtremity_pelvis():
feature_markers = [
"Neck", "RShoulder", "LShoulder", "RHip", "LHip", "RElbow", "LElbow",
"RWrist", "LWrist"]
response_markers = ["r_lelbow_study", "L_lelbow_study", "r_melbow_study",
"L_melbow_study", "r_lwrist_study", "L_lwrist_study",
"r_mwrist_study", "L_mwrist_study"]
return feature_markers, response_markers
def getMarkers_upperExtremity_noPelvis():
feature_markers = [
"Neck", "RShoulder", "LShoulder", "RElbow", "LElbow", "RWrist",
"LWrist"]
response_markers = ["r_lelbow_study", "L_lelbow_study", "r_melbow_study",
"L_melbow_study", "r_lwrist_study", "L_lwrist_study",
"r_mwrist_study", "L_mwrist_study"]
return feature_markers, response_markers
# Different order of markers compared to getMarkers_upperExtremity_noPelvis.
def getMarkers_upperExtremity_noPelvis2():
feature_markers = [
"Neck", "RShoulder", "LShoulder", "RElbow", "LElbow", "RWrist",
"LWrist"]
response_markers = ["r_lelbow_study", "r_melbow_study", "r_lwrist_study",
"r_mwrist_study", "L_lelbow_study", "L_melbow_study",
"L_lwrist_study", "L_mwrist_study"]
return feature_markers, response_markers

282
Pose2Sim/utilsDataman.py Normal file
View File

@ -0,0 +1,282 @@
"""Manages the movement and use of data files."""
import os
import warnings
from scipy.spatial.transform import Rotation as R
import numpy as np
from numpy.lib.recfunctions import append_fields
class TRCFile(object):
"""A plain-text file format for storing motion capture marker trajectories.
TRC stands for Track Row Column.
The metadata for the file is stored in attributes of this object.
See
http://simtk-confluence.stanford.edu:8080/display/OpenSim/Marker+(.trc)+Files
for more information.
"""
def __init__(self, fpath=None, **kwargs):
#path=None,
#data_rate=None,
#camera_rate=None,
#num_frames=None,
#num_markers=None,
#units=None,
#orig_data_rate=None,
#orig_data_start_frame=None,
#orig_num_frames=None,
#marker_names=None,
#time=None,
#):
"""
Parameters
----------
fpath : str
Valid file path to a TRC (.trc) file.
"""
self.marker_names = []
if fpath != None:
self.read_from_file(fpath)
else:
for k, v in kwargs.items():
setattr(self, k, v)
def read_from_file(self, fpath):
# Read the header lines / metadata.
# ---------------------------------
# Split by any whitespace.
# TODO may cause issues with paths that have spaces in them.
f = open(fpath)
# These are lists of each entry on the first few lines.
first_line = f.readline().split()
# Skip the 2nd line.
f.readline()
third_line = f.readline().split()
fourth_line = f.readline().split()
f.close()
# First line.
if len(first_line) > 3:
self.path = first_line[3]
else:
self.path = ''
# Third line.
self.data_rate = float(third_line[0])
self.camera_rate = float(third_line[1])
self.num_frames = int(third_line[2])
self.num_markers = int(third_line[3])
self.units = third_line[4]
self.orig_data_rate = float(third_line[5])
self.orig_data_start_frame = int(third_line[6])
self.orig_num_frames = int(third_line[7])
# Marker names.
# The first and second column names are 'Frame#' and 'Time'.
self.marker_names = fourth_line[2:]
len_marker_names = len(self.marker_names)
if len_marker_names != self.num_markers:
warnings.warn('Header entry NumMarkers, %i, does not '
'match actual number of markers, %i. Changing '
'NumMarkers to match actual number.' % (
self.num_markers, len_marker_names))
self.num_markers = len_marker_names
# Load the actual data.
# ---------------------
col_names = ['frame_num', 'time']
# This naming convention comes from OpenSim's Inverse Kinematics tool,
# when it writes model marker locations.
for mark in self.marker_names:
col_names += [mark + '_tx', mark + '_ty', mark + '_tz']
dtype = {'names': col_names,
'formats': ['int'] + ['float64'] * (3 * self.num_markers + 1)}
usecols = [i for i in range(3 * self.num_markers + 1 + 1)]
self.data = np.loadtxt(fpath, delimiter='\t', skiprows=5, dtype=dtype,
usecols=usecols)
self.time = self.data['time']
# Check the number of rows.
n_rows = self.time.shape[0]
if n_rows != self.num_frames:
warnings.warn('%s: Header entry NumFrames, %i, does not '
'match actual number of frames, %i, Changing '
'NumFrames to match actual number.' % (fpath,
self.num_frames, n_rows))
self.num_frames = n_rows
def __getitem__(self, key):
"""See `marker()`.
"""
return self.marker(key)
def units(self):
return self.units
def time(self):
this_dat = np.empty((self.num_frames, 1))
this_dat[:, 0] = self.time
return this_dat
def marker(self, name):
"""The trajectory of marker `name`, given as a `self.num_frames` x 3
array. The order of the columns is x, y, z.
"""
this_dat = np.empty((self.num_frames, 3))
this_dat[:, 0] = self.data[name + '_tx']
this_dat[:, 1] = self.data[name + '_ty']
this_dat[:, 2] = self.data[name + '_tz']
return this_dat
def add_marker(self, name, x, y, z):
"""Add a marker, with name `name` to the TRCFile.
Parameters
----------
name : str
Name of the marker; e.g., 'R.Hip'.
x, y, z: array_like
Coordinates of the marker trajectory. All 3 must have the same
length.
"""
if (len(x) != self.num_frames or len(y) != self.num_frames or len(z) !=
self.num_frames):
raise Exception('Length of data (%i, %i, %i) is not '
'NumFrames (%i).', len(x), len(y), len(z), self.num_frames)
self.marker_names += [name]
self.num_markers += 1
if not hasattr(self, 'data'):
self.data = np.array(x, dtype=[('%s_tx' % name, 'float64')])
self.data = append_fields(self.data,
['%s_t%s' % (name, s) for s in 'yz'],
[y, z], usemask=False)
else:
self.data = append_fields(self.data,
['%s_t%s' % (name, s) for s in 'xyz'],
[x, y, z], usemask=False)
def marker_at(self, name, time):
x = np.interp(time, self.time, self.data[name + '_tx'])
y = np.interp(time, self.time, self.data[name + '_ty'])
z = np.interp(time, self.time, self.data[name + '_tz'])
return [x, y, z]
def marker_exists(self, name):
"""
Returns
-------
exists : bool
Is the marker in the TRCFile?
"""
return name in self.marker_names
def write(self, fpath):
"""Write this TRCFile object to a TRC file.
Parameters
----------
fpath : str
Valid file path to which this TRCFile is saved.
"""
f = open(fpath, 'w')
# Line 1.
f.write('PathFileType 4\t(X/Y/Z) %s\n' % os.path.split(fpath)[0])
# Line 2.
f.write('DataRate\tCameraRate\tNumFrames\tNumMarkers\t'
'Units\tOrigDataRate\tOrigDataStartFrame\tOrigNumFrames\n')
# Line 3.
f.write('%.1f\t%.1f\t%i\t%i\t%s\t%.1f\t%i\t%i\n' % (
self.data_rate, self.camera_rate, self.num_frames,
self.num_markers, self.units, self.orig_data_rate,
self.orig_data_start_frame, self.orig_num_frames))
# Line 4.
f.write('Frame#\tTime\t')
for imark in range(self.num_markers):
f.write('%s\t\t\t' % self.marker_names[imark])
f.write('\n')
# Line 5.
f.write('\t\t')
for imark in np.arange(self.num_markers) + 1:
f.write('X%i\tY%s\tZ%s\t' % (imark, imark, imark))
f.write('\n')
# Line 6.
f.write('\n')
# Data.
for iframe in range(self.num_frames):
f.write('%i' % (iframe + 1))
f.write('\t%.7f' % self.time[iframe])
for mark in self.marker_names:
idxs = [mark + '_tx', mark + '_ty', mark + '_tz']
f.write('\t%.7f\t%.7f\t%.7f' % tuple(
self.data[coln][iframe] for coln in idxs))
f.write('\n')
f.close()
def add_noise(self, noise_width):
""" add random noise to each component of the marker trajectory
The noise mean will be zero, with the noise_width being the
standard deviation.
noise_width : int
"""
for imarker in range(self.num_markers):
components = ['_tx', '_ty', '_tz']
for iComponent in range(3):
# generate noise
noise = np.random.normal(0, noise_width, self.num_frames)
# add noise to each component of marker data.
self.data[self.marker_names[imarker] + components[iComponent]] += noise
def rotate(self, axis, value):
""" rotate the data.
axis : rotation axis
value : angle in degree
"""
for imarker in range(self.num_markers):
temp = np.zeros((self.num_frames, 3))
temp[:,0] = self.data[self.marker_names[imarker] + '_tx']
temp[:,1] = self.data[self.marker_names[imarker] + '_ty']
temp[:,2] = self.data[self.marker_names[imarker] + '_tz']
r = R.from_euler(axis, value, degrees=True)
temp_rot = r.apply(temp)
self.data[self.marker_names[imarker] + '_tx'] = temp_rot[:,0]
self.data[self.marker_names[imarker] + '_ty'] = temp_rot[:,1]
self.data[self.marker_names[imarker] + '_tz'] = temp_rot[:,2]
def offset(self, axis, value):
""" offset the data.
axis : rotation axis
value : offset in m
"""
for imarker in range(self.num_markers):
if axis.lower() == 'x':
self.data[self.marker_names[imarker] + '_tx'] += value
elif axis.lower() == 'y':
self.data[self.marker_names[imarker] + '_ty'] += value
elif axis.lower() == 'z':
self.data[self.marker_names[imarker] + '_tz'] += value
else:
raise ValueError("Axis not recognized")

View File

@ -415,6 +415,22 @@ Output:\
</br>
### Marker Augmentation (Test)
Set parameters(height, mass) in [project] of Config.toml
Open a terminal, enter `pip show pose2sim`, report package location. \
Copy this path and go to the Demo folder with `cd <path>\pose2sim\Demo\S00_Demo_Session`. \
Type `ipython`, If you want to triangulate and marker augment without filtering, test the following code:
``` python
from Pose2Sim import Pose2Sim
Pose2Sim.augmenter()
```
Recommand you augment markers after filtering.\
The .trc file should be located in pose-3d folder.\
If you enter inexact height, model'll be unstable.\
If there is a Nan value in the .trc file, it will not work properly.\
Should input Marker_add.xml in OpenSim when you scale your model.
## OpenSim kinematics
> _**Obtain 3D joint angles.**_\
> Your OpenSim .osim scaled model and .mot inverse kinematic results will be found in the OpenSim folder of your `Participant` directory.