User Tools

Site Tools


visual3d:documentation:modeling:virtual_lab:virtual_lab_direction_of_progression_method_3

This is an old revision of the document!


this script is explained in the virtual lab direction of progression tutorial. this script outlines method 3.

before running this script:

  • a static trial must be loaded into the workspace
  • a model template (with modified virtual lab) must be loaded into the workspace
  • a dynamic trial must be loaded into the workspace


**__add_a_comment__**
! /comment= step 1: direction of progression
;

!  find the location of the model's center of mass at the beginning of the trial
event_explicit
/event_name=trial_start
/frame=50
! /time=
;

event_explicit
/event_name=trial_end
/frame=eof-40
! /time=
;

compute_model_based_data
/result_name=model_cog
/function=model_cog
/segment=
/reference_segment=
! /resolution_coordinate_system=lab
! /use_cardan_sequence=false
! /normalization=false
! /normalization_method=
! /normalization_metric=
! /negatex=false
! /negatey=false
! /negatez=false
! /axis1=x
! /axis2=y
! /axis3=z
;

metric_signal_value_at_event
/signal_types=link_model_based
! /signal_folder=original
/signal_names=model_cog
/result_metric_folder=prog
/result_metric_name=model_cog_start
! /apply_as_suffix_to_signal_name=false
! /signal_components=
/component_sequence=all
/event_name=trial_start
/generate_mean_and_stddev=false
! /append_to_existing_values=false
! /generate_vector_length_metric=false
! /retain_no_data_values=false
;

metric_signal_value_at_event
/signal_types=link_model_based
! /signal_folder=original
/signal_names=model_cog
/result_metric_folder=prog
/result_metric_name=model_cog_end
! /apply_as_suffix_to_signal_name=false
! /signal_components=
/component_sequence=all
/event_name=trial_end
/generate_mean_and_stddev=false
! /append_to_existing_values=false
! /generate_vector_length_metric=false
! /retain_no_data_values=false
;

evaluate_expression
/expression= ( metric::prog::model_cog_end - metric::prog::model_cog_start )
/result_type=metric
/result_folder=prog
/result_name=dir_prog_y_2
;

! create a unit vector of the differences
!   there should be no progression in the vertical direction so set z=0

evaluate_expression
/expression= unit_vector ( metric::prog::dir_prog_y_2::x , metric::prog::dir_prog_y_2::y , 0 )
/result_type=metric
/result_folder=prog
/result_name=dir_prog
;

**__add_a_comment__**
! /comment= step 3: define the trunk angle relative to the virtual lab
;

! define rotation from lab to vlab
!    z component is perpendicular to the ground
!    y component is the direction of progression
!    x component is y cross z 

! the rotation from lab to vlab is defined using the direction of progression define in step 1 and these values will be used to define the joint angles

! define rotation from lab to trunk
!    using compute model based data command select the joint_rotation function and resolve the thorax/ab rotation in the lab coordinate system 

compute_model_based_data
/result_name=trunk_rot
/function=joint_rotation
/segment=rta
! /reference_segment=lab
/resolution_coordinate_system=
! /use_cardan_sequence=false
! /normalization=false
! /normalization_method=
! /normalization_metric=
! /negatex=false
! /negatey=false
! /negatez=false
! /axis1=x
! /axis2=y
! /axis3=z
;

**__add_a_comment__**
! /comment=
;

!  solve for the rotation between vlab and the trunk segment 

evaluate_expression
/expression= ( metric::prog::dir_prog::1 * link_model_based::original::trunk_rot::7 ) + ( metric::prog::dir_prog::2 * link_model_based::original::trunk_rot::8 )
/result_type=derived
/result_folder=trunk_angle
/result_name=r32
;

evaluate_expression
/expression= link_model_based::original::trunk_rot::9
/result_type=derived
/result_folder=trunk_angle
/result_name=r33
;

evaluate_expression
/expression= ( metric::prog::dir_prog::2 * link_model_based::original::trunk_rot::7 ) - ( metric::prog::dir_prog::1 * link_model_based::original::trunk_rot::8 )
/result_type=derived
/result_folder=trunk_angle
/result_name=r31
;

evaluate_expression
/expression= ( metric::prog::dir_prog::2 * link_model_based::original::trunk_rot::1 ) - ( metric::prog::dir_prog::1 * link_model_based::original::trunk_rot::2 )
/result_type=derived
/result_folder=trunk_angle
/result_name=r11
;

evaluate_expression
/expression= ( metric::prog::dir_prog::2 * link_model_based::original::trunk_rot::4 ) - ( metric::prog::dir_prog::1 * link_model_based::original::trunk_rot::5 )
/result_type=derived
/result_folder=trunk_angle
/result_name=r21
;

! solve for the joint angles:
!    solve for theta x
!    solve for theta y
!    solve for theta z 

evaluate_expression
/expression= atan ( - derived::trunk_angle::r32 / derived::trunk_angle::r33 )
/result_type=derived
/result_folder=trunk_angle
/result_name=theta_x
;

evaluate_expression
/expression= atan ( derived::trunk_angle::r31 / sqrt ( (derived::trunk_angle::r11 ^ 2) + (derived::trunk_angle::r21 ^ 2) ) )
/result_type=derived
/result_folder=trunk_angle
/result_name=theta_y
;

evaluate_expression
/expression= atan ( - derived::trunk_angle::r21 / derived::trunk_angle::r11 )
/result_type=derived
/result_folder=trunk_angle
/result_name=theta_z
;

! convert from radians to degrees

multiply_signals_by_constant
/signal_types=derived+derived+derived
/signal_folder=trunk_angle+trunk_angle+trunk_angle
/signal_names=theta_x+theta_y+theta_z
! /result_types=
/result_folder=trunk_angle
/result_names=++
/result_suffix=_deg
! /signal_components=
/constant= ( 180 / pi() )
;
visual3d/documentation/modeling/virtual_lab/virtual_lab_direction_of_progression_method_3.1718801359.txt.gz · Last modified: 2024/06/19 12:49 by sgranger