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
Last revision Both sides next revision
application_de_la_cinematique_inverse_au_robot_poppy_torso [2018/10/30 14:56]
s18kone [Trajectoire en cloche]
application_de_la_cinematique_inverse_au_robot_poppy_torso [2019/04/25 14:08]
127.0.0.1 external edit
Line 13: Line 13:
  
 ===== Installation de logiciels ===== ===== Installation de logiciels =====
-Pour la réalisation de notre projet ​l'installation de certains logiciels ​ont été nécessaire.\\+Pour la réalisation de notre projet ​il était nécessaire d'installer ​certains logiciels.\\
 Toute la documentation pour l'​installation de la distribution Anaconda Python, du logiciel poppy et du simulateur V-REP est accessible à travers le lien suivant : https://​docs.poppy-project.org/​fr/​ Toute la documentation pour l'​installation de la distribution Anaconda Python, du logiciel poppy et du simulateur V-REP est accessible à travers le lien suivant : https://​docs.poppy-project.org/​fr/​
 ==== Installer Python ==== ==== Installer Python ====
Line 91: Line 91:
  sizes_pion = [0.03, 0.03,0.08] # en mètre  sizes_pion = [0.03, 0.03,0.08] # en mètre
  mass_pion = 2 # en kg  mass_pion = 2 # en kg
- precision=[10,10]+ precision=[1000,1000]
  objet.add_cylinder(name_pion,​ pos_pion, sizes_pion, mass_pion,​precision)  objet.add_cylinder(name_pion,​ pos_pion, sizes_pion, mass_pion,​precision)
  
Line 102: Line 102:
  
 ===== Application de la cinématique inverse ===== ===== Application de la cinématique inverse =====
-L'​espace de jeu étant créé, nous sommes passé à l'​élaboration du programme devant piloter le bras droit du robot Poppy Torso pendant le déroulement du jeu de morpion. A ce niveau nous avons utilisé la fonction « poppy.r_arm_chain.goto() » de la cinématique inverse. Elle prend trois (03) paramètres : les coordonnées cartésiennes de la position à atteindre, ​la temps pour atteindre la position souhaitée et la mise en attente ou non de l'​exécution de la suite du programme. Cette fonction calcule et affecte la position et l'​orientation qu'il faut aux sept (07) moteurs [r_elbw_y ; r_arm_z ; r_shoulder_x ; r_shoulder_y ; bust_x ; bust_y ; abs_z] du bras droit de Poppy Torso pour atteindre la position souhaitée. Par défaut seuls les quatre (04) moteurs [r_elbw_y ; r_arm_z ; r_shoulder_x ; r_shoulder_y] sont actifs. \\+L'​espace de jeu étant créé, nous sommes passé à l'​élaboration du programme devant piloter le bras droit du robot Poppy Torso pendant le déroulement du jeu de morpion. A ce niveau nous avons utilisé la fonction « poppy.r_arm_chain.goto() » de la cinématique inverse. Elle prend trois (03) paramètres : les coordonnées cartésiennes de la position à atteindre, ​le temps pour atteindre la position souhaitée et la mise en attente ou non de l'​exécution de la suite du programme. Cette fonction calcule et affecte la position et l'​orientation qu'il faut aux sept (07) moteurs [r_elbw_y ; r_arm_z ; r_shoulder_x ; r_shoulder_y ; bust_x ; bust_y ; abs_z] du bras droit de Poppy Torso pour atteindre la position souhaitée. Par défaut seuls les quatre (04) moteurs [r_elbw_y ; r_arm_z ; r_shoulder_x ; r_shoulder_y] sont actifs. \\
 Dans l'​application de la cinématique inverse par l'​utilisation de la fonction ​ « poppy.r_arm_chain.goto() » nous étions confronté à deux (02) principales difficultés : la première ​ était d'​atteindre la position souhaitée c'​est-à-dire la position du pion, la position de l'une des cases ou la position initiale sans toucher un obstacle de l'​environnement du jeu. La seconde était la forme du mouvement effectué par le bras qui devait être proche de celle d'un humain. \\ Dans l'​application de la cinématique inverse par l'​utilisation de la fonction ​ « poppy.r_arm_chain.goto() » nous étions confronté à deux (02) principales difficultés : la première ​ était d'​atteindre la position souhaitée c'​est-à-dire la position du pion, la position de l'une des cases ou la position initiale sans toucher un obstacle de l'​environnement du jeu. La seconde était la forme du mouvement effectué par le bras qui devait être proche de celle d'un humain. \\
 Comme réponse à la première problématique nous avons défini une trajectoire pour les différents positions à atteindre. Afin que le mouvement se rapproche de celui d'un humain nous avons joué sur le pas et le temps d'​exécution. Comme réponse à la première problématique nous avons défini une trajectoire pour les différents positions à atteindre. Afin que le mouvement se rapproche de celui d'un humain nous avons joué sur le pas et le temps d'​exécution.
Line 110: Line 110:
  
 ==== Trajectoire en cloche ==== ==== Trajectoire en cloche ====
-Nous avons d'​abord défini les équations horaires de la trajectoire en supposant que nous avons un mouvement rectiligne uniforme selon l'axe y et un mouvement parabolique dans le plan (O,​x,​z) ​dont les équations horaires sont : +Nous avons d'​abord défini les équations horaires de la trajectoire en supposant que nous avons un mouvement rectiligne uniforme selon l'axe y et un mouvement parabolique dans le plan (O,x,z). La  figure illustrant ​les différentes trajectoires se présente comme suit :  
 +{{ :​schema_trajectoire.png?​nolink |}} 
 +Les équations horaires ​du mouvement ainsi établies ​sont :
  X(t)= V1.cos⁡(a).t + Xi  X(t)= V1.cos⁡(a).t + Xi
  Y(t)= V2.t + Yi   Y(t)= V2.t + Yi 
  Z(t)= -1/2.g.t^2 + V1.sin⁡(a).t + Zi  ​  Z(t)= -1/2.g.t^2 + V1.sin⁡(a).t + Zi  ​
- 
-{{ :​schema_trajectoire.png?​nolink |}} 
- 
 Connaissant les coordonnées cartésiennes de la position initiale N(Xi,Yi,Zi) et de la position finale M(Xf,Yf,Zf) à atteindre par la main droite du robot il était question pour nous de déterminer l'ange « a » que fait la vitesse V1 avec l'axe des abscisses, la vitesse initiale « V1 » de la main droite du robot dans le plan (O,x,z) et la vitesse « V2 » de cette main selon l'axe y tout en s'​assurant de ne pas dépasser une certaine hauteur (h = Zmax).\\ Connaissant les coordonnées cartésiennes de la position initiale N(Xi,Yi,Zi) et de la position finale M(Xf,Yf,Zf) à atteindre par la main droite du robot il était question pour nous de déterminer l'ange « a » que fait la vitesse V1 avec l'axe des abscisses, la vitesse initiale « V1 » de la main droite du robot dans le plan (O,x,z) et la vitesse « V2 » de cette main selon l'axe y tout en s'​assurant de ne pas dépasser une certaine hauteur (h = Zmax).\\
 Notre démarche a été la suivante : \\ Notre démarche a été la suivante : \\
Line 126: Line 124:
  Xf = (V1/​g).cos(a).[V1.sin(a) + sqrt( (V1.sin(a))^2 + 2.g.(Zi-Zf) )] + Xi.   Xf = (V1/​g).cos(a).[V1.sin(a) + sqrt( (V1.sin(a))^2 + 2.g.(Zi-Zf) )] + Xi. 
 - Déterminer la valeur de V1 : \\ - Déterminer la valeur de V1 : \\
-A partir de l'​expression de Xf précédent ​nous avons cherché la valeur de V1 (en faisant varier V1) qui donne une valeur de Xf proche de la valeur de Xf à atteindre. \\+A partir de l'​expression de Xf précédente ​nous avons cherché la valeur de V1 (en faisant varier V1) qui donne une valeur de Xf proche de la valeur de Xf à atteindre. \\
 Pour chaque valeur de V1 retenue nous avons vérifié que la hauteur maximale de la main du robot était acceptable en utilisant l'​expression Pour chaque valeur de V1 retenue nous avons vérifié que la hauteur maximale de la main du robot était acceptable en utilisant l'​expression
  Zmax = (0,​5/​g).(V1.sin(a))^2 + Zi  Zmax = (0,​5/​g).(V1.sin(a))^2 + Zi
Line 133: Line 131:
    * De la position initiale à la position du pion     * De la position initiale à la position du pion 
 A ce niveau nous avons fixé la valeur de l'​angle « a » à 2.pi/3 et comme résultats des calculs nous avons obtenu : A ce niveau nous avons fixé la valeur de l'​angle « a » à 2.pi/3 et comme résultats des calculs nous avons obtenu :
- V1 = 1,07 m/s + V1 = 1,23 m/s 
- Zmax = 14,32 cm+ Zmax = 14,77 cm
  
    * De la position du pion à la position d'une case     * De la position du pion à la position d'une case 
 A ce niveau nous avons fixé la valeur de l'​angle « a » à pi/4 et comme résultats des calculs nous avons obtenu : \\ A ce niveau nous avons fixé la valeur de l'​angle « a » à pi/4 et comme résultats des calculs nous avons obtenu : \\
  Pour Xf = -0.10 m   Pour Xf = -0.10 m 
- V1 = 1,24 m/s + V1 = 1,26 m/s 
- Zmax = 13,85cm+ Zmax = 12 cm
  
  Pour Xf = 0.00 m   Pour Xf = 0.00 m 
- V1 = 1,58 m/s + V1 = 1,60 m/s 
- Zmax = 16,25 cm+ Zmax = 14,42 cm
  
  Pour Xf = 0.10 m   Pour Xf = 0.10 m 
- V1 = 1,87 m/s + V1 = 1,88 m/s 
- Zmax = 18,69 cm+ Zmax = 16,88 cm
  
 ==== Trajectoire rectiligne uniforme ==== ==== Trajectoire rectiligne uniforme ====
Line 177: Line 175:
 Lorsque vous cliquez sur cette icône, une console « Jupyter Notebook » s'​affiche et peu de temps après une page « http://​localhost:​8888/​tree » s’ouvre dans votre navigateur par défaut. \\ Lorsque vous cliquez sur cette icône, une console « Jupyter Notebook » s'​affiche et peu de temps après une page « http://​localhost:​8888/​tree » s’ouvre dans votre navigateur par défaut. \\
 A partir de cette page du navigateur cliquez sur l'​onglet « Files » puis accédez au dossier contenant le programme. Une fois dans ce dossier, créez un nouveau « Notebook » en cliquant sur l'​onglet « New » puis sur « Python 2 » de la page Jupyter Notebook. Un nouvel onglet intitulé « Untitled » s’ouvre dans votre navigateur. \\ A partir de cette page du navigateur cliquez sur l'​onglet « Files » puis accédez au dossier contenant le programme. Une fois dans ce dossier, créez un nouveau « Notebook » en cliquant sur l'​onglet « New » puis sur « Python 2 » de la page Jupyter Notebook. Un nouvel onglet intitulé « Untitled » s’ouvre dans votre navigateur. \\
-Copiez et collez dans le champ de saisie de cet onglet le contenu du programme principal nommé « cinematique_torso.py ». \\+Copiez et collez dans le champ de saisie de cet onglet le contenu du programme principal nommé « kinematic_torso.py ». \\
 Réduisez la largeur de la fenêtre du navigateur de moitié de sorte à observer également l'​interface du simulateur V-REP. Exécutez le programme en cliquant sur la touche « run » de l'​onglet Notebook intitulé « Untitled ». Réduisez la largeur de la fenêtre du navigateur de moitié de sorte à observer également l'​interface du simulateur V-REP. Exécutez le programme en cliquant sur la touche « run » de l'​onglet Notebook intitulé « Untitled ».
 ==== Fonctionnement du programme ==== ==== Fonctionnement du programme ====
 Peu de temps après l'​exécution du programme le robot Poppy Torso apparaît sur l'​interface du simulateur V-REP. Peu de temps après l'​exécution du programme le robot Poppy Torso apparaît sur l'​interface du simulateur V-REP.
 Quelques secondes plus tard le robot adopte sa configuration initiale suivi de la mise en place du pion et des cases de l'​espace de jeu.\\ Quelques secondes plus tard le robot adopte sa configuration initiale suivi de la mise en place du pion et des cases de l'​espace de jeu.\\
-Au niveau de l'​onglet Notebook apparaît un champ invitant l'​utilisateur à saisir la ligne puis la colonne de la case qu'il souhaite que le robot atteigne ​avec sa main droite. ​Selon la case sélectionnée ​le robot Poppy Torso effectue :\\ +Au niveau de l'​onglet Notebook apparaît un champ invitant l'​utilisateur à saisir ​le nombre de pions à jouer par le robot. \\ 
-- une trajectoire en cloche pour se positionner juste au dessus du pion. \\ +Selon le nombre de pions à jouer par le robot l'​utilisateur est invité, pour chaque pion, à indiquer ​la ligne puis la colonne de la case à atteindre par le robot avec sa main droite. ​Pour chaque ​case à atteindre ​le robot Poppy Torso effectue ​avec sa main droite ​:\\ 
-- une trajectoire en cloche pour se positionner juste au dessus de la case sélectionnée. \\+- une trajectoire en cloche pour se positionner juste au-dessus du pion. \\ 
 +- une trajectoire en cloche pour se positionner juste au-dessus de la case indiquée par l'​utilisateur. \\
 - une trajectoire rectiligne pour se retourner à sa position initiale.\\ - une trajectoire rectiligne pour se retourner à sa position initiale.\\
-L'​utilisateur ​est de nouveau invité ​à saisir la ligne puis la colonne d'une case souhaitée ainsi de suite jusqu'​à neuf (09) reprises.+La démonstration vidéo ​est accessible ​à travers ce lien : https://​drive.google.com/​open?​id=1mVeNc0ZrXjJVIdxTz1_dE-Y4mM9CYqyf
 ===== Documents ===== ===== Documents =====
 +  * Video : https://​drive.google.com/​open?​id=1mVeNc0ZrXjJVIdxTz1_dE-Y4mM9CYqyf 
 +  * Rapport : {{:​explication_du_programme.pdf|}}
  
  • application_de_la_cinematique_inverse_au_robot_poppy_torso.txt
  • Last modified: 2019/06/04 12:15
  • by nduminy