begin process at 2010 02 10 13:55:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > SIMULATION FRAISEUSE 5AXES (2) AVEC CONTROLE DE COLLISION

SIMULATION FRAISEUSE 5AXES (2) AVEC CONTROLE DE COLLISION


 Information sur la source

Note :
9,14 / 10 - par 7 personnes
9,14 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :OpenGL Niveau :Expert Date de création :04/07/2003 Date de mise à jour :01/03/2005 13:58:57 Vu / téléchargé :23 580 / 1 504

Auteur : cuq

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
J'ai rajouté un petit controle de collision pour mon projet fraiseuse.

Si j'ai créé une nouvelle source c'est pour ne pas trop polluer la première . En effet je pense que si le code est trop compliqué il sera plus difficile de l'analyser.

Pour le controle j'analyse l'intersection de triangles . Le problème c'est que cette solution est extrèmement gourmande en calcul si on veut le faire avec toute la machine.

Donc pour le moment j'analyse juste une collision entre l'élément 5 de la machine et la piece chargé toujours via un fichier STL (menu charger ). il y a aussi le controle entre cet élement numéro 5 et 2 triangles qui matérialise le plan de la grille.

J'ai juste un seul niveau de décomposition de mon maillage et il est clair que c'est insuffisant sur cet exemple. mais c'est un premier Jet  : A suivre ...

Si vous avez des idées pour d'autre algo de collision ou pour optimiser celui là je suis preneur ...    

Source

  • 'Comme pour la source Robot
  • Le code Source avec les nouveaux exemples de machines dépasse maintenant les 900k Vous retrouverez donc les dernières versions sur :
  • http://5axes.free.fr/devel_machine.htm
'Comme pour la source Robot

Le code Source avec les nouveaux exemples de machines dépasse maintenant les 900k   Vous retrouverez donc les dernières versions sur :

http://5axes.free.fr/devel_machine.htm



 Conclusion

note : J'ai mis niveau 3 car en compliquant de plus en plus le code devient de plus en plus compliqué ( comme dirait l'autre oh la belle palissade ) . oh pis ca fait plaisir à mon ego de penser que je suis capable de passer la 3ème ...

Merci    

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 mars 2005 13:58:57 :
Idem modif sur source fraisage

 Sources du même auteur

Source avec Zip Source avec une capture PILOTER GOOGLEEARTH AVEC SES API
Source avec Zip Source avec une capture VISUALISATEUR / EDITEUR OPENGL
Source avec Zip Source avec une capture FORCER LE "." POINT COMME PARAMÈTRE DÉCIMAL DANS LES PARAMÈT...
Source avec Zip Source avec une capture JEUX DE COMBAT OPENGL
Source avec Zip Source avec une capture ROTATION 3D

 Sources de la même categorie

Source avec Zip Source avec une capture OPENGL & VB6 par CGSI3
Source avec une capture BASSBOX (AUDIO + OPENGL VISUAL PLUGINS) par Zap
Source avec Zip MODÉLISATION STATISTIQUES par tandan
Source avec Zip Source avec une capture VISUALISATEUR / EDITEUR OPENGL par cuq
Source avec Zip Source avec une capture JEUX DE COMBAT OPENGL par cuq

Commentaires et avis

Commentaire de eka808 le 04/07/2003 23:03:26

Lol y'a pas d'ego qui tienne.
C du super boulot; rien a redire 10/10

Commentaire de Ktb le 04/07/2003 23:10:08

De même, même si je ne suis pas capable d'apprécier ton travail à sa juste valeur ! La simu. de robots ça a l'air d'être ton truc ! Allez 10/10 et continue !

Commentaire de BumpMANN le 05/07/2003 16:17:40

Félicitation! il est bien fait ton prog! Tu ne pourrait pas le mettre en directx? ca serait pas mal! (et tu fait des effets en HLSL!)

Commentaire de Geff le 06/07/2003 19:09:40

Yop cuq, alors, niveau affichage c mieux meme si ca reste basique, pour les normal j'ai vu ke tu as mis

glEnable glcNormalize

ca permet de normaliser le vecteur normal à la face, c'est a dire de lui donner une longueur = 1, le probleme c'est que cela est gourmand en mémoire, tu peux donc le faire toi meme en divisant la valeur pour chaque coordonnées de ton vecteur normal par la longueur de ce vecteur, un bout de code est surement plus explicite ::

