Aller au contenu


Photo
- - - - -

Matrice changement de repère ou matrice de translation


  • Veuillez vous connecter pour répondre
105 réponses à ce sujet

#61 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 02 mai 2017 - 10:26

Bien, bien, bien.......Bing !! Garder moi ce couvre chef c'est un modèle unique !!!! Grzeeeeeeeeeeeee...Ping !! Ping !!!! Aie !!!

 

Voilà voilà ce qui arrive à jouer trop longtemps avec les matrices...............C'est le cerveau qui craque !!

 

Bon plus sérieusement, j'ai avancé sur la question des calculs matriciels......J'ai réalisé quelques calculs sur Excel pour mieux appréhender le phénomène, ce qui m'a permis de visualiser les résultats, etc...

 

Maintenant il faut passer à la phase programmation.

 

La problématique réside dans le fait d'utiliser souvent les mêmes types d'opérations :

 

  • multiplication de matrice (4*4)*(4*4)
  • multiplication de matrice (4*4)*(4)
  • ......

Je pensais créer des fonctions dédiés, des classes, ...Mais compte tenu que je ne suis pas un as en programmation C++ je me suis posé la question de savoir si il existait déjà des bibliothèques pour faire ce genre d'opération....

 

Je ne suis pas le premier zinzin à devoir faire face à ce genre de calcul et je pense que l'utilisation d'une bibliothèque prévu à cette effet me permettrait de gagner du temps en développement et en fiabilité.

 

Alors après des recherches sur la toile je constate qu'effectivement des bibliothèques existes....Alors pourquoi je pleure !!! Et bien parce que il en existe pas mal et que certaines sont plus ou moins abouties....C'est tout le problème du net de nos jours, nous trouvons tout mais ce n'est pas toujours fiable.

 

Bref, la question est donc la suivante :

 

Y aurait t'il quelqu’un qui pourrait m'aiguiller vers une bibliothèque dédiée aux calculs matriciels ayant fait ses preuves.

 

Merci par avance....

 

++



#62 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 968 messages
  • Gender:Male
  • Location:Anglet

Posté 02 mai 2017 - 10:51

Quelles sont les fonctions que tu as besoin ? 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#63 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 03 mai 2017 - 01:18

il me faudrait une bibliothèque qui me permette de faire des multiplications entre des matrices de (4/4)*(4/4 )et (4/4)*(4).

 

Mais j'ai besoin d'utiliser des matrices de passage, des matrices de passage inverse, des matrices de rotation et des matrices de translation :

 

Fichier joint  les différentes matrices.PNG   68,64 Ko   0 téléchargement(s)

 

 

Il me faudrait surtout avoir la possibilité d'avoir une structure pour chaque type de matrice et passer uniquement les paramètres.

 

si je prends pour exemple la matrice de passage, il me faudrait la structure suivante :

 

Fichier joint  matrice passage.JPG   17,84 Ko   0 téléchargement(s)

 

Dans laquelle il me resterait à passer les paramètres r, d, alpha et téta.

 

Prenons l'exemple des classes. sur l'hypothèse d'avoir une classe pour les matrices de rotation appelée matriceRotationZ et une autre classe pour les matrices de passage appelée matricePassage.

 

Je pourrais peut être dans mon code déclarer mes deux matrices ainsi :

 

La matrice de rotation du repère 0 : 

monrepere0.matricerotationZ (angle)

 

La matrice de passage du repère 1 dans 0

monrepere1.matricePassage (r, d, alpha, téta)

 

Puis faire :

matriceResultat = monrepere0 * monrepere1

 

 

Bien sûr avant de faire tout ceci il aurait été obligatoire de déclarer la structure de chacune des matrices pour placer les sin, cos, sin*cos, -sin*cos ....

 

