Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 56 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
56
Dung lượng
3,11 MB
Nội dung
Université Nationale du Vietnam Hanoï Université de La Rochelle Institut Francophone International Mémoire de fin d’études de Master informatique option Systèmes Intelligents et Multimédia CAPTURES DES MOUVEMENTS AUX PARTIES CACHÉES DO Thanh Binh Encadrement de stage : Alexandre MEYER Année académique 2014 - 2015 TIEU LUAN MOI download : skknchat@gmail.com Remerciements Je voudrais remercier, avant tout, tous ceux qui ont rendu cette expérience possible, et très enrichissante Je tiens remercier dans un premier temps, ma mère et ma famille Je remercie également Monsieur Alexandre Meyer, mon tuteur pédagogique attitré, pour ses conseils concernant la mission de ce stage, conseils qui m’ont permis de prendre du recul par rapport mes tâches et aux différents aspects techniques Je souhaite remercier toute l’équipe pédagogique du IFI et les intervenants professionnels responsables de la formation, pour avoir assuré la partie académique de celleci Je remercie M HO Tuong Vinh et M NGUYEN Hong Quang pour leurs conseils sur les critères de choix d’une formation de 2ème cycle en Intelligence artificielle, qui ont facilité mon orientation l’origine de mon inscription en Master SIM Je tiens remercier tout particulièrement et témoigner toute ma reconnaissance aux membres de l’équipe Capture Motion, pour l’expérience enrichissante qu’elles m’ont permis de vivre durant ces six mois au sein du LIRIS-Nautibus J’adresse mes remerciements Monsieur Erwan Guillou, pour m’avoir intégré rapidement au sein du laboratoire et m’avoir accordé toute sa confiance ; pour le temps qu’il m’a consacré tout au long de cette période, sachant répondre toutes mes interrogations Je témoigne toute ma reconnaissance aux personnes suivantes :M TRAN Dinh Tin,M TRAN Huu Viet,M NGO Minh Duc, ainsi que l’ensemble des membres de l’équipe INSA pour leur accueil sympathique et leur coopération professionnelle tout au long de ces six mois Tous ceux qui ont délivré des conseils techniques sur la planification de mouvements, la cinématique inverse et les algorithmes de Tarjan i TIEU LUAN MOI download : skknchat@gmail.com Résumé Les systèmes de capture de mouvement utilisent classiquement plusieurs dizaines de caméras pour reconstruire les mouvements basés squelette de personne évoluant dans un décor souvent minimaliste Pour rendre ces techniques utilisables dans un contexte plus large comme par exemple avec moins de caméras et/ou avec des décors plus complets, un certains nombres de verrous devront être levés Un des verrous important sera d’être capables de compléter une information manquante car non visible, comme par exemple une partie du corps caché par le décor ou caché par une autre personne Dans le cas de la capture du squelette d’un acteur, lorsqu’une partie est cachée -par exemple les jambes par un élément de décor, ou un bras par un autre acteur- les solutions explorer chercheront "comprendre" le type de mouvement en cours avec les pas de temps précédents afin de compléter l’information manquante Cette analyse du mouvement pourra également servir accélérer les calculs en réduisant l’espace explorer pour la détection de la pose courante Dans ce cadre, différentes pistes ont eu envisagées comme la méthodes d’interpolation, la méthode basée sur le squelette, la méthode basée sur le matrice, etc Dans le cas de la capture du mouvement des personnages, on peut imaginer qu’une simulation physique puisse fournir une information manquante voir guider la capture quand l’information est partielle Donc, nous avons proposé l’utilisation d’un graphe d’animation universelle pour cela fait Graphe d’animation est une technique qui relie les trames similaires dans la base de données de capture de mouvement utilisant des transitions La qualité du graphe d’animation dépend entièrement sur les points de transition choisis Pour créer des transitions entre les trames semblables, la métrique de similitude est utilisée pour comparer les trames en fonction des contraintes basées sur la physique et la qualité visuelle Nous avons combiné le graphe d’animation et les techniques d’interpolation Ces techniques se divisent motions dans un comportement similaire et puis regrouper les segments similaires pour créer l’interpolation et des transitions douces Pour ce stage, nous avons construit un outil pour faire les taches suivant : — Lire les données supportées sous la forme des BVH fichier — Utiliser les quaternions et techniques d’interpolation pour mélanger des mouvement — Construire le graphe d’animation en combinant les différents métriques de la distance — Effectuer les algorithmes de recherche comme A*, Tarjan sur le graphe d’animation — Extraire le graphe d’animation pour synthétiser des motions conforme au but des utilisateur Outils utilisés : C++, OpenGL, techniques d’animations ii TIEU LUAN MOI download : skknchat@gmail.com Abstract Motion capture, or mocap, is an extensive technique for capturing and analyzing human articulations Mocap data have been longtime used in the domain of computer graphics to animate figures in motion pictures and video games There are many cases when markers can be disapeared due to some conditions , for example occluded by props, limbs, bodies or other markers (occulusions or ambiguities) It is also not unusual that positions of some markers can be missing for a long period of time Obtaining human body shape and motion from such motion-capture data is an inherently difficult task Although many methods have been developed to handle this problem, most procedures require manual intervention and can’t be used with diverse motions, high percentage of missing markers, and/or extended occlusions These days, there are about four principal technics being used for treating the problem First of all, is the Interpolation based technics which use the avaiable marker to infer the missing entries Secondly, the skeleton based methode which take on account of kinematic or bone-length to regularize the meaningful human pose (skeletal animation) Thirdly, the matrix based which employ the linear or non linear correlation of motion matrix to estimatie the missing markers The last one is data driven based method employing an established database that consist of similar motions to reconstruct the missing entries We propose a data-driven method, synthesizing motions from Motion Graphs, this approach to estimate missing marker can be useful in this scenario The collection of motion sequences (training set) could be represented as a directed graph Each frame would be a node There would be an edge from every frame to every frame that could follow it in an acceptable splice In this graph, there would be (at least) an edge from the kth frame to the (k + 1)th frame in each sequence This graph is not a particularly helpful representation because it is extremely large, we can easily have tens of thousands of nodes and hundreds of thousands of edges that obscures the structure of the sequences Instead, we collapse all the nodes (frames) by pruning the graph Since edges connect frames, they are labelled with the frames in the incident nodes (motion sequences) that they originate from and they point to We also assume that the edges in G are attached a cost value which tells us the cost of connecting the incident frames If cutting from one sequence to another along an edge introduces a discontinuous motion, then the cost attached to the edge is high For a new sequence with missing markers, we use a pre-trained Motion Graph to identify the most appropriate motion by many related Graph Searching methods Our experimental results demonstrate that our generic Motion Graphs works well with heterogeneous motion data iii TIEU LUAN MOI download : skknchat@gmail.com Table des matières Remerciements i Résumé ii Abstract iii Table des matières v Liste des figures vii Liste des tableaux viii INTRODUCTION 0.1 Contexte du stage 0.2 Objectif du stage 0.2.1 Plan du Stage Chapitre REVUE BIBLIOGRAPHIQUE 1.1 L’ état de l’art 1.1.1 Méthode basée sur l’interpolation 1.1.2 Méthode basée sur le squelette 1.1.3 Méthode basée sur la matrice de corrélation 1.1.4 Méthode basée sur orientées données 1.1.5 Graphe d’animation 1.1.6 Commentaires sur le graphe d’animation 2 5 8 9 10 12 Chapitre SOLUTION 2.1 Graphe non-structuré d’animation 2.1.1 Point de vue générale sur le graphe d’animation 2.1.2 L’idée de base pour construire le graphe d’animation universelle 2.2 Détecter la transition 2.2.1 Une distance métrique pour les motions 2.2.2 Sélection de points de transition 2.2.3 Élagage du Graphe 2.2.4 Évaluation les métriques de distance 2.2.5 Méthode proposé-le Graphe d’animation universelle 2.3 Technique de mélange des mouvements 2.3.1 TimeWarping-technique de l’interpolation 2.3.2 La mise l’échelle de temps(Time Scaling) 13 13 13 17 20 20 22 24 25 25 25 25 29 Chapitre IMPLÉMENTATION ET RÉSULTATS 3.1 La conception du système 31 31 iv TIEU LUAN MOI download : skknchat@gmail.com TABLE DES MATIÈRES 3.2 Implémentation 3.2.1 Chargement et sauvegarde les motions 3.2.2 Détecter des extrémités 3.2.3 La méthode d’optimisation de NewTon 3.2.4 Élaguer le graphe d’animation 3.2.5 Extraire les motions 3.3 Évaluation 3.3.1 Test case 3.3.2 Test case avec la base de CMU v 32 32 38 38 39 39 40 40 44 CONCLUSION 45 Références 46 TIEU LUAN MOI download : skknchat@gmail.com Liste des figures Les activités scientifiques du Liris 1.1 1.2 Schéma général Trois approches principales basées sur : l’interpolation, squelette et matrice Point de vue générale sur le Graphe d’animation 1.3 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 la Point de vue générale sur le Graphe d’animation Étape communes pour construire le graphe non structuré d’animation Synthétiser mouvements humains par aboutement des éléments de données existants Source :Interactive Motion Generation from ExamplesOkan Arikan Prétraitement des données de mouvement Source :Interactive Control of Avatars Animated with Human Motion Data Jehee Lee Graphe d’animation Clips de mouvement transitions entre clips Graphe orienté obtenu Une marche sur le graphe Créer nouveaux mouvements Chaque articulation a l’effet différent [1] Source :Automated Methods for Data-Driven Synthesis of Realistic and Controllable Human Motion Chaque seuil a l’effet différent [1] Source :Automated Methods for DataDriven Synthesis of Realistic and Controllable Human Motion Ajouter la transition sur le local minimum [2] Source :Automated Methods for Data-Driven Synthesis of Realistic and Controllable Human Motion élagage du graphe [2] Source :Automated Methods for Data-Driven Synthesis of Realistic and Controllable Human Motion représentation 3D de personnage [2] Deux os connectés par des articulations, où un articulation est le parent de l’autre Un articulation de bras est tourné, et les enfants de cette articulation en rotation avec lui L’effet de déplacement et la rotation d’un articulation [2] La transformation de l’articulation racine change tous les autres articulations [2] L’exemple de mélanger linéairement deux motions [2] Mélange entre "Marcher et courir" [2] Time Scaling [3] Source : Lecture Note − Motion Blending (Interpolation and Timewarping) Jehee Lee vi TIEU LUAN MOI download : skknchat@gmail.com 11 14 14 16 17 18 18 19 19 20 20 20 22 23 24 26 26 26 27 27 29 29 30 LISTE DES FIGURES 2.23 sequence de base 2.24 re-échantillonnage : M(t) = (1 − α) M (ti ) α( M(ti+1 ), α = t t−−ti t i +1 i 2.25 La résolution la discontinuité de la vitesse [3] Source : Lecture Note Motion Blending (Interpolation and Timewarping) Jehee Lee vii − 30 30 Conception le système Squelette structuré Source : Meredith, M.& Maddock, S (2001) Motion Capture File Formats Explained 3.3 La première partie du BVH fichier 3.4 La deuxième partie du BVH fichier 3.5 Les extrémités d’un personnage [2] 3.6 Le pied patinage [2] 3.7 premier pose de mouvement dans le graphe d’animation 3.8 Deuxième pose de mouvement dans le graphe d’animation 3.9 représentation le pose d’interpolation 3.10 La transition lisse entre deux poses 31 3.1 3.2 TIEU LUAN MOI download : skknchat@gmail.com 30 33 34 35 42 42 43 43 43 43 Liste des tableaux 1.1 1.2 1.3 1.4 L’approche basée sur l’interpolation L’approche basée sur le squelette L’approche basée sur la matrice de corrélation L’approche basée sur orientées données 9 10 3.1 3.2 Performances de la composition de rotation vecteur L’introduction sur les séquences de mocap évaluant dans notre expérimente Poids d’articulation pour la métrique de distance de similarité L’introduction sur les séquences de mocap de CMU 36 3.3 3.4 viii TIEU LUAN MOI download : skknchat@gmail.com 41 41 44 INTRODUCTION L’environnement de travail LIRIS-Nautibus Le LIRIS, regroupant 320 membres, est une unité mixte de recherche (UMR 5205) dont les tutelles sont le CNRS, l’INSA de Lyon, l’Université Claude Bernard Lyon 1, l’Université Lumière Lyon et l’Ecole Centrale de Lyon Le champ scientifique de l’unité est l’Informatique et plus généralement les Sciences et Technologies de l’Information Les activités scientifiques de ses 14 équipes de recherche sont structurées en pôles de compétences, de 15 30 permanents, reconnues au niveau international [4] Le Figure – Les activités scientifiques du Liris LIRIS réalise une activité de recherche de fond sur ces pôles de recherche, tout en développant un savoir-faire au service de la société en liaison étroite avec les disciplines Ingénierie, Sciences Humaines et Sociales, Sciences de l’environnement et Sciences de la Vie L’équipe Simulation, Analyse et Animation pour la Réalité Augmentée appartient au pôle Simulation, Virtualité et Sciences Computationnelles Leur thématiques de recherche concernent la simulation, l’analyse et l’animation de scènes complexes impliquant l’humain virtuel en mouvement, avec une orientation vers les environnements de Réalité Augmentée La description de telles scènes a conduit au développement des deux thèmes de recherche suivants : TIEU LUAN MOI download : skknchat@gmail.com CHAPITRE IMPLÉMENTATION ET RÉSULTATS 33 Figure 3.2 – Squelette structuré Source : Meredith, M.& Maddock, S (2001) Motion Capture File Formats Explained 3.2.1.2 Obtention de fichiers BVH Il existe de nombreuses bases de données de fichiers BVH dont certaines gratuites, comme celles que vous trouverez en allant sur les pages web suivantes : ❤tt♣s✿✴✴s✐t❡s✳❣♦♦❣❧❡✳❝♦♠✴❛✴❝❣s♣❡❡❞✳❝♦♠✴❝❣s♣❡❡❞✴♠♦t✐♦♥✲❝❛♣t✉r❡✴❞❛③✲❢r✐❡♥❞❧②✲r❡❧❡❛s ❤tt♣✿✴✴♠♦❝❛♣❞❛t❛✳❝♦♠✴ ❤tt♣✿✴✴✇✇✇✳t❤❡tr❛✐❧❡rs♣❛r❦✳❝♦♠✴✐♥❞❡①✳♣❤♣❄♦♣t✐♦♥❂❝♦♠❴r❡♠♦s✐t♦r②✫■t❡♠✐❞❂✻ Avant de continuer ce tutoriel, nous vous conseillons d’utiliser la base de données CMU 3.2.1.3 Analyse syntaxique de BVH fichier La première partie du fichier commence avec le mot-clé HIERARCHY La ligne suivante commence par le mot-ROOT, suivi du nom d’articulation de la racine Un fichier BVH permet plus d’une hiérarchie Un autre hiérarchie est également désignée par le mot-clé ROOT Après ROOT sont les segments : JOINT et END site Le format BVH est une définition récursive Chaque segment de la hiérarchie contient des données relatives seulement seulement ce segment Ensuite, il définit de manière récursive ses enfants l’intérieur des accolades ({ }) TIEU LUAN MOI download : skknchat@gmail.com CHAPITRE IMPLÉMENTATION ET RÉSULTATS Figure 3.3 – 34 La première partie du BVH fichier Chaque segment dispose certaines données commenỗant par mots-clộs OFFSET et CHANNEL Poursuivre le mot OFFSET est le vecteur en dimensions (x, y, z) Pour les différents segments, les données apres le mot CHANNEL sont varies ROOT dispose de six CHANNEL, fournissant la translation mondiale (x, y, z) et la rotation mondiale (x, y, z) Chaque articulation présenté par le mot-clé JOINT a seulement trois CHANNEL, définissant la rotation relative locale son parent Et END site n’a pas de CHANNEL L’ordre des CHANNEL de rotation appart différemment, comme il va de z y et enfin x Dans certains dossiers, l’ordre varie pour les différents segments Il peut aller de z x et enfin y Cet ordre doit être maintenu inchangé lors de l’analyse de la hiérarchie, car il doit correspondre aux données de mouvement offertes par la partie Motion La Figure 3.4 présente la deuxième section du fichier BVH.La section de mouvement commence avec le mot-clé MOTION Cette ligne est suivie par une ligne qui utilise le mot clé Frames : et fournit le nombre de trames Sur la ligne suivante est temps de trame (Frame Time) : indiquant le taux des données de mouvement d’échantillonnage Dans l’exemple de l’annexe A, le taux est donné comme 0.0033 (33 images par seconde) Le reste est les données de mouvement réels contenant les valeurs pour le position et la rotation de CHANNEL Chaque ligne est juste un échantillon (une posture), et les valeurs des CHANNEL apparaissent dans l’ordre que dans la section HIEARACHY TIEU LUAN MOI download : skknchat@gmail.com CHAPITRE IMPLÉMENTATION ET RÉSULTATS 35 Pour décrire un mouvement partir du fichier BVH, nous avons surtout besoin d’une structure de données hiérarchique La structure de données hiérarchique devrait permettre garder la trace de la mère de chaque articulation Ainsi, un index est nécessaire pour correspondre les CHANNEL dans la hiérarchie avec les CHANNEL dans les données de mouvement Figure 3.4 – 3.2.1.4 La deuxième partie du BVH fichier Le Quaternion Rappelez que les nombres complexes de longueur — Permettent de modéliser les rotations autour de (0,0) par une simple multiplication — Caractérisés par nombres réels : partie réelle, partie imaginaire On va utiliser les nombres similaires, les quaternions fournissant une méthode pour représenter l’orientation et la rotation d’objets en trois dimensions Par définition, les quaternions sont : q = w + xi + yj + zk Où a, b, c, et d sont des nombres de réels, trois éléments i, j et k satisfaisant les relations quaternioniques : i2 = j2 = k2 = ijk = −1 Le nombre réel w est appelé partie réelle (ou scalaire) de q et est noté Re(q) Le quaternion bi + cj + dk, qualifié d’imaginaire pur, est appelé partie imaginaire (ou vectorielle) de q et est noté Im(q) On peut donc écrire q = Re(q) + Im(q) Le quaternion q = Re(q) − Im(q) est appelé conjugué de q et est noté q Le nombre réel positif q défini par q de q = a2 + b2 + c2 + d2 = q q est appelé norme Le quaternion non nul q admet un inverse (unique) donné par q−1 = q q TIEU LUAN MOI download : skknchat@gmail.com CHAPITRE IMPLÉMENTATION ET RÉSULTATS 36 Les quaternions de norme sont dits unitaires x q peut être représentée sous la forme q = w + v y = cos(α/2) + u sin(α/2) où u z est un vecteur unitaire (w2 + a2 + b2 + c2 = 1) Soit également v un vecteur ordinaire de l’espace en dimensions, considéré comme un quaternion avec une coordonnée réelle nulle Étant donné un quaternion q=w+V de norme q : Soit u un vecteur unitaire (l’axe de rotation) et soit q = cos α2 + u sin α2 On a le résultat suivant : v = qvq−1 = cos α2 + u sin α2 v cos α2 − u sin α2 renvoie le vecteurv tourné d’un angle α autour de l’axe dirigé par u Comparés aux angles d’Euler, Ils sont plus simple composer et évitent le problème du blocage de cardan Comparés aux matrices de rotations, ils sont plus stables numériquement et peuvent se révéler plus efficaces La Tableau 3.1 montre la performance de rotation par les quaternions Tableau 3.1 – Performances de la composition de rotation vecteur Méthode Multiplications Additions et soustractions sin et cos Nombre total d’opérations Matrice de rotation 15 Quaternions 21 18 39 Axe et angle 23 16 41 Matrice Verse Quaternion, Translation Dans la représentation d’une squelette, les matrices ne comportent qu’une Rotation et une Translation (pas de scale ou autre) R A TA Alors, on a la représentation est sous la forme : MTrans = avec la rotation 1 r11 r12 r13 Tx matrice R A = r21 r22 r23 et la transformation matrice TA = Ty On peut rer31 r32 r33 Tz présenter la transformation ceci par un quaternion et un vecteur Pour combiner la transformation, au lieu d’utiliser la multiplication des matrices : MTrans1 × MTrans2 = R A TA × R B TB = MCombinaison = R AB TAB (3.1) On va change la représentation : R AB TAB = R A × R B R A × TB + TA (3.2) avec la représentation sous la forme : Q A , TA et Q B , TB on a la composition de A et B sont : Q AoB = Q A × Q B (3.3) TAoB = Q A × TB + TA (3.4) SLERP SLERP signifie sphérique interpolation linéaire SLERP fournit une méthode pour interpoler en douceur un point propos de deux orientations — La première étape détermine qu’il faut calculer la différence entre les quaternions q1 et q2 , ce qui équivaut calculer la différence angulaire entre les deux quaternions =q1−1 · q2 TIEU LUAN MOI download : skknchat@gmail.com CHAPITRE IMPLÉMENTATION ET RÉSULTATS 37 — L’étape suivante consiste prendre la partie fractionnaire de cette différence Nous pouvons appliquer une formule similaire pour effectuer une interpolation sphérique de vecteurs quaternions La forme générale d’une interpolasin [(1−t)Ω] q1 + tion sphérique pour vecteurs est défini comme :Slerp(q0 , q1 ; t) = sin Ω sin[tΩ] sin Ω q2 — Et nous pouvons obtenir l’angle θ en calculant le produit scalaire entre q1 et q2 cos(θ ) = 3.2.1.5 q1 · q2 q1 · q2 (3.5) Traitement des données Après l’extraction d’informations partir du fichier BVH, une motion peut être représenté Cependant, le fichier BVH fournit seulement la position et la rotation de la racine (dans le repère global), et les rotations locales des articulations par rapport leurs parents Nous avons encore besoin de la position globale de chaque articulation si nous voulons dessiner un personnage Pour calculer la position d’un articulation, d’abord nous créons une matrice de transformation Ml partir de l’information de translation et de rotation locale.Pour toute articulation, l’information par la translation sera simplement les décalages comme nous avons définis dans la section HIERACHY(Figure 3.4).Les données de rotation provient de la mouvement partie Pour la racine, la transformation sera la somme de son décalage et sa translation globale de la mouvement partie Contrairement aux autres fichiers de données de mouvement, BVH ne tient pas compte des échelles Comme BVH utilise l’angle Euler pour représenter la rotation autour d’un axe, nous avons besoin de calculer la rotation par quaternion : Q = Qz Qy Q x (3.6) où Q x , Qy etQz sont les rotations autour de l’axe x, y, et z, respectivement, sous le quaternion présentation L’ordre de l’axe doit être suivi strictement, parce que la multiplication entre les quaternions est non-commutative Utilisons la mathématiques bibliothèque Eigen [25], nous pouvons tout simplement transformer le vecteur de position et de rotation quaternion sous la forme d’une matrice de transformation Une fois la transformation locale est créée, concaténer avec la transformation locale de son père, sa grand-parent, et ainsi de suite Mglobal = Mroot M parent Ml (3.7) La transformation implémentée par les matrices qui se passe de droite gauche Alors, dans Équation 3.7 l’articulation se transforme d’abord par Ml , alors M parent , , et enfin Mracine La section de mouvement dans BVH contient certain nombre de trames Chaque trame est une posture représenté avec des chnes des positions et des rotations Une posture reste inchangé si nous font une translation le long du plan de sol ou faire tourner autour de l’axe vertical Après cette transformation, la position de la racine (repère globale) et la rotation Q (ancienne) seront modifiés conforme sous Équation 3.3 et Équation 3.4 : Q New = Q TemP × QOld (3.8) TNew = Q Temp × TOld + TTemp (3.9) TIEU LUAN MOI download : skknchat@gmail.com CHAPITRE IMPLÉMENTATION ET RÉSULTATS 3.2.2 38 Détecter des extrémités Nous presentons ici notre algorithme pour détecter automatique les End-Point Effecteurs Algorithm Algo pour détecter des extrémités 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: procedure F IND THE E ND E FFECTOR Find all the Joints which have no child Among them, find the joint with the largest Z (head joint) Find the two joints with two minimum Z (two foot joints) Find two joints with the value Z between Max and Min (two hand joints) end procedure procedure F IND THE O RIENTATION OF THE S KELETON Calculate the vector between joint( Root( f ramet )) and joint( Root( f ramet+1 )) : −−−−−−−−−−−−−−→ Root f ramet Root f ramet+1 Calculate the vector between joint(Root) and joint(Head) : −−−−−−−−−−−−−−−→ joint( Root) joint( Head) −−−−−−−−−−−−−−−→ Calculate the cross Product between joint( Root) joint( Head) and −−−−−−−−−−−−−−→ −−−−−−−→ Root f ramet Root f ramet+1 = Orientation Calculate the vector joint(Root) and joint(Hand) −−−−−−−→ Calculate scalar product between Root, Hand and Orientation −−−−−−−→ −−−−−−−→ if Root, Hand · Orientation > then return this is Right Hand end if −−−−−−− → −−−−−−−→ if Root, Hand · Orientation then return this is Right Foot end if −−−−−−→ −−−−−−−→ if Root, Foot · Orientation