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/31 21:30]
s18kone [Exécuter Jupyter Notebook]
application_de_la_cinematique_inverse_au_robot_poppy_torso [2019/04/25 14:08]
127.0.0.1 external edit
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 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 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