visual3d:documentation:pipeline:model_based_data_commands:joint_angle
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
visual3d:documentation:pipeline:model_based_data_commands:joint_angle [2024/07/17 15:11] – sgranger | visual3d:documentation:pipeline:model_based_data_commands:joint_angle [2025/04/30 15:51] (current) – Big reorganization to try to keep related materials together. Work ongoing, especially for the examples. wikisysop | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== | + | ====== |
Joint angles represent a conceptual challenge to many users. Part of the challenge is related to the fact that joint angles are not vectors (unlike every other Kinematic variable in Visual3D). This means that they can't be added or subtracted, which makes the specification of a reference angle awkward. Another part of the challenge is related to the fact that there are a number of clinical/ | Joint angles represent a conceptual challenge to many users. Part of the challenge is related to the fact that joint angles are not vectors (unlike every other Kinematic variable in Visual3D). This means that they can't be added or subtracted, which makes the specification of a reference angle awkward. Another part of the challenge is related to the fact that there are a number of clinical/ | ||
Line 5: | Line 5: | ||
A more insidious problem is that there are joints, such as the shoulder, for which there is no single definition of the joint angle that is anatomically meaningful for the full range of motion of the joint. The consequence is that there is no standard sequence of rotations for describing the shoulder motion, despite the recommendation by the International Shoulder Group. | A more insidious problem is that there are joints, such as the shoulder, for which there is no single definition of the joint angle that is anatomically meaningful for the full range of motion of the joint. The consequence is that there is no standard sequence of rotations for describing the shoulder motion, despite the recommendation by the International Shoulder Group. | ||
- | Further information about joint angles can be found in the [[https:// | + | ===== Representing Joint Angles ===== |
- | ==== Transformation Matrix ==== | + | A Joint Angle is the transformation between two coordinate system that is described by a rotation matrix. This rotation matrix is rarely used to report the joint angle and it is instead represented |
- | + | ||
- | A Joint Angle is the transformation between two coordinate system that is described by a rotation matrix. | + | |
- | + | ||
- | This rotation matrix is rarely used to report the joint angle. From the rotation matrix several different representations are possible, such as Cardan/ | + | |
==== Units for Joint Angles ==== | ==== Units for Joint Angles ==== | ||
Line 17: | Line 13: | ||
Joint Angles, Joint Angular Velocity, and Joint Angular Acceleration are the only signals in Visual3D that don't use standard MKS units. Visual3D uses degrees, degrees/ | Joint Angles, Joint Angular Velocity, and Joint Angular Acceleration are the only signals in Visual3D that don't use standard MKS units. Visual3D uses degrees, degrees/ | ||
- | ==== Visual3D Default Joint Angle Conventions ==== | + | ===== Visual3D Default Joint Angle Conventions |
- | To illustrate the default segment coordinate system in Visual3D, let's look at the right and left legs. The default segment coordinate | + | To illustrate the default segment coordinate system in Visual3D, let's look at the right and left legs using their [[visual3d: |
- | The default Cardan sequence for the calculation of joint angles is **x-y-z**, which is equivalent to: | + | ^Component^Left Leg^Right Leg^ |
+ | |X|Medial|Lateral| | ||
+ | |Y|Anterior|Anterior| | ||
+ | |Z|Up|Up| | ||
- | **flexion/ | + | The default Cardan sequence for calculating joint angles is **x-y-z**, which is equivalent for each leg to: |
- | **Right Leg** | + | - X: Flexion/ |
+ | - Y: Abduction/ | ||
+ | - Z: Axial Rotation | ||
- | x-lateral | + | Taking these together, the default sign conventions for describing joint angles mean that positive joint angles for the knee and hip are as follows: |
- | y-anterior | + | |
- | z-up | + | |
- | **Left Leg** | + | |
- | x-medial | + | ^ ^ Left Leg ^^^ Right Leg ^^^ |
- | y-anterior | + | ^ Joint ^ X ^ Y ^ Z ^ X ^ Y ^ Z ^ |
- | z-up | + | | Knee | Extension | Abduction | External Rotation | Extension | Adduction | Internal Rotation | |
- | The default sign conventions for describing the joint angles are as follows: | + | | Hip | Flexion | Abduction | External Rotation | Flexion | Adduction | Internal Rotation | |
- | **Right Leg** | ||
- | |||
- | Knee(EXT+) (ADD+) (INTROT+) | ||
- | Hip(FL+)(ADD+) (INTROT+) | ||
- | **Left Leg** | ||
- | |||
- | Knee(EXT+) (ABD+) (EXTROT+) | ||
- | Hip(FL+)(ABD+) (EXTROT+) | ||
- | === The case of the Ankle Angle === | ||
- | |||
- | The ankle is especially confusing because of differences between the typical kinetic foot and the typical kinematic only foot. | ||
- | |||
- | The typical kinetic foot is displayed here: | ||
- | |||
- | {{: | ||
- | |||
- | For this representation of the foot segment the z-axis is directed from the metatarsals to the ankle center. | ||
- | |||
- | The sign convention for the ankle angle defined using the kinetic foot relative to the shank segment is: | ||
- | |||
- | **Right Leg** | ||
- | |||
- | Ankle (DFL+) (FFADDUCTION+) (EVER+) | ||
- | **Left Leg** | ||
- | |||
- | Ankle (DFL+) (FFABDUCTION+) (INVER+) | ||
- | A common kinematic only foot is displayed here: | ||
- | |||
- | {{: | ||
- | |||
- | For this representation of the virtual foot segment the y-axis is directed from the heel to the toe. | ||
- | |||
- | The sign convention for the ankle angle defined using this kinematic foot relative to the shank segment is: | ||
- | |||
- | **Right Leg** | ||
- | |||
- | Ankle (DFL+) (INVER+) (FFADDUCTION+) | ||
- | **Left Leg** | ||
- | |||
- | Ankle (DFL+) (EVER+) (FFABDUCTION+) | ||
==== The Effect of the Right Hand Rule ==== | ==== The Effect of the Right Hand Rule ==== | ||
- | As discussed in the [[# | + | As mentioned |
- | + | ||
- | However, all joint angles are treated the same in Visual3D, so the direction of positive angle is determined with respect to the segment coordinate system of the reference segment; using the Right Hand Rule. | + | |
- | + | ||
- | The result of this decision is that flexion/ | + | |
- | + | ||
- | The user can change this by negating the necessary terms when the joint angle is defined in the **Compute Model Based Items** Dialog. Refer [[Visual3D: | + | |
- | + | ||
- | ==== The Joint Coordinate System ==== | + | |
- | As a default, Visual3D calculates Joint Angles using a Cardan sequence of rotations. In the section [[# | + | All joint angles are treated |
- | If the user has modified the Segment Coordinate System from the Visual3D default, then more care must be taken in determining the sequence of rotations that is equivalent to the Joint Coordinate System. The sequence should be selected as flexion/ | + | ===== The Joint Coordinate System |
- | For a segment coordinate system | + | As a default, Visual3D calculates Joint Angles using a Cardan sequence of rotations. In the section [[# |
- | In other words, the first rotation is flexion/ | + | If the user has modified the Segment Coordinate System from the Visual3D default, then more care must be taken in determining the sequence of rotations that is equivalent to the Joint Coordinate System. The sequence should be selected as flexion/ |
**Note:** Visual3D will only allow a right hand coordinate system so the positive direction of rotation about an axis will need to be verified by inspecting the Segment Coordinate System visually in Visual3D' | **Note:** Visual3D will only allow a right hand coordinate system so the positive direction of rotation about an axis will need to be verified by inspecting the Segment Coordinate System visually in Visual3D' | ||
Line 112: | Line 62: | ||
==== Helical Angle ==== | ==== Helical Angle ==== | ||
- | The helical angle calculation is output as vector rather than a unit vector and an angle of rotation. | + | The helical angle calculation is output as vector rather than a unit vector and an angle of rotation. Visual3D is simply multiplying the angle of the rotation by the three components of the unit vector. |
- | Visual3d is simply multiplying the angle of the rotation by the three components of the unit vector. | + | Is it possible to calculate a helical axis (vector and angle) in Visual3D? The answer yes by going the opposite way. To do this you would have to first compute the magnitude of the output of the “Compute Model Based Helical_Angle” and then divide each of the components of this vector by the magnitude. |
- | + | ||
- | Is possible to calculate a helical axis (vector and angle) in Visual 3D? | + | |
- | + | ||
- | The answer yes by going the opposite way. To do this you would have to first compute the magnitude of the output of the “Compute Model BasedàHelical_Angle” and then divide each of the components of this vector by the magnitude. | + | |
To actually do this inside Visual3d you would: | To actually do this inside Visual3d you would: | ||
+ | - Use “Compute Model Based Helical_Angle” to get the helical angle as a vector. | ||
+ | - Use the Pipeline command “Signal Magnitude” (which is under Signal Math in the Pipeline) to get the magnitude of the “Compute Model Based Helical_Angle”. This would give you the angle you are looking for. | ||
+ | - Use the pipeline command Divide_Signal_BY_Constant to divide the result of “Compute Model Based Helical_Angle” by the result of the Signal Magnitude (Divide_Signal_BY_Constant is also under Signal Math in the Pipeline). This will give you the unit vector you are looking for. | ||
- | \\ | + | ===== Joint Angle Normalization |
- | Step 1) Use “Compute Model BasedàHelical_Angle” to get the helical angle as a vector. | + | |
- | + | ||
- | Step 2) Use the Pipleline command “Signal Magnitude” (which is under Signal Math in the Pipeline) to get the magnitude of the “Compute Model BasedàHelical_Angle”. This would give you the angle you are looking for. | + | |
- | + | ||
- | Step 3) Use the pipeline command Divide_Signal_BY_Constant to divide the result of “Compute Model BasedàHelical_Angle” by the result of the Signal Magnitude (Divide_Signal_BY_Constant is also under Signal Math in the Pipeline). This will give you the unit vector you are looking for. | + | |
- | + | ||
- | ==== Joint Angle Normalization ==== | + | |
Normalization is the process of referencing a joint (or segment) angle to the reference posture. The reference posture is the static posture (often referred to as the standing pose) captured as the model posture (e.g. the C3D file used to define the link model). In Visual3D the reference posture is the static trial used for the link model. Joint angles aren't vectors, which means they can not be added or subtracted. A normalized joint angle is, therefore, not computed as 3 offsets from a reference posture. | Normalization is the process of referencing a joint (or segment) angle to the reference posture. The reference posture is the static posture (often referred to as the standing pose) captured as the model posture (e.g. the C3D file used to define the link model). In Visual3D the reference posture is the static trial used for the link model. Joint angles aren't vectors, which means they can not be added or subtracted. A normalized joint angle is, therefore, not computed as 3 offsets from a reference posture. | ||
Line 140: | Line 82: | ||
Note: In Visual3D joint angles are simply the transformation from one segment coordinate system to another segment coordinate system, so it follows that the definition (e.g. orientation) of the segment coordinate systems matters. For example, if two segment coordinate systems are aligned perfectly (even though they may be displaced from each other) the resulting joint angle signal is zero. | Note: In Visual3D joint angles are simply the transformation from one segment coordinate system to another segment coordinate system, so it follows that the definition (e.g. orientation) of the segment coordinate systems matters. For example, if two segment coordinate systems are aligned perfectly (even though they may be displaced from each other) the resulting joint angle signal is zero. | ||
- | [[Visual3D: | + | ===== Examples ===== |
- | | **Deprecated examples** | + | |
- | |**These examples are not recommended for use and are included for backwards compatibility only.**\\ \\ In early version of Visual3D, using default normalization of the knee causes the RKNEE_ANGLE signal to be zero in all 3 components when the subject is in the standing posture. This has not affect on the segment coordinate system definitions, | + | |
- | ==== Examples ==== | + | A collection of examples demonstrating some practical considerations that arise when we define joint angles for the human body. |
- | === Pelvis Segment | + | ==== Ankle Angle ==== |
- | === Normalizing | + | The ankle is especially confusing because of differences between |
- | Normalizing the Pelvis | + | {{: |
- | === Shoulder Angle === | + | |
+ | For this representation of the foot segment the z-axis is directed from the metatarsals to the ankle centre. The sign convention for the ankle angle defined using the kinetic foot relative to the shank segment is: | ||
+ | |||
+ | **Right Leg** | ||
+ | |||
+ | Ankle (DFL+) (FFADDUCTION+) (EVER+) | ||
+ | **Left Leg** | ||
+ | |||
+ | Ankle (DFL+) (FFABDUCTION+) (INVER+) | ||
+ | A common kinematic only foot is displayed here: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | For this representation of the virtual foot segment the y-axis is directed from the heel to the toe. | ||
+ | |||
+ | The sign convention for the ankle angle defined using this kinematic foot relative to the shank segment is: | ||
+ | |||
+ | **Right Leg** | ||
+ | |||
+ | Ankle (DFL+) (INVER+) (FFADDUCTION+) | ||
+ | **Left Leg** | ||
+ | |||
+ | Ankle (DFL+) (EVER+) (FFABDUCTION+) | ||
+ | |||
+ | ==== Pelvis Angle ==== | ||
+ | |||
+ | The [[visual3d: | ||
+ | |||
+ | ==== Normalizing the Pelvis Angle ==== | ||
+ | |||
+ | [[Visual3D: | ||
+ | |||
+ | ==== Shoulder Angle ==== | ||
There is no single definition of the shoulder joint angle that is anatomically meaningful for the full range of motion of the shoulder joint. | There is no single definition of the shoulder joint angle that is anatomically meaningful for the full range of motion of the shoulder joint. | ||
Line 159: | Line 131: | ||
A good description of the challenges of the shoulder angle by Jim Richards can be found [[[https:// | A good description of the challenges of the shoulder angle by Jim Richards can be found [[[https:// | ||
- | === Computing the Range of Motion === | + | ==== Computing the Range of Motion ==== |
+ | The range of motion of the pelvis angle is commonly defined as the range of each component of the segment angle. While this isn't mathematically correct because joint angles are not vectors, it is still quite common. | ||
- | === Creating a Virtual Laboratory: Example 1 === | + | ==== Virtual Laboratory |
+ | A Virtual Laboratory segment can be created for many modelling conveniences, | ||
+ | ===== See Also ===== | ||
+ | |||
+ | Further information about joint angles can be found in the [[https:// | ||
+ | Or, go back to the overview of [[visual3d: |
visual3d/documentation/pipeline/model_based_data_commands/joint_angle.1721229071.txt.gz · Last modified: 2024/07/17 15:11 by sgranger