Donc je recherche une bibliothèque magique qui me permette de passer le paramètre angle dans une matrice de rotation, de passer les paramètres r, d, alpha, téta dans une matrice de passage et de faire la multiplication des deux en retournant la résultat dans une matrice .....

 

En écrivant tout ça je me rends compte que je rêve debout là je crois.....

 

 



#64 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 968 messages
  • Gender:Male
  • Location:Anglet

Posté 03 mai 2017 - 03:47

Think 
Plan 
Act 

 

Le fait de définir ce que tu veux et a besoin c'est 50% du travail fait ;) 

Essaye quelque librairies et la plus complète que tu trouveras tu lui ajouteras les fonctions qui lui manque !


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#65 R1D1

R1D1

    Modérateur et Membre passionné

  • Modérateur
  • PipPipPipPipPip
  • 1 211 messages
  • Gender:Male
  • Location:Autriche

Posté 03 mai 2017 - 06:24

Alors ... j'ai beaucoup entendu parler d'Eigen, Boost a également UBLAS pour faire de l'algèbre linéaire basique.
Je sais qu'Eigen est incluse dans ROS (dans tf je pense, qui fait les transformations de repère dont on parle ici), je n'ai utilisé aucune de ces deux librairies (en tout cas directement), mais je pense qu'elles devraient couvrir tes besoins.
R1D1 - Calculo Sed Ergo Sum -- en ce moment, M.A.R.C.E.L.
Avatar tiré du site bottlebot

#66 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 04 mai 2017 - 01:19

Merci beaucoup.
 
La bibliothèque Eigen semble correspondre à mes besoins.....bon et bien au taf maintenant !!



#67 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 04 mai 2017 - 03:33

Houlala !! je m'enflamme !! D’abord écrire, mettre tout cela à plat sur du papier....Très utile :: réfléchir .....Avant de programmer....



#68 Bobox

Bobox

    Habitué

  • Membres
  • PipPip
  • 157 messages
  • Gender:Male
  • Location:Montigny le Bretonneux

Posté 04 mai 2017 - 12:11

En python, la reference c'est numpy, mais tu n'es pas en python :)

En faisant ma petite recherche "numpy equivalent in c++", je pense effectivement que eigen semble la reponse la plus frequente.

L'un des points en sa faveur, c'est qu'il y a des bindings vers eigen dans openCV, ce qui veut dire que c'est une librairie utilisee et activement supportee.



#69 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 04 mai 2017 - 09:41

+1

 

Eigen 3.3.3 released! (21.02.2017)

 

il faut que je trouve comment l'installer sur Visual studio 2010 express.....



#70 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 17 mai 2017 - 02:50

Hello !!!

 

Et bien après une dizaine de jours à triturer les matrices dans tous les sens pour générer mon modèle mathématique force est de constater qu'une structure mal pensée peut très vitre alourdir terriblement les calculs....

 

Une chose d'apprise encore : avant de cogiter sur une structure, d'imprimer les pièces et ensuite de se poser la question de l'algorithme qui va mouvoir l'ensemble il est bon avant tout de passer par la case modélisation mathématique......En tout cas c'est la leçon que je viens de retenir......

 

Ma structure m'oblige à faire trop de calculs complexes ......J'ai maintenant deux choix .........J'abandonne cette idée de malade de réaliser un bipède...........Et je m'amuse avec des choses plus simples avec des chenilles ou avec des roues.......Ou alors je fais les choses dans l'ordre....Ce qui m'oblige à tous reprendre depuis le début !!!!

 

 

Bon et bien voilà c'était les nouvelles du front !!



#71 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 968 messages
  • Gender:Male
  • Location:Anglet

Posté 17 mai 2017 - 05:00

Si tu explicites plus en détails les problèmes que tu rencontre en plus d'être utiles pour les prochains qui se lancerait on pourrait t'aider à , essayer de contourner les problèmes / trouver d'autres solutions / réfléchir à une meilleure structure ... 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#72 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 17 mai 2017 - 06:15

