SIMULATION FRAISEUSE 5AXES (2) AVEC CONTROLE DE COLLISION

eka808 Messages postés 72 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 29 avril 2005 - 4 juil. 2003 à 23:03
mouad001 Messages postés 21 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 5 août 2014 - 30 avril 2007 à 15:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/7782-simulation-fraiseuse-5axes-2-avec-controle-de-collision

mouad001 Messages postés 21 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 5 août 2014
30 avril 2007 à 15:03
ton code source estsuper bien je te felicite vraiment c'est super
bonne chance mon ami
cs_scoob79 Messages postés 23 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 9 mars 2010
3 nov. 2004 à 23:36
Sympa pour les connaisseurs. pas mal niveau 3D.
brucorp Messages postés 1 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 13 novembre 2003
13 nov. 2003 à 17:54
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
Rrominet Messages postés 133 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 24 novembre 2014 1
11 juil. 2003 à 23:13
Sympathique comme code en effet !!
Tu ne devrais pas diffuser tes sources et monter ta boite !! :-)
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
11 juil. 2003 à 19:00
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 ....
Zwack Messages postés 2 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 11 juillet 2003
11 juil. 2003 à 17:34
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...
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
11 juil. 2003 à 10:53
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 ..
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
11 juil. 2003 à 10:41
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 :))))
Zwack Messages postés 2 Date d'inscription mercredi 25 juin 2003 Statut Membre Dernière intervention 11 juillet 2003
10 juil. 2003 à 12:10
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
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
7 juil. 2003 à 18:18
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
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
7 juil. 2003 à 10:29
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 .....
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
7 juil. 2003 à 10:24
merde désolé mais j'ai validé trop tôt
Donc B)
une boite c'est
cuq Messages postés 345 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 21 mars 2008 2
7 juil. 2003 à 10:23
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
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
6 juil. 2003 à 19:27
un chti lien en francais bien sympa sur les octrees :

http://www.alrj.org/docs/3D/octree.php
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
6 juil. 2003 à 19:13
Oups :p
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
6 juil. 2003 à 19:11
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
cs_Geff Messages postés 192 Date d'inscription vendredi 2 mars 2001 Statut Membre Dernière intervention 10 janvier 2006
6 juil. 2003 à 19:09
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
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
5 juil. 2003 à 16:17
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!)
Ktb Messages postés 80 Date d'inscription mercredi 13 mars 2002 Statut Membre Dernière intervention 8 novembre 2006 1
4 juil. 2003 à 23:10
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 !
eka808 Messages postés 72 Date d'inscription dimanche 24 novembre 2002 Statut Membre Dernière intervention 29 avril 2005
4 juil. 2003 à 23:03
Lol y'a pas d'ego qui tienne.
C du super boulot; rien a redire 10/10
Rejoignez-nous