Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
poppy-kine:gplvm [2018/04/03 11:39]
m16devan
poppy-kine:gplvm [2018/04/09 19:17]
m16devan
Line 9: Line 9:
 ===== Code ===== ===== Code =====
 Le code s'​appuie fortement sur celui développé par Lawrence, N. D. disponible sur github: https://​github.com/​lawrennd/​sgplvm Le code s'​appuie fortement sur celui développé par Lawrence, N. D. disponible sur github: https://​github.com/​lawrennd/​sgplvm
 +Afin d'​utiliser les dépendances nécessaires,​ exécutez tout d'​abord le script paths.m
 +Ensuite le code principal se trouve dans le script main.m
  
     * 1. Chargement des données     * 1. Chargement des données
Line 26: Line 28:
 </​code>​ </​code>​
  
-Les données de positions du squelettes sont dans Y_train et les angles moteurs sont dans Z_train. Dans la démo, uniquement les données du bras gauche sont utilisées. Comme chaque partie du corps peut être indépendant des autres, il est conseillé de les considérer séparément comme dans la démo.  + 
-De plusl'​alignement temporel ​(temporalAlignmententre les deux séquences peut être nécessaire pour s'​assurer des correspondances entre les données de squelette humain et les données du robot Poppy.+ 
 + 
 +L'​alignement temporel (temporalAlignment) entre les deux séquences peut être nécessaire pour s'​assurer des correspondances entre les données de squelette humain et les données du robot Poppy. 
 +<code matlab>​ 
 +registration=1;​ %make temporal alignment or not 
 +if registration==1 
 +    [Z_train,​Y_train] = temporalAlignment(Z_train_ori,​Y_train);​ 
 +end 
 +</​code>​ 
 +De plus, les données de positions du squelettes sont dans Y_train et les angles moteurs sont dans Z_train. Dans la démo, uniquement les données du bras gauche sont utilisées. Comme chaque partie du corps peut être indépendant des autres, il est conseillé de les considérer séparément comme dans la démo. 
 +<code matlab>​ 
 +%Keep only the left arm 
 +Y_trainLA=Y_train(:​,13:24); 
 +Z_trainLA=Z_train(:,8:11)
 +</​code>​
  
     * 2. Apprentissage     * 2. Apprentissage
-Le but est d'​apprendre un modèle partagé entre les deux espaces et donc un mapping entre les deux espaces. La fonction learningGPLVM2D permet d'​apprendre un tel modèle. Le paramètre nbIters définit le nombre maximal d'​itérations de l'​algorithme d'​optimisation du modèle.+Le but est d'​apprendre un modèle partagé entre les deux espaces et donc un mapping entre les deux espaces. Le paramètre nbIters définit le nombre maximal d'​itérations de l'​algorithme d'​optimisation du modèle. 
 +<code matlab>​ 
 +%% Learning GPLVM 
 +nbIters=2000;​ %Number of iterations for the learning algorithm 
 +model = learningGPLVM2D(Z_trainLA,​Y_trainLA,​ nbIters); 
 +</code
  
     * 3. Évaluation et affichage     * 3. Évaluation et affichage
-Une fois le modèle appris, le but est d'​imiter un mouvement humain. Pour cela on charge une nouvelle séquence humain et l'on génère la séquence d'​angles Poppy correspondante (evaluateSkeletonSequence)La séquence de test étant un mouvement similaire à celui appris, on peut directement afficher les angles estimés (bleu) en comparaison des angles appris (rouge).+Une fois le modèle appris, le but est d'​imiter un mouvement humain. Pour cela on charge une nouvelle séquence humain et l'on génère la séquence d'​angles Poppy correspondante.  
 +<code matlab>​ 
 +%% Evaluate a sequence 
 +fnameTest='​SkeletonSequence1.txt';​ %Filename of skeleton data 
 +[O_test,​Y_test,​dataTest] = loadData(dirTrain,​fnameTest,​0,​0,​1,​21,​nbData);​ %load test skeleton sequence 
 +O_test=O_test';​Y_test=Y_test';​ 
 +[Z_train2,​Y_test] = temporalAlignment(Z_train_ori,​Y_test);​ %Onlyd needed for comparison purpose 
 +%Keep only the left arm 
 +Y_testLA=Y_test(:,​13:​24);​ 
 + 
 +% Evaluation => corresponding poppy angles are in Z_test 
 +[L_testLA,​Z_testLA] = evaluateSkeletonSequence(model,​Y_testLA)
 +</​code>​ 
 +La séquence de test étant un mouvement similaire à celui appris, on peut directement afficher les angles estimés (bleu) en comparaison des angles appris (rouge). 
 +<code matlab>​ 
 +% plotting results 
 +subplot(2,​2,​1),​plot(Z_trainLA(:,​1),'​r'​);​hold on ;​plot(Z_testLA(:,​1),'​b'​);​ 
 +subplot(2,​2,​2),​plot(Z_trainLA(:,​2),'​r'​);​hold on ;​plot(Z_testLA(:,​2),'​b'​);​ 
 +subplot(2,​2,​3),​plot(Z_trainLA(:,​3),'​r'​);​hold on ;​plot(Z_testLA(:,​3),'​b'​);​ 
 +subplot(2,​2,​4),​plot(Z_trainLA(:,​4),'​r'​);​hold on ;​plot(Z_testLA(:,​4),'​b'​);​ 
 +</​code>​
  • poppy-kine/gplvm.txt
  • Last modified: 2020/07/03 17:28
  • by mai