Je vous exposerai la problématique plus en détail prochainement.....

 

Je réfléchi encore pour trouver une solution et à la rédaction d'un petit texte le plus clair possible....



#73 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 17 mai 2017 - 08:21

Ah zut, pas cool dis donc :(

 

Je vais attendre de te lire pour voir ce qui te triture le cerveau...

 

 

Ps : par contre je suis tombé sur un code en Python sur la cinématique et Denavit Hartenberg, je le regarde de temps en temps, cela peut donner quelques idées je trouve...

 

https://github.com/p...nematics.py#L36

 

Si ça peux t'aider. ;)


Modifié par Oliver17, 17 mai 2017 - 08:32 .

signature_01.png -->

 

Mon Tipeee
 


#74 ojal

ojal

    Membre

  • Membres
  • 11 messages

Posté 17 mai 2017 - 09:27

Bonjour,

 

Je suis aussi entrain d'essayer d'animer différentes cinématiques et mes souvenirs de mathématiques sont lointains... J'ai l'impression qu'actuellement, il faut s'aider de logiciels comme MATLAB... Avez-vous essayé?



#75 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 24 mai 2017 - 08:23

Je n'ai pas d'information à te transmettre sur MATLAB, désolé.



#76 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 31 mai 2017 - 11:28

Hello,
 
je suis encore là et surtout encore une fois je suis obligé de me tourner vers vous pour un problème que je n'arrive pas à résoudre.
 
Alors j'avance doucement sur l'algo (C++) qui calcule le mouvement des jambes d'HumaOne mais avant d'avoir un programme imbuvable je cherche à scinder mon programme en plusieurs fichiers.
 
Donc pour ce faire je souhaiterai, si c'est la bonne solution, placer les déclarations des variables et les fonction liés aux matrices dans un fichier header et son fichier lié .cpp
 
Première étape je crée un fichier :: matrices.h dans lequel je place ce code ::

#ifndef _MATRICES_H
#define _MATRICES_H

///////////////////////////////////////////////////////////////////////////////////
//fonction initialisation de la matrice de passage A
void IniMatriceMpi_A(double r, double d, double alpha, double teta, double angle);

#endif

Deuxième étape :: le fichier matrices.cpp ::

#include "matrices.h"
#include <Eigen>
using namespace Eigen;

///////////////////////////////////////////////////////////////////////////////////
//Déclaration des valeurs PI et PI/2
# define PI (3.14159265358979323846)
# define PI2 (1.57079632679489661923)

///////////////////////////////////////////////////////////////////////////////////
//déclaration des matrices ::
//MATRICE de PASSAGE
Matrix4d Mpi_A(4,4);

///////////////////////////////////////////////////////////////////////////////////
//fonction initialisation de la matrice de passage A
void IniMatriceMpi_A(double r, double d, double alpha, double teta, double angle)
    {
        teta = teta + angle; //Permet d'intégrer l'angle de la rotation
        Mpi_A(0,0) = cos(teta);Mpi_A(0,1) = -cos(alpha)*sin(teta);Mpi_A(0,2) = sin(alpha)*sin(teta);Mpi_A(0,3) = r*cos(teta);
        Mpi_A(1,0) = sin(teta);Mpi_A(1,1) = cos(alpha)*cos(teta);Mpi_A(1,2) = -sin(alpha)*cos(teta);Mpi_A(1,3) = r*sin(teta);
        Mpi_A(2,0) = 0;Mpi_A(2,1) = sin(alpha);Mpi_A(2,2) = cos(alpha);Mpi_A(2,3) = d;
        Mpi_A(3,0) = 0;Mpi_A(3,1) = 0;Mpi_A(3,2) = 0;Mpi_A(3,3) = 1;
    }

Enfin, troisième étapes, je souhaite utiliser dans mon fichier main.cpp la fonction :: IniMatriceMpi_A.

//////////////////////////////////////////////////////////////////////////////////
//LES LIBRAIRIES
#include <iostream>
using namespace std;
#include "ModaCPP.h"
using namespace ModaCPP;
//#include <Eigen/Core>

#include <Eigen>
using namespace Eigen;

#include <math.h>

#include "matrices.h"
 
//Utilisation de la fonction :: niMatriceMpi_A, déclaré dans le fichier :: matrices.h et matrices.cpp
IniMatriceMpi_A(DH[f][0], DH[f][1], DH[f][2], DH[f][3],0);
        
                            std::cout << "Valeur de la Matrice Mp_A  :: " << std::endl;
                            std::cout << Mpi_A << std::endl; //Affichage du contenu de ma matrice 
                            std::cout << "*********************" << std::endl;

Et c'est donc au moment ou je souhaite afficher le contenu de ma matrice de passage que cela plante à la compil.

 

Cette ligne exactement

std::cout << Mpi_A << std::endl; //Affichage du contenu de ma matrice

Voici les messages de sortie à la compil ::

1>..\Sources\Main.cpp(107): error C2065: 'Mpi_A' : identificateur non déclaré
 
1>..\Sources\matrices.cpp(74): error C3861: 'Mpi_A' : identificateur introuvable

Voilà, voilà quoi.....J'ai beau regarder sur le net ???????? Je suis toujours bloqué !!!

 

Merci par avance pour toutes informations utiles.

 

++



#77 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 769 messages
  • Gender:Male

Posté 31 mai 2017 - 01:03

Je ne connais pas C++.

Pourquoi déclares-tu la fonction IniMatriceMpi_A dans matrices.h alors qu'elle est défini dans matrices.cpp
Dans le fichier main.cpp tu fais bien le include de matrices.h (donc de la déclaration), mais là il ne voit pas la définition de la fonction.

Cette manière de faire m'est étrangère, moi je déclarerais et je définirais la fonction dans matrices.h

Mais je me plante peut-être complètement.

#78 Ulysse

Ulysse

    Membre passionné

  • Membres
  • PipPipPip
  • 486 messages
  • Gender:Not Telling

Posté 31 mai 2017 - 01:12

Je suis plutôt d'accord avec le compilateur : où est décaré 'Mpi_A' ?

serait-ce Matrix4d Mp_A(4,4) ?



#79 arobasseb

arobasseb

    Membre chevronné

  • Administrateur
  • PipPipPipPip
  • 737 messages
  • Gender:Male
  • Location:BORDEAUX (33)

Posté 31 mai 2017 - 01:52

Je suis d'accord, je pense que tu as dû faire une faute de frappe sur le nom de la variable.

Et moi j'aurai fait une classe plutôt, qui contiendrai la propriété Matrix4d et la méthode IniMatriceMpi_A.

 

Et je pense que tu devrais surcharger l'opérateur << pour afficher ta matrice.



#80 Telson

Telson

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 975 messages
  • Gender:Male
  • Location:Punaauai - Tahiti

Posté 31 mai 2017 - 07:24

@Ulysse et @arobasseb : J'ai corrigé mon exemple en fait dans mon programme j'ai bien Matrix4d Mpi_A(4,4)
 
@arobasseb
Réaliser une classe, oui je vais regarder ça ....Surcharger l'opérateur << : ok je vais essayer de trouver de l'info sur le sujet.....
 
Merci....

 

Je ne connais pas C++.

......... Cette manière de faire m'est étrangère, moi je déclarerais et je définirais la fonction dans matrices.h

Mais je me plante peut-être complètement.


Effectivement si tu ne connais pas C++ cette manière de faire doit te paraître étrangère mais heureusement sur le net il existe beaucoup de cours, j'utilise celui-ci particulièrement :
https://openclassroo...tatus=published

 

++






1 utilisateur(s) li(sen)t ce sujet

0 members, 1 guests, 0 anonymous users