Sub Normalize(Vec as Vecteur)
dim Longueur as Single
      Longueur=sqrt( Vec.X^2 + Vec.Y^2 + Vec.Z^2 )
      Vec.X = Vec.X / Longueur
      Vec.Y = Vec.Y / Longueur
      Vec.Z = Vec.Z / Longueur
End Sub

Wala tu met ca au chargement de tes objets et l'execution est accélérée, pas forcément énormément pour ton code mais c'est un bon réflexe à avoir pour la suite, donc tu enleves glcNormalize!

Ensuite pour les collisions tu peux deja faire un test de collision entre AABB (Axis Aligned Bouding Box), en gros c'est une boite virtuel qui est  parallèles aux axes X, Y, Z, si l'un des points de la boite 1 est dans la  boite 2 alors tu peux faire le test d'intersection entre les 2 triangles! Pour définir la boite, c'est assez simple, il suffit de scanner l'objet ke tu veux englober et de stocker en mémoire les coordonnées les plus grandes et les plus petites sur chaques axes, il en résulte 6 coordonnées
Xmin, Ymin, Zmin
Xmax, Ymax, Zmax
Tu peux d'abord afire un test entre différentes parties de ton robot puis un test entre les triangles

Il existe d'autres solutions pour les test de collisions, comme les octrees, qui consiste en une subdivision de l'espace en 8, puis ces 8 parties sont divisées chacune en 8 etc.... tu obtient également des sortes de boîtes.... Si ca te branche voila un lien ::

http://www.gametutorials.com/Tutorials/opengl/OpenGL_Pg5.htm#Octrees

Bon coding ++
GEFF

Commentaire de Geff le 06/07/2003 19:11:33

Yop cuq, alors, niveau affichage c mieux meme si ca reste basique, pour les normal j'ai vu ke tu as mis

glEnable glcNormalize

ca permet de normaliser le vecteur normal à la face, c'est a dire de lui donner une longueur = 1, le probleme c'est que cela est gourmand en mémoire, tu peux donc le faire toi meme en divisant la valeur pour chaque coordonnées de ton vecteur normal par la longueur de ce vecteur, un bout de code est surement plus explicite ::

Sub Normalize(Vec as Vecteur)
dim Longueur as Single
      Longueur=sqrt( Vec.X^2 + Vec.Y^2 + Vec.Z^2 )
      Vec.X = Vec.X / Longueur
      Vec.Y = Vec.Y / Longueur
      Vec.Z = Vec.Z / Longueur
End Sub

Wala tu met ca au chargement de tes objets et l'execution est accélérée, pas forcément énormément pour ton code mais c'est un bon réflexe à avoir pour la suite, donc tu enleves glcNormalize!

Ensuite pour les collisions tu peux deja faire un test de collision entre AABB (Axis Aligned Bouding Box), en gros c'est une boite virtuel qui est  parallèles aux axes X, Y, Z, si l'un des points de la boite 1 est dans la  boite 2 alors tu peux faire le test d'intersection entre les 2 triangles! Pour définir la boite, c'est assez simple, il suffit de scanner l'objet ke tu veux englober et de stocker en mémoire les coordonnées les plus grandes et les plus petites sur chaques axes, il en résulte 6 coordonnées
Xmin, Ymin, Zmin
Xmax, Ymax, Zmax
Tu peux d'abord afire un test entre différentes parties de ton robot puis un test entre les triangles

Il existe d'autres solutions pour les test de collisions, comme les octrees, qui consiste en une subdivision de l'espace en 8, puis ces 8 parties sont divisées chacune en 8 etc.... tu obtient également des sortes de boîtes.... Si ca te branche voila un lien ::

http://www.gametutorials.com/Tutorials/opengl/OpenGL_Pg5.htm#Octrees

Bon coding ++
GEFF

Commentaire de Geff le 06/07/2003 19:13:10

Oups :p

Commentaire de Geff le 06/07/2003 19:27:29

un chti lien en francais bien sympa sur les octrees :

http://www.alrj.org/docs/3D/octree.php

Commentaire de cuq le 07/07/2003 10:23:40

C'est marrant mais ce weekend en réfléchissant j'ai eu une idée exactement similaire . C'est mon exemple qui m'a donner l'idée en effet le fichier STL que je charge et une boite je me suis dit si tu fait l'intersection entre deux boites ce sera plus rapide et si Y pas intersection pas la peine de tester la collision de tous les triangles.

Cependant je désire aller un peu plus loin .

Pourquoi utiliser une boite allignée avec les axes ? n'importe quel boite c'est mieux .
Donc A ) il va falloir touver un algo pour créer une boite mini par rapport a un ensemble de point.

B) Comment tester la collision entre ces deux boites


Commentaire de cuq le 07/07/2003 10:24:56

merde désolé mais j'ai validé trop tôt
Donc B)
une boite c'est

Commentaire de cuq le 07/07/2003 10:29:13

putain c'est pas vrai ....
Une boite c'est 1 boite
ou 6 faces ou 12 rectangles donc la collision entre deux boites c'est la collision de deux boite ou de 6x6 = 36 calculs ou de 12x12 rectangles = 144 calculs .....> la collisons de rectangles j'ai mais pour si je trouve l'intersection de rectangle ou de boite ce sera surement plus rapide ...

Donc y a encore du boulot , A suivre .....

Commentaire de Geff le 07/07/2003 18:18:31

Alors je m'explique un peu avec les boites, en effet tu peux faire des boites qui ne sont pas alignées sur les axes ca s'appel une OBB (Oriented Bouding Boxe), mais l'algorithme pour les déterminées est beaucoup plus compliqué donc je ne pense pas que ce soit approprié pour ton code! Il existe différent cas pour savoir si une AABB1 intersecte une AABB2!

-------------1
|             |
|             |
|             |
|      A------+-------2
|      |      |       |
|      |      |       |
|      |      |       |
------+------        |
       |              |
       |              |
       |              |
       |              |
        --------------

Dans le cas ci dessus, ton algorithme fonctionne car il y'a bien intersection mais dans le cas ci dessous le carré 2 est a l'interieur du carré 1 Donc aucune intersection ne sera détecté, alors que logiquement ce type de configuration ne devrait pas exister!

-------------1
|  --------2  |
| |        |  |
| |        |  |
| |        |  |
| |        |  |
| |        |  |
|  --------   |
-------------

Tout ca pour te dire que je trouve que tu fait 128 calculs de trop! En effet seul 16 calculs au maximum sont necessaires pour savoir s'il y'a collision ou pas! Je m'explique, il suffit de faire un test sur chacun des sommets de la boite1, si le sommet est a l'interieur de la boite2, alors il y'a collision sinon tu continu pour les 7 autres sommets de la boite1, si au bout de ces 8 calculs il n'y a pas d'intersection alors tu recommence cet algo mais pour les sommets de la boite2 vis a vis de la boite1 et wala!
Un bout de code est surement plus explicite:

Private Type CoordV
X as single
Y as single
Z as single
End Type

Private Type BoxV
Xmin as single
Ymin as single
Zmin as single
Xmax as single
Ymax as single
Zmax as single
End type

Function BoxIntersect(Box1 as BoxV,Box2 as Boxv) as boolean

dim P(7) as CoordV

with Box2
P(0).X=.Xmin:P(0).Y=.Ymin:P(0).Z=.Zmin
P(1).X=.Xmin:P(1).Y=.Ymax:P(1).Z=.Zmin
P(2).X=.Xmin:P(2).Y=.Ymin:P(2).Z=.Zmax
P(3).X=.Xmin:P(3).Y=.Ymax:P(3).Z=.Zmax
P(4).X=.Xmax:P(4).Y=.Ymin:P(4).Z=.Zmin
P(5).X=.Xmax:P(5).Y=.Ymax:P(5).Z=.Zmin
P(6).X=.Xmax:P(6).Y=.Ymin:P(6).Z=.Zmax
P(7).X=.Xmax:P(7).Y=.Ymax:P(7).Z=.Zmax
End with


with Box1
for I = 0 to 7
if P(I).X >=.Xmin and P(I).X<= .Xmax and P(I).Y >=.Ymin and P(I).Y<= .Ymax and P(I).Z >=.Zmin and P(I).Z<= .Zmax then BoxIntersect=True : Exit Function
next
end with

BoxIntersect=False

end Function




Et pour tester l'intersection entre 2 objets tu fait ca:




CalcBox Box1, Objet1
CalcBox Box2, Objet2

