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
application_de_la_cinematique_inverse_au_robot_poppy_torso [2018/10/31 20:41]
s18kone [Documents]
application_de_la_cinematique_inverse_au_robot_poppy_torso [2018/11/03 11:49]
s18kone [Trajectoire en cloche]
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 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 ====
Line 182: Line 182:
 Au niveau de l'​onglet Notebook apparaît un champ invitant l'​utilisateur à saisir le nombre de pions à jouer par le robot. \\ Au niveau de l'​onglet Notebook apparaît un champ invitant l'​utilisateur à saisir le nombre de pions à jouer par le robot. \\
 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 :\\ 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 du pion. \\ +- 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 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.\\
 La démonstration vidéo est accessible à travers ce lien : https://​drive.google.com/​open?​id=1mVeNc0ZrXjJVIdxTz1_dE-Y4mM9CYqyf 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+  * 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