IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Dessin dans un graphique


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Tout et rien
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Tout et rien

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Dessin dans un graphique
    Salut, j'ai découvert ce code sur l'aide de matlab pour générer l'espace d'états de mon bras robot (mécanisme plan à deux barres). Il s'agit de cinématique inverse assez simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    l1 = 120; % longueur bras 1
    l2 = l1; % longueur bras 2
     
    thetamax=180;
    thetamax=thetamax*pi/180;
    theta1 = 0:0.05:pi;                                % valeurs de theta1 pour le bras
    theta2 = -thetamax/2:0.05:thetamax/2; % valeurs de l'angle theta2
     
    [THETA1, THETA2] = meshgrid(theta1, theta2); %grille
     
    X = l1 * cos(THETA1) + l2 * cos(THETA1 + THETA2); % calcul des coordonnées en x...
    Y = l1 * sin(THETA1) + l2 * sin(THETA1 + THETA2); % ...et y !
     
    data1 = [X(:) Y(:) THETA1(:)]; % création d'un "dataset" (qu'est-ce au juste ?)
    data2 = [X(:) Y(:) THETA2(:)]; 
     
    %Plot cinématique inverse
     
      plot(X(:), Y(:), 'b.');
      axis equal;
      xlabel('X','fontsize',10)
      ylabel('Y','fontsize',10)
    Ma question : comment dessiné les 2 liens de mon robot comme sur l'image et si possible les faire bouger d'une position theta1 theta2 donnée/fixée à une autre ?
    Voici ce que je veux : (tracer les points rouge et les relier par des barres)
    Nom : xxinvkine_grid.png
Affichages : 561
Taille : 22,0 Ko

    J'aimerai vraiment pouvoir faire une démonstration/animation un peu "professionnelle" pour faire visualiser à des spectateurs les différentes position que mon bras peut occuper.
    Merci beaucoup,

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    l1 = 120; % longueur bras 1
    l2 = l1; % longueur bras 2
     
    thetamax=180;
    thetamax=thetamax*pi/180;
    theta1 = 0:0.05:pi;                                % valeurs de theta1 pour le bras
    theta2 = -thetamax/2:0.05:thetamax/2; % valeurs de l'angle theta2
     
    [THETA1, THETA2] = meshgrid(theta1, theta2); %grille
     
    X = l1 * cos(THETA1) + l2 * cos(THETA1 + THETA2); % calcul des coordonnées en x...
    Y = l1 * sin(THETA1) + l2 * sin(THETA1 + THETA2); % ...et y !
     
    data1 = [X(:) Y(:) THETA1(:)]; % création d'un "dataset" (qu'est-ce au juste ?)
    data2 = [X(:) Y(:) THETA2(:)]; 
     
    %plot Inverse Kinematics
     
    plot(X(:), Y(:), 'b.');
    axis equal;
    xlabel('X','fontsize',10)
    ylabel('Y','fontsize',10)
     
    %
    hold on
    hp = plot(NaN,NaN, '-o', ...
        'LineWidth', 5, ...
        'MarkerSize', 5, ...
        'MarkerFaceColor', 'r',...
        'MarkerEdgeColor', 'none');
    for k = 1:numel(theta1)
    x = [ 0
          l1*cos(theta1(k)) 
          l1*cos(theta1(k))+l2*cos(theta1(k)+theta2(k))];
    y = [ 0 
          l1*sin(theta1(k)) 
          l1*sin(theta1(k))+l2*sin(theta1(k)+theta2(k))];
        set(hp, 'XData', x, 'YData', y)
        drawnow
    end
    Images attachées Images attachées  
    Dernière modification par Invité ; 13/06/2014 à 15h31.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Tout et rien
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Tout et rien

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Merciii beaucoup !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Tout et rien
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Tout et rien

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Au fait, désolé de revenir là dessus mais un simple détail : comment faites vous pour capturer la séquence vidéo ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Avec la fonction getframe, puis j'ai enregistré les images dans un .gif avec imwrite.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Tout et rien
    Inscrit en
    Avril 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Tout et rien

    Informations forums :
    Inscription : Avril 2014
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Re-salut,

    j'arrive à passer la séquence vidéo autant de fois que je veux dans matlab (avec movie(M,10) pex) mais pas moyen de l'enregistrer dans un fichier dans un format mp4/avi ou autre...

    J'ai chipoté des heures en vain avec imwrite, video2avi et VideoWriter etc rien n'y fait Quand ce n'est pas le bon format, windows 7 ne reconnait pas les codecs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    writerObj = VideoWriter('C:\Users\Gregory\Desktop\workspace.mp4','MPEG-4');
    open(writerObj);
     
    hold on
    hp = plot(NaN,NaN, '-O', ...
        'LineWidth', 4, ...
        'MarkerSize', 12, ...
        'MarkerFaceColor', 'black',...
        'MarkerEdgeColor', 'red');
    for k = 1:numel(theta1)
    x = [ 0
          l1*cos(theta1(k)) 
          l1*cos(theta1(k))+l2*cos(theta1(k)+theta2(k))];
    y = [ 0 
          l1*sin(theta1(k)) 
          l1*sin(theta1(k))+l2*sin(theta1(k)+theta2(k))];
        set(hp, 'XData', x, 'YData', y)
        pause(0.05);
        drawnow
        M(k) = getframe;
    end;
    writeVideo(writerObj,M)
    Peux tu m'expliquer comment tu as fais pour enregistrer l'animation ?

    Help :/

  7. #7
    Invité
    Invité(e)
    Par défaut
    J'ai utilisé le principe de ce message qui crée un .gif.
    Mais si tu souhaites faire une vidéo, ta méthode est la bonne (à la dernière ligne close(writerObj); manquante près).

    Si par la suite tu n'arrives pas à lire le fichier généré, c'est qu'il te manque le codec correspondant sur ton ordinateur. Il te suffit alors de le télécharger et l'installer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dessiner un polygne dans un graphique
    Par Dark Ryus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/06/2012, 18h45
  2. Dessiner les axes dans le graphique
    Par beni46 dans le forum Qwt
    Réponses: 1
    Dernier message: 26/01/2010, 13h56
  3. DBGrid, comment dessiner dans les titres des colonnes
    Par dleu dans le forum Bases de données
    Réponses: 9
    Dernier message: 04/11/2004, 17h49
  4. Dessin dans les panels d'un TStatusBar
    Par Amenofis dans le forum Composants VCL
    Réponses: 4
    Dernier message: 31/08/2004, 18h45
  5. Dessiner dans un JPanel
    Par Oliveuh dans le forum Composants
    Réponses: 5
    Dernier message: 19/07/2004, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo