====== Force Assignment ====== Visual3D assigns segments to force platforms based on the estimated contact of a segment with the force platform. Contact is estimated by comparing the path of the segment's center of mass with the center of pressure (COP) on the force platform. Force assignments allow the user to compute the ground reaction force and center of pressure based on specifying a segment rather than the force platform. For example, it is possible to create a report graph for the GRF and COP under the right foot. This means that the user doesn't have to document which segment hit which force platform. At each frame of contiguous COP values, for every segment in the model, the distance between that segment's center of mass and the center of pressure for all Force Platforms/Structures is calculated. The mean value of each of these per-segment signals is computed and the segment with the smallest mean distance is assigned the force. ==== KINETIC_KINEMATIC Forces ==== If one or more forces are assigned to a segment then 3 resultant [[visual3d:documentation:visual3d_signal_types:kinetic_kinematic_data_type|Kinetic_Kinematic]] signals are created: - [[Visual3D:Documentation:Kinematics_and_Kinetics:Force|Force_n]] - Assigned Forces - [[Visual3D:Documentation:Kinematics_and_Kinetics:COP|COP_n]] - Assigned Center of Pressure - [[Visual3D:Documentation:Kinematics_and_Kinetics:Free_Moment|Free_Moment_n]] - Assigned Free Moment ==== COP Distance to Segment ==== {{:COPDistance.jpg}} The [[Visual3D:Documentation:Modeling:Segments:Segment_to_COFP_Distance|COP Distance]] is a threshold distance that must be satisfied in order to identify a force assignment. If the distance is too small or the COP error is too high then recognizable assignments might not be made. The default value of 0.2 metres has proven to be an acceptable value, so users should refrain from modifying this value unless they have a very good reason. ==== Automatic_Gait_Events ==== Automatic_Gait_Events are based on the force assignments, so if your assignments are bad, or don't exist, the gait events will be incorrect. It is extremely important that users check the assignments carefully. This is one of the most serious challenges to users that would like to have one pipeline process all of the data automatically. The pipeline should always pause after the model template has been applied and the movement trials assigned to the model. This is the time when the force assignments should be "cleaned up". If you compute the automatic gait events before the cleanup, your event labels will be junk. ==== Working with Assigned Forces at the ANALOG Rate ==== The model-based items [[visual3d:documentation:pipeline:model_based_data_commands:grf_data|GRF_DATA]] and [[visual3d:documentation:pipeline:model_based_data_commands:cop_path|COP Path]] are signals stored at the [[visual3d:documentation:c3d_signal_types:target_data_type|POINT data rate]] because these signals can be resolved into a Segment Coordinate System and all Segment Coordinate Systems (except the default LAB) are at the POINT data rate. There are times, however, when it would be useful to get the Force, CofP, and FreeMoment for force assignments at the [[visual3d:documentation:c3d_signal_types:analog_data_type|ANALOG sample rate]]. In these cases it is possible to use the [[visual3d:documentation:pipeline:expressions:assigned_force_functions|Assigned Force expressions]]. ==== Updating Assigned Forces Warning ==== The automatic force assignments are computed on [[Visual3D:Documentation:Pipeline:File_Commands:Recalc|Recalc]]. If the forces are modified by either changing the parameter or by processing the signals, the force assignments are not updated until [[Visual3D:Documentation:Pipeline:File_Commands:Recalc|Recalc]]. ==== Manual Assignment ==== Under the Model menu is an option to View/Edit Segment to Force assignments. This allows the user to check that forces have been applied to the appropriate segments for the appropriate number of frames. If, for example, only a partial contact is made between the foot and the force platform, the user should probably delete the force assignment. **Note: The dialog can only act on one active motion file. If more than one file are active (ALL_FILES or a TAG), the dialog will not appear** {{:AssignForceMenu.jpg}} {{:AddCustomForceDlg.jpg}} If the Event Label for contact with the force platform are not consistent with the force assignment, spurious results may be observed. It is always good practice to verify that the force assignments make sense. ==== Pipeline Command ==== Certain operations with force assignments can be automated using pipeline commands: - [[Visual3D:Documentation:Pipeline:Force_Commands:Assign_Segments_To_Force_And_COP|Assign_Segments_To_Force_And_COP]] - [[Visual3D:Documentation:Pipeline:Force_Commands:Remove_Segment_Assignment_To_Force_And_COP|Remove_Segment_Assignment_To_Force_And_COP]] ==== External Forces ==== Force platforms are commonly used for biomechanical analyses. In recent years with the introduction of robotics for rehabilitation and the desire to have patients supported during gait (e.g. walkers), we have had many requests to include force transducer data into the Inverse Dynamics calculations. There are no general rules for specifying these external devices in the C3D file format, so we are making this up as we go along. At no point will we violate the C3D file format, but the C3D Parameters that we use may not be recognized by other manufacturers. ==== Example 1: Applying a force to a segment ==== You can apply recorded external forces to any segment in the model (except kinematic only segments) via the dialog below. The user is required to enter signals (containing at least 3 components) in the Force, Center of Pressure, and Free Moment combo boxes, the segment to which the force is applied, and the frames at which the force should be applied. {{:AddCustomForceDlg.jpg}} The assignment can be edited by selecting the View/Edit Segment To Force Assignments option under the Model menu item. === Apply external forces (other than force plates) to any segment location === Under the Model menu item is the option to "View/Edit Force assignments". The user can apply any external force to a segment by providing the signal representing the force, the signal representing the Center of Pressure (which could be a landmark location on a segment), and a signal representing the free moment. If the message **You must have an active motion capture file and link model to view force platform assignments!** pops up then you have not selected an Active Movement File. To do this you must switch to Signal and Event processing mode and select the movement file. If you are in Model Builder mode or Workspace mode, there may not be an active file. ==== Example 2: 3 DOF Force Transducer ==== Given an external force transducer that measures the 3 components of a force and streams the data as 3 analog channels; e.g the force transducer is a handle held in the hand. Create a 3 component vector from these 3 analog channels. In this example, the analog signals are scaled by a METRIC value. ! Create a scaled force signal in the Transducer Coordinate System [[Visual3D:Documentation:Pipeline:Expressions:Expressions_Overview|Evaluate_Expression]] /EXPRESSION=VECTOR(ANALOG::ORIGINAL::CH1,ANALOG::ORIGINAL::CH2,ANALOG::ORIGINAL::CH3)*METRIC::PROCESSED::SCALE /RESULT_NAME=FORCE ! /RESULT_TYPE=DERIVED ! /RESULT_FOLDER=PROCESSED ; ! Transform the FORCE from the transducer coordinate system to the lab coordinate system [[Visual3D:Documentation:Pipeline:Signal_Commands:Transform_Data_Coordinate_System|Transform_Data_Coordinate_System]] /SIGNAL_TYPES= DERIVED /SIGNAL_NAMES= FORCE /SIGNAL_FOLDER= PROCESSED /FROM_SEGMENT_CS= TRANSDUCER /TO_SEGMENT_CS= LAB /RESULT_TYPE= DERIVED /RESULT_FOLDER= PROCESSED /RESULT_SUFFIX= _LAB ; ! For convenience, we create a FREEMOMENT signal that contains only zero's. The following ! will create the FREEMOMENT signal such that is has the same data rate and number of frames ! as the FORCE signal [[Visual3D:Documentation:Pipeline:Expressions:Expressions_Overview|Evaluate_Expression]] /EXPRESSION=0*DERIVED::PROCESSED::FORCE_LAB /RESULT_NAME=FREEMOMENT /RESULT_TYPE=DERIVED /RESULT_FOLDER=PROCESSED ; The signal FORCE_LAB can now be applied to a segment {{:AddCustomForceDlg.jpg}}