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
application_de_la_cinematique_inverse_au_robot_poppy_torso [2018/10/30 12:08]
s18kone [Trajectoire en cloche]
application_de_la_cinematique_inverse_au_robot_poppy_torso [2019/06/04 12:15] (current)
nduminy Tag0 Added: poppy Removed: Application,de,la,cinématique,inverse,au,Poppy,Torso,howto
Line 1: Line 1:
-{{tag>Application de la cinématique inverse au robot Poppy Torso howto}}+{{tag> ​poppy robot }}
  
 ====== Application de la cinématique inverse au robot Poppy Torso dans un jeu de morpion ====== ====== Application de la cinématique inverse au robot Poppy Torso dans un jeu de morpion ======
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  ​
- 
 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 124: 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 131: 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 175: 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.1540901315.txt.gz
  • Last modified: 2019/04/25 14:08
  • (external edit)