--- a +++ b/Docs/anymocap/index.md @@ -0,0 +1,306 @@ +(anymocap)= + +# The AnyMoCap Framework + +The AnyMoCap model is an effort to create a simple and unified framework for +doing any kind of MoCap analysis with the [AnyBody Modeling +System](https://www.anybodytech.com). + +:::{figure-md} +:align: center + +<img src="/_static/anymocap.jpg" width="50%"> + +Making MoCap models the easier +::: + +## Features + +- Adapts to any Mocap protocol +- Optimization of marker locations and anthropometrics. +- Support Marker based (C3D) and inertial based (BVH) input. +- Support for standard force plates: (Types 1-4) plus more. +- {doc}`Prediction of ground reaction forces <grf-prediction>` +- Easy setup with multiple trials and subjects + + +## Over determinate kinematic analysis + +:::{seealso} +:class: margin +The AnyBody tutorials, and the lesson on using the +{doc}`AnyMoCap model <tutorials:Making_things_move/lesson5>` +::: + + +Musculoskeletal models that use Motion capture data are different from other +types of models found the AMMR. Most importantly, MoCap models usually require +an over-determinate kinematic solver to handle the excess in information that +the optical markers provide. + +The over-determinate solver in AMS works great, but +it can only find velocities and accelerations numerically. That has some +performance issue when running inverse dynamics analysis. To overcome the +problem, the MoCap analysis is split into a two-step procedure, as illustrated on +the figure below: + +(anymocap-flow-figure)= + +:::{figure} /Applications/Mocap/anymocap_flow.png +Figure 1: The framework of the AnyMoCap model. Analysis is split into three +steps. *Parameter identification*, *Marker tracking*, *Inverse dynamic +analysis*. +::: + +The over determinate kinematic analysis solves the model for positions, and +writes joint angles to a a set of files. These joint angles can then be used +with the determinate kinematic solver in the inverse dynamic analysis. + +## AnyMoCap examples + +The following gallery shows different examples using the AnyMoCap framework. + +:::{tip} +:class: margin +The {ref}`example_mocap_multitrial` is likely the best starting point when +working with many trials/subjects from a MoCap experiment. +::: + + +:::{include} /Applications/Mocap/gallery.txt +::: + + +## Get started + +:::{caution} +:class: margin +It is recommended *not* to place working models inside the AMMR folder. +Copy the example elsewhere before using. +::: + +The easiest way to get started, is to adapt one the example application above. + +A typical application using the AnyMoCap framework will look something like this: + +```{code-block} AnyScriptDoc +:linenos: true + + #include "../libdef.any" + + #path MOCAP_TRIAL_SPECIFIC_DATA "TrialSpecificData.any" + #path MOCAP_SUBJECT_SPECIFIC_DATA "SubjectSpecificData.any" + #path MOCAP_LAB_SPECIFIC_DATA "LabSpecificData.any" + + // Include the AnyMoCap Framwork + #include "<ANYMOCAP_MODEL>" +``` + +You can place this main file anywhere on your computer as long the +`libdef.any` file points to model repository (AMMR) you want to use. + + + +### Model structure + +When loading the AnyMoCap model the following layout shows up in the model tree: + +:::{figure} model-structure.png +::: + +#### Description of Model folders + +::::{dropdown} Top-level model structure. +:animate: fade-in-slide-down +:icon: file-directory + +```{eval-rst} +.. table:: + + ======================================= ============================================================================================== + Folder name Description + ======================================= ============================================================================================== + ``ModelSetup`` Contains contains all the machinery of the AnyMoCap Frame. + ``HumanModel`` Contain the Human model used. This is constructed automatically by the AnyMoCap framework. + ``Main.EnvironmentModel`` Contains the model parts which are not part of the Human model. (e.g. force plate and environment) + ``Studies`` Contains the three studies ``ParameterIdentification``, ``MarkerTracking``, and + ``InverseDynamicStudy``. See :ref:`figure 1 <AnyMoCap-flow-figure>`. + ``DrawSettings`` Contains visual and color settings for the model. + ``RunParameterIdentification`` Operation to run the Parameter Identification study and save the results. + ``RunAnalysis`` Operation to 1. load the optimized parameters (scaling and marker positions), 2. run marker + tracking and finally 3. run inverse dynamics analysis, 4. save results to and HDF5 file for later replay. + ``LoadAndReplay`` This loads any previously saved data and starts the replay operation. + ======================================= ============================================================================================== + +:::: + +(anymocap-settings)= + + +## Options and settings + +The `Main.ModelSetup` folder contains the main machinery of the *AnyMoCap* +framework. It is controlled by a number of settings both `#define`/`#path` switches +and variables which can be set directly. For example: + +```AnyScriptDoc +#define MOCAP_INPUT_DATA_TYPE "C3D" + +Main.ModelSetup.TrialSpecificData.LastFrame = 240; +``` + +The following two sections gives an overview of the settings available: + +### Paths settings and switches + +Path settings and switches are usually prefixed by `MOCAP_` to indicate that +they are specific to the AnyMoCap framework. + + +::::{dropdown} `#path` settings for AnyMoCap. +:animate: fade-in-slide-down +:icon: code + +```{eval-rst} +.. table:: + + ======================================= ============================================================================================== ======================================== + Settings Description Default + ======================================= ============================================================================================== ======================================== + ``MOCAP_TRIAL_SPECIFIC_DATA`` Path to a file with trial specific data. This file is include within the None + ``Main.ModelSetup.TrialSpecificData`` folder. + ``MOCAP_SUBJECT_SPECIFIC_DATA`` Path to a file with subject/session specific data. This file is include within the None + ``Main.ModelSetup.SubjectSpecificData`` folder. + ``MOCAP_LAB_SPECIFIC_DATA`` Path to a file with laboratory specific data (i.e. data common for the whole model or None + experimental setup. This file is include within the ``Main.ModelSetup.LabSpecificData`` + folder. + ``MOCAP_C3DSETTINGS`` A file with setting for the C3D file. None + + ``MOCAP_BVHSETTINGS`` A file with setting for the C3D file. None + ``MOCAP_EXTRA_DRIVERS_FILE`` A file with user defined extra drivers. Additional drivers are useful/necessary None + in some cases where the marker protocol doesn't provide enough information + to specify all degrees of freedom. Hence, these drivers complement a + specific driver protocol. This file is included in ``Main.ModelSetup.MoCapExtraDrivers`` + ``MOCAP_MARKER_PROTOCOL_FILE`` A file with the definition of the marker protocol. None + This file is included in ``Main.ModelSetup.MoCapDrivers`` + ``BODY_MODEL_CONFIG_FILE`` A file with the body model configuration. None + ``MOCAP_FORCE_PLATE_FILE`` A file with the definition of the force plates. None + ``MOCAP_C3D_DATA_PATH`` Path to folder where C3D files are stored. Main file directory + ``ANYMOCAP_MODEL_PATH`` Path to the AnyMoCap framework. The AnyMoCap implementation in the AMMR + ``ANYBODY_PATH_OUTPUT`` Path to where output files are saved. The main file directory + ``TEMP_PATH`` Path to where temporary files are saved (joint angles etc.) ``ANYBODY_PATH_OUTPUT`` + ======================================= ============================================================================================== ======================================== + +``` + +:::: + + + +::::{dropdown} `#define` settings for AnyMoCap. +:animate: fade-in-slide-down +:icon: code + +```{eval-rst} +.. table:: ``#define`` settings for AnyMoCap. + + ============================================== ============================================================================================== ======================================== + Setting Description Default value + ============================================== ============================================================================================== ======================================== + ``MOCAP_INPUT_DATA_TYPE`` Data type ("C3D", "BVH") used by the AnyMoCap application. "C3D" + ``MOCAP_CREATE_PARAMETER_ID_SHORTCUT`` Setting for creating the ``Main.RunParameterIdentification`` shortcut operation . ON + ``MOCAP_OUTPUT_FILENAME_PREFIX`` Prefix added to all output files from the model. "" + ``MOCAP_PARAMETER_FILE_PREFIX`` Prefix for the parameter identfication files. Can be usefull to set explicitly "" + in special cases where subjects share a common parameter file. + ``MOCAP_USE_GRF_PREDICTION`` Switch to indicate that the model uses Ground Reaction Force (GRF) prediction. It will ensure OFF + that the AnyMoCap framework uses the appropriate settings. (e.g. recruited actuators as weak + residuals on the pelvis. + ``MOCAP_FILTER_JOINT_ANGLES`` Switch to enable extra low pass filtering of the output from the Marker tracking. Useful in OFF + some cases where other drivers (e.g. joint limits) cause high accelerations in the output + from Marker tracking. + ``MOCAP_HIDE_UPPERBODY`` Switch hide the upper body (Thorax, neck, arms and skull). OFF + ``MOCAP_HUMAN_GROUND_RESIDUALS`` The type of Human Ground residuals (Hand of God) used. Possible values are "Pelvis" + "Pelvis", "Thorax", "PelvisWeak". "PelvisWeak" is default when using GRF prediction. + ============================================== ============================================================================================== ======================================== + + +``` +:::: + + +### Configurable variables + +The `Main.ModelSetup` folder contains all the machinery of the AnyMoCap +framework. It has three important subfolder (`TrialSpecificData`, +`SubjectSpecificData` and `LabSpecificData`). + +:::{figure} model-setup-structure.png +These three folders contain variables specific to the application but also has +a few variables which can be assigned directly by the user. +::: + + +::::{dropdown} Variables in the `Main.ModelSetup.TrialSpecificData` folder which can be overridden. +:animate: fade-in-slide-down +:icon: code + + +```{eval-rst} +.. table:: + + ======================================= ============================================================================================== ======================================== + ``Main.ModelSetup.TrialSpecificData`` Description Default value + ======================================= ============================================================================================== ======================================== + ``TrialFileName`` Name of the current trial. This is usually used for naming output files and Name of the main-file directory + locating the input c3d files (c3d filename without the extension) + ``LoadParametersFrom`` List of trial names from which the scaling and optimized marker postions are loaded from. ``{TrialFileName}`` + ``FirstFrame`` First frame of the C3D/BVH file to use as starting frame in the analysis First frame in the C3D/BVH file + ``LastFrame`` The last frame of the C3D/BVH file to use in the analysis Last frame in the C3D/BVH + ``tStart`` Specifies the start time of the analysis. Setting this overides ``FirstFrame`` Calculated based on ``FirstFrame`` + ``tEnd`` Specifies the end time of the analysis. Setting this overides ``LastFrame`` Calculated based on ``LastFrame`` + ``nStep`` Number of time steps used in the analysis. (Note that the number of time-steps in the inverse Calculate based on ``tStart``/``tEnd`` + dynamic analysis will be 4 less than this values) + ======================================= ============================================================================================== ======================================== + + +``` +:::: + + +::::{dropdown} Variables in the ``Main.ModelSetup.LabSpecificData`` folder which can be overridden. +:animate: fade-in-slide-down +:icon: code + +```{eval-rst} +.. table:: + + ======================================= ============================================================================================== ======================================== + ``Main.ModelSetup.LabSpecificData`` Description Default value + ======================================= ============================================================================================== ======================================== + ``Gravity`` Specifies the gravity vector in global reference frame. ``{0,0,-9.81}`` + ``LowPassFilterSettings`` Folder with filter settings used for markers and analog (force) data. + ``.MarkerFilterCutOffFrequency`` The lowpass cutoff frequency used for the marker data. ``5.0`` + ``.MarkerFilterOrder`` The filter order used when low pass filtering the marker data. ``2`` + Note: Since the filter is applied as a zero phase filter + (**filtfilt** or forward/backward filter) the effective filter order is the + double of this value. + ``.ForceFilterCutOffFrequency`` The lowpass cutoff frequency used for the force/analog data. ``12.0`` + ``.ForceFilterOrder`` The filter order used when low pass filtering the force/analog data. ``2`` + Note: Since the filter is applied as a zero phase filter + (**filtfilt** or forward/backward filter) the effective filter order is the + double of this value. + ======================================= ============================================================================================== ======================================== + + +``` +:::: + +## More resources + +This section contains further documentation on the AnyMoCap framework. + +```{toctree} +:maxdepth: 1 + +grf-prediction +```