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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 : 610
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 averti
    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
    Par défaut
    Merciii beaucoup !

  4. #4
    Membre averti
    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
    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 averti
    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
    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 :/

+ 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