Personal tools
User menu

Joint Angle

From Visual3D Wiki Documentation

Jump to: navigation, search
{{#switch:Joint Angle

|=Languages: |Languages=Languages: |MediaWiki=Languages: |zh=语言: |af |aa=: |al |Gju=a: |am |ምቋ= |an=Idioma: |an==Sprǣc: |ar==اللغة | |c==ܫܢܐ: |arn=D |gun= |arz=:ال |ة |=s=ভাষা: |ast=Llingua: |a |=A=a: |ay=Aru: | |=Di=: |bat-s |=Ka=ba:

|cc=:زبا ||b=l=Ta |ramon: =be=Мов | |b=-tarask=М |а: =bg=Език: | |=ভ=ষা: |br=Y |h : |bs=J=zik: |ca= |en=ua: |cdo= |ṳ̄=ngiòng: |ce=М |т:=|ceb=P |ul=ngan:

|h==engguahe ||ck=-arab=:زمان |co= |ng=a: |crh-c |l=Т=ль: |crh-la |=T=l: |cs=Jaz |: |cu=ѩꙁ=́къ : |cv |ĕл=е: |cy= |ith: |da=Sprog: |d |Sprache:=|diq |ıw=n: |ds |Rě=: |ee=Gbe: |el=Γ |σσ=: |en=Langu |e:=|eo=Li |vo= |es=I |om=: |et=Ke |: |=u=Hizku |za:=|ext= |lr=: |f |:ز=ان |fi=Kieli: |fo=Mál: |fr= |ng=e: |frc |an=ue: |fr |Le=goua: |fu==Lenghe: | |=Ta=l: |ga |ea=ga: |gag= |l:=|gan-h |s==言: |g |-h=nt=語言:

|l=L=ngua: | |=Ñe=ẽ: |got= |zda= |grc=Γ |σσ=: |gs |Sp=och: |g |ભાષ=: |g |Çhengey:=|hak=Ng |ngièn: |=aw=Kou |le=o: |he= |ה:=|hi=भाषा ||hi=-latn= |asa= |hr=Jezik: |h |=Rě=: |ht=L |g:=|hu=Nyelv: |h |Լե=ու. |ia=L |gua= |id=Bahasa: |ie==ingue: |ilo= |ng=uahe: | |=L=nguo: |is=Tun |mál: |it=Lingua ||j==言語: | |=Ba=a: |ka |ნა= |kaa |il= |kab= |tl=yt: |kg=Ndi |a:=|kiu=Zo | |=k-arab= |تى= |kk-cy |=Ті=: |kk-latn |il= |km=ភា |៖ =kn=ಭಾಷೆ: | |=언=: |ksh= |ro=h: |ku- |tn=Ziman ||k==Кыв: |kw= |th:=|ky= |л: =la=Lingu | |=b=Sproo |: |=fn=L |gua: |l==Taol: |l |=Lengoa= |loz=Z | Sisele=t: | |=K=lba: |lv=Valoda ||l=h=語: |mdf=Кял | |=g=fiten | |m=r=Йылме ||mk=Јаз=к: |ml |ാഷ= |mn=Хэ | |=r=भाष | |=s=Bahas | |=t=Lingw | |=wl=Lhéng |: |=y=ဘာသာ: |my==Кель ||na==Tlahtō |i: =nap=Lengua: | |s==praak: |nd=-nl=Taa | |n==भाषा: |new=भाषा: |nl |aa=: |nn=S |åk:=|no=Språk:

|so=Polelo: |oc |en=a: |os=Æвз |: =pa=ਭਾਸ਼ | |=am=Amanu: |pd |Sc=prooch: |pd==Sproak ||pl=Język: |p |=L=nga: |pnb=بول | |p=t=Γλώσσαν ||pr==Bilā: |ps= |ه: =pt|pt-b |Lín=ua: |qu |imay: =rm=Li |ua= |ro=Limba: | |a-t=ra=Lénga: |ru |зы=: |sa |ाष=: |sah= |уг=н тыла: |sc==imba: | |n==ingua: |sc==Leid: |sdc |in=a: |se=Giella: | |i=I=om: |s |Jez=k: |shi=tu |ayt= |si=භා |ව:=|sk=Jaz |: |=l=Jezi | |s=i=Sproach | |s==Luqada: |sq=Gj |a:


|зи=: |sr-e |Je|ik: |=rn=Tongo ||s==Lúlwî |: =stq=Spr |ke= |su=B |a: |sv=S=råk: |s |Lu=ha: |szl= |dk=: |ta=மொழி: | |=భా=: |tet=Lian: |tg-cyrl= |бо=: |th= |ษา:=|ti=ቋንቋ ||tk=Dil:

|l=W=ka: |t |Le=: |tr=D |: |=t-cyr |Те=: |tyv |ыл:=|ug-arab |تى= |ug-latn=Til: | |=М=ва: |v |=L=ngua:

|ep==el’: |vi= |ôn=ngữ: |v |Pü=: |vro |iil: =wa=Lingaedj | |war=Yinakn |: |=o=Làkk ||w=u=语言: |xal |елн= |xh=Ulw |i:=|xmf= |ნა= |yi=שפ |ך:=|yo=Èd | |y=e=語言:

|ea=Taele: |zh-ha |=语=: |zh-hant |言: =zu=Ul |i:

|#d=fault=Langu |e:=}}</onlyinclu

 English  • Français • Deutsch • Italiano • Português • Español • 中文 • 日本語 • 한국어 


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/sports related conventions that specify a reference angle that is often not consistent with the definition of the segment coordinate systems in Visual3D, which usually requires Visual3D users to create Virtual Segments whose segment coordinate systems are consistent.

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.

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 system in Visual3D is defined as follows:

The default Cardan sequence for the calculation of joint angles is x-y-z, which is equivalent to:

flexion/extension-abduction/adduction-axial rotation

Right Leg


Left Leg


The default sign conventions for describing the joint angles are as follows:

Right Leg

Knee(EXT+) (ADD+) (INTROT+)
Hip(FL+)(ADD+) (INTROT+)

Left Leg

Knee(EXT+) (ABD+) (EXTROT+)
Hip(FL+)(ABD+) (EXTROT+)

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:

tutorial1 16.jpg

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


Left Leg


A common kinematic only foot is displayed here:

RFT 2 Rotated.jpg

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


Left Leg


Joint Angle Lecture

Joint angle lecture prepared by Tom Kepple when he was teaching at the University of Delaware. [Joint Angle Lecture]

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. From the rotation matrix several different representations are possible, such as Cardan/Euler angle, Helical angle, Quaternion. All representations of the transformation are equivalent but the interpretation of the joint angle relative to the anatomy varies with the description.

For example, the Cardan sequence XYZ as represented in the following transformation matrix abg can be computed as follows:

Step 1: compute b

Step 2: compute a

Step 3: compute g

For example, represent the rotation matrix as:

Resolve the joint angle as follows:

Units for Joint Angles

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/sec, and degrees/sec^2. These are traditional units in Gait Analysis and we have followed the trend.

Right Hand Rule

As discussed in the Visual3D Default Joint Angle Conventions section above on this page, the medial and lateral coordinate system directions for left and right sides are different. This will effect the sign convention for joint angles. Meaning that the sign convention is not consistent between left and right sides. For example, inward rotation of the right leg (rotation about the long axis toward medial) is positive, but inward rotation of the left leg (rotation about the long axis toward medial) is negative.

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/extension has the same sign for left and right legs, but inward/outward rotation and abduction/adduction have opposite signs.

The user can change this by negating the necessary terms when the joint angle is defined in the Compute Model Based Items Dialog. Refer here for an example.

The Joint Coordinate System

As a default, Visual3D calculates Joint Angles using a Cardan sequence of rotations. In the section Visual3D Default Joint Angle Conventions on this page, we detailed the Visual3D default segment coordinate system (z-up, y-anterior). Therefore the cardan sequence X-Y-Z is equivalent to the Joint Coordinate System.

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/extension - abduction/adduction - axial rotation.

For a segment coordinate system defined as y-up and x-anterior, the Cardan Sequence equivalent to the Joint Coordinate system is Z-X-Y.

In other words, the first rotation is flexion/extension about the reference coordinate system, the last rotation is axial rotation about the other coordinate system, and the middle rotation is about an axis perpendicular to the other two axes.

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's Model Builder mode.

Cole GK, Nigg BM, Ronsky JL, Yeadon MR (1993) Application of the Joint Coordinate System to Three-Dimensional Joint Attitude and Movement Representation: A Standardization Proposal. J Biomech Eng, 115, 344-9

Cardan Sequence

In early versions of Visual3D (version 2 and lower), we output the 3 components of the Cardan angle in terms of the first, second and third rotation. This was confusing to people because the edit report dialog refers to the first three components as XYZ. In Version 3.00.3 we changed the output so that the X component of the joint angle refers to the rotation about the X axis regardless of the sequence, similarly for Y and Z rotations.

Euler Sequence

In version 3.28 we introduced the Euler sequences (e.g. ZYZ), in which the first and third component are the same. In this case instead of referring to the components as XYZ, we revert to our original scheme, in which the output angle is defined with respect to the first axis, second axis, and third axes.

Helical Angle

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.

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.


tually do this inside Visual3d you would:

S e

1) Use “Compute Model BasedàHelical_Angle” to get the helical angle as a vector.

Step 2)

e 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 p

eline 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 Normaliz


Normalization is the pr cess 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 ve

ors, which means they can not be added or subtracted. A normalized joint angle is, therefore, not computed as 3 offsets from a reference posture.

=Version 5 Changes

===of version 5, the Normalization option for Joint_Angle was removed from the Compute_Model_Based_Data drop down list because it was sensitive to the subject's orientation relative to the lab, and was often being used incorrectly. We recommend using [[Joint Angle#Joint Anglvirtual segments as the reference.

==]]arlier Versions (n


Not recommended: We ecommend using [[Joint Angle#Joint AnglJoint Angle Normalization using Virtual Segments

For example, the ]]llo

ng definition 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, so normalizing the joint angle does not "clean up" any errors in the definition of the segment. It simply sets the posture in which the joint angle is zero.



We don't recommend u]]

the default normalization because there are situations in which the intermediate pose in the calculations will be in gimbal lock and the normalized angle will be undefined. In addition, it was sensitive to the subject's orientation relative to the lab, and was often being used incorrectly.

===Joint Angle Normali

n using Virtual Segments


We r commend the use o

virtual segments, which can be defined so that they explicitly cause the static trial to be a reference posture. For example, see the following topics for normalizing the ankle joint angle.

[[Tutorial: Foot and A

k Angles





Note: In Visual3D jo]]

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.


rlizing the Pelvis Angle



==egment Ang


===Segment Exames

lizing the Pelvis Angle

Normalizing the P]]vis

Segment Angle. The Coda and Helen Hayes pelvis are tilted forward approximately 20 degrees from the horizontal. In describing the orientation of the pelvis or for describing the hip joint angle, it is often convenient to define a pelvis angle that has a coronal plane parallel to the floor (eg a vertical segment with zero tilt).

Shoulder Angle

=== is no single def

ition of the shoulder joint angle that is anatomically meaningful for the full range of motion of the shoulder joint.

The consequence is tha

there is no standard sequence of rotations for describing the shoulder motion, despite the recommendation by the International Shoulder Group.

A good description of

e challenges of the shoulder angle by Jim Richards can be found [[ /faculty/richards/BluePresentation_files/frame.htm here

===Computing the R


===Creating a Vtua

atory: Example 1



Retrieved from ""