if BoxIntersect(Box1,Box2)=false then
if BoxIntersect(Box2,Box1)=false then msgbox "Aucune intersection"
end if

wala, normalement ca devrait aller, l'algo pour construire la boite est facile a faire donc je me passe de taper le code ici surtout parceque je fait du live là! d'ailleurs quelques fautes de syntaxe peuvent s'etre gilsser donc verifie le code avant ;)

Bon coding ++
GEFF

Commentaire de Zwack le 10/07/2003 12:10:49

C'est bien , c'est un bon debut !...
il te reste à implementer :
La simulation d'enlevement de copeaux ( en faite gestion du brut )
La simulation d'un tour bi broche / bi tourelle avant arriere type Index G200 ( simulation gerant les chronogrammes des deux tourelles )
et tu pourras concurencer Mastercam , Sescoi-WorkNc et Missler TopCam ... ;-)

En fait nous sommes subjugués par ton code !....super

Commentaire de cuq le 11/07/2003 10:41:31

Mais je concurrence déjà ces logiciels ;)
Sans pour autant ouvrir un débat sur la FAO, les logiciels sus sité n'ont pas de simulation complète de la machine ( Sauf TOPcam je pense qui a passé des accords avec lightworks) ou couplage avec un autre soft comme Vericut par exemple ...

Et merci pour ces commentaires élogieux mais j'aurais préféré : ))
Tu pourras concurencer Tebis ou Catia V5 ( Tebis est le seul qui propose la simulation d'enlevement de copeaux en dynamique et un module complètement intégré de Simulation de machine). Catia a aussi une simulation de la machine est l'enlevement de matiere mais pas en dynamique ..
Non Sinon pourquoi pas concurencer NCSimul ou Véricut.

Bas  ! on peu réver merde  :))))

Commentaire de cuq le 11/07/2003 10:53:22

Note complémentaire de l'auteur :
La simulation de la machine
La simulation d'enlevement de copeaux ( en faite gestion du brut )
La simulation d'un tour bi broche / bi tourelle avant arriere type Index G200 ( simulation gerant les chronogrammes des deux tourelles )

C'est Esprit de Dptechnology ca ?: http://www.dptechnology.com/Products/Home_English/SolidMillTurn_Technical_Specifications.htm

Tchao ..

Commentaire de Zwack le 11/07/2003 17:34:15

t'es sure que TopCam ne sache gerer la cinematique machine ? car il me semble que sur ce soft , n'importe quelle cinematique machine est géré sans produit externe ? Pour Catia c'est le forcing commercial pour imposer leur module d'usinage ( à grand renfort de dev spécif pour Alstom Belfort  je crois )

Et pis on oublie Open Mind en 5 Axes...

Commentaire de cuq le 11/07/2003 19:00:35

Si tu lis bien mon commentaire : >>> Sauf TOPcam je pense qui a passé des accords avec lightworks

OpenMind : pas de module de simulation avec hypermill et pas de module d'enlèvement de matiere  mais propose un lien avec Vericut ...

Bon pis c'est le dernier commentaire sur ce sujet !!! Sinon c'est plus des remarques sur la source mais un forum news.cfao.fr

On peu encore parler de ce sujet  via les messages. Mais attention Juillet Aout = Vacances donc Pas de Mail pas de VB rien que du soleil ....

Commentaire de Rrominet le 11/07/2003 23:13:28

Sympathique comme code en effet !!
Tu ne devrais pas diffuser tes sources et monter ta boite !! :-)

Commentaire de brucorp le 13/11/2003 17:54:23

Salut,
Je reste bête sur cette source: c'est excellant!!!
Super boulot.
J'ai 2 petites questions:
-Comment peut-on modifier les fichiers au format .stl
Pour modifier la machine et la pièce?

-J'ai vu que tu penses a gérer l'enlèvement de matière, c'est toujours d'actualité? J'ai dans l'idée de développer un postpro basé sur SIEMENS avec vu de la pièce finie un peu comme Type3 de vision numeric le fait. Mais je connais rien a l'openGL.
Crois-tu que c'est réalisable?

Encore bravo
Salut

Commentaire de scoob79 le 03/11/2004 23:36:11

Sympa pour les connaisseurs. pas mal niveau 3D.

Commentaire de mouad001 le 30/04/2007 15:03:25

ton code source estsuper bien je te felicite vraiment c'est super
bonne chance mon ami

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales