le bar du forum

Discutions générales sur le DSPiy et tout ce qui s'y rattache
Avatar de l’utilisateur
manudrz
Messages : 640
Enregistré le : dim. 25 oct. 2015 17:41
Localisation : 35300 Fougères

Re: le bar du forum

Messagepar manudrz » dim. 27 déc. 2015 20:15


Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

trigono

Messagepar thierryvalk » mar. 29 déc. 2015 13:24

Je me permets de soumettre un petit exercice de trigonométrie sans rapport avec l’audio.
Voici un dessin :
trigo.PNG

Il s’agit d’un PCB avec 2 mires rondes M1 et M2 et un composant C1 qui lui n’est pas rond.
On connait XY de M1, M2 et C1 avec son angle d’orientation.
Une caméra va donner M1’ et M2’ en X et Y.
De là il faut déterminer C1’ le plus simplement mais avec une certaine précision par rapport aux axes x et y ainsi que la correction de son orientation.
Tout en sachant que les coordonnées de M1’ et M2’ ne seront pas 100% exactes vu les tolérances du PCB mais surtout de la caméra.

Pour pimenter, en fait le rectangle rouge peut être en miroir selon Y, X ou les 2.
C’est pas très compliqué on soustrait de la largeur ou longueur, mais donc le point O1 est une origine qui n’est pas nécessairement à 0.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 13:53

t'aime bien nous prendre la tete avec des problemes de trigo :mrgreen:

ramenons ça a des problemes connus : rotation dans le plan + translation

La formule de rotation dans le plan d'un point (x,y) d'un angle "a" p/r à un point D(xd,yd) donne le point (x',y')
x'=(x-xd)*Cosinus(a) - (y-yd)*Sinus(a) + xd
y'=(x-xd)*Sinus(a) + (y-yd)*Cosinus(a) + yd

Tu connais l'angle "a" soit par mesure, soit en déduisant des coordonnées de M1' et M2'

Tournons dabord le pcb autour de M2, ce qui déplace C1 en Cr(xcr,ycr)
xCr=(xc1-xm2)*Cosinus(a) - (yc1-ym2)*Sinus(a) + xm2
yCr=(xc1-xm2)*Sinus(a) + (yc1-ym2)*Cosinus(a) + ym2

Puis on translate de M2 en M2'
xc1' = XCr + (xm2'-xm2)
yc1' = YCr + (yM2'-yM2)

du coup je sais pas si tu voulais C1' en fonction de C1 ou l'inverse...

psa: au cas où, dans ce calcul, tangeante(a) = opposé/adjacent = (yM1'-yM2')/(xM1'-xM2')

ps2 : pourquoi donc le point le plus proche de l'origine est nommé 2 et l'autre 1 ???

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 14:08

Merci pour ces réponses, c'est bien c1' que je cherche.
ps2 : pourquoi donc le point le plus proche de l'origine est nommé 2 et l'autre 1 ???

Justement, l'origine du PCB peut être n'importe quel coin. (puis pour le moment je n'utilise qu'une seule mire, M1' , le PCB étant considéré comme // à l'axe X ce qui donne une imprécision au système)
D'où ma question, ca marche à tous le coups ? Vu que tu prend comme axe de rotation M2. Mais M2 peut se trouver à n'importe quel endroit du PCB.
Et question 2, M1' et M2' sont mesurées, il y a les imprécisions. Est il possible de faire une "moyenne" des 2 pour limiter ces imprécisions ?

louisr
Messages : 468
Enregistré le : mar. 14 juil. 2015 15:52
Localisation : Bordeaux/Poitiers

Re: le bar du forum

Messagepar louisr » mar. 29 déc. 2015 14:18

A mon avis, le plus simple pour avoir l'angle de rotation entre les deux pcbs, peu importe l'orientation du premier pcb, c'est de calculer l'angle entre les vecteurs M2M1 et M2'M1' en calculant le produit scalaire, mais ça ne résoudra pas le problème de la précision de la caméra..

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 14:19

thierryvalk a écrit :Merci pour ces réponses, c'est bien c1' que je cherche.
ps2 : pourquoi donc le point le plus proche de l'origine est nommé 2 et l'autre 1 ???

Justement, l'origine du PCB peut être n'importe quel coin. (puis pour le moment je n'utilise qu'une seule mire, M1' , le PCB étant considéré comme // à l'axe X ce qui donne une imprécision au système)
D'où ma question, ca marche à tous le coups ? Vu que tu prend comme axe de rotation M2. Mais M2 peut se trouver à n'importe quel endroit du PCB.
Et question 2, M1' et M2' sont mesurées, il y a les imprécisions. Est il possible de faire une "moyenne" des 2 pour limiter ces imprécisions ?


Pour la numérotation, je parlais juste sur le dessin. En général, on numérote les points a partir de l'origine qui est en bas a gauche.

les formules sont indépendantes de la place respective de [M1, M2] et [M'1, M'2]. Pas de raison que ça marche pas.
En revanche tu parles de l'origine du pcb. Le point O1 n'intervient nulle part. Je suppose juste que tu sais distinguer M1 de M2. Si tu sais pas distinguer et que la caméra risque de prendre l'un pour l'autre c'est plus compliqué.

Pour la précision, je sais pas trop. Tout va etre imprécis du même % d'erreur.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 14:28

Oui, je sais distinguer M1 de M2, le dessin donne des erreurs bien plus grande qu'en réalité, de l'ordre de +- 2mm.
Vais coder et tester.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 14:51

juste une chose : le calcul de l'angle "a" par arctan donne l'angle a 180° près.
si le pcb est complètement retourné, il va manquer un demi-tour.

si ((yM1'-yM2') < 0) alors ajouter 180° a l'angle trouvé par arctan.

A vérifier car pas sur si ça suffit a tous les coups.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 15:40

Ca fonctionne presque, en X semble ok mais pas en Y.
Mais, je vais revoir cela au calme car il y a un peu de travail de conversion.
En fait ma camera me donne M1'-M1, mais surtout que toute les données sont référencée à O1 et non 0,0.

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 15:56

thierryvalk a écrit : toute les données sont référencée à O1 et non 0,0.

si tous les (x,y) sont p/r a 01, les formules rotation + translation restent bonnes et rien a changer.
(faut aussi revérifier mes calculs car les x,y,M,1,2 et ' s'emmelent un peu :mrgreen: )

le dessin donne des erreurs bien plus grande qu'en réalité, de l'ordre de +- 2mm

la correction d'angle sera de quelques degrés seulement si je comprend bien, ce qui évite de se poser la question sur le résultat de arctan

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 15:59

(faut aussi revérifier mes calculs car les x,y,M,1,2 et ' s'emmelent un peu :mrgreen: )

Oui, surtout que dans le soft les noms sont différents.

J'ai tout fait par rapport à l'origine du PCB et le rajoute à la fin.
Je pense avoir une erreur dans la calcul de l'angle.
Voici les données :

Code : Tout sélectionner

O   499   62.66
M1   102.62   66.5
M2   8.14   9.64
Miroir y 72
C1   71.03   53.42

M1'   -0.34   -0.34
M2'   -0.25   -0.16
A 0.02

Cr   70.87   19.63
Fin   569.63   82.13

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 16:03

ton M1' et M2' ont des coordonnées négatives tous les deux alors que M1 et M2 positifs
ca voudrait dire que la carte est tournée de plus de 180°. Etrange.
quelquechose m'échappe dans les coordonnées

on peut peut etre repartir de zero avec les données et memes noms que toi pour ne pas se tromper. Tu refais un dessin ?

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 16:38

Comme expliqué, M1' et M2' sont les erreurs de positions, pour les calculs j'y ai donc rajouté M1 et M2.
PC fermé, backup de fin d'année.
Le principe est bon, faut juste que je retranscrive le tout sur un papier avant de coder.
J'ai un doute quand aux degrés ou radians par contre.
Mais le principe est bon ça va fonctionner. :merci:

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 16:39

t'es prudent de faire un backup de fin d'année !

bonnes vacances, on reprend ça en 2016 :)

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 19:04

bon on va pas laisser un pb de trigo nous gacher le réveillon :mrgreen:

en réfléchissant mieux, j'ai percuté que je m'ai gouré dans l'épisode précédent pour l'angle.

redessiné pour mieux voir

Image


Pour passer du rectangle rouge au bleu, on décompose en :
- translate de M2' à M2 ce qui donne le rectangle pointillé (M1' translaté en M1", M2' translaté en M2"=M2)
- rotation de l'angle alpha autour de M2 ce qui ramène M1'' en M1 (et le rectangle pointillé sur le bleu).

Connaissant M1", on peut calculer l'angle de rotation alpha:
Gamma = arctan((y1"-y2)/(x1"-x2))
Beta = arctan((y1-y2)/(x1-x2))
Alpha = Gamma - Beta

les formules dans un tableur pour vérifier : ca marche :)
Image

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 19:31

Super, et je pense avoir presque compris.
M1" est bien calculé selon la mesure de M2' ?

Avatar de l’utilisateur
alka
Administrateur du site
Messages : 3098
Enregistré le : mer. 15 juil. 2015 15:18
Localisation : 92
Contact :

Re: le bar du forum

Messagepar alka » mar. 29 déc. 2015 19:42

crotte le sujet a changé de page... pas facile de regarder l'explication et le dessin en meme temps
thierryvalk a écrit :Super, et je pense avoir presque compris.
M1" est bien calculé selon la mesure de M2' ?

oui
pour imager : on translate dabord le rectangle rouge pour que M2' soit sur M2. Ca donne le rectangle rouge pointillés et amène M1' en M1".
Ensuite on fait tourner autour de M2 de l'angle aplha pour arriver sur le bleu.


La translation c'est facile, tu as les coordonnées de M2' et M2
Pour la rotation, la difficulté était de calculer l'angle correctement. M1" aide pour ça.
Il y a surement d'autres moyens de faire.

les formules de translation et rotation sont celles de la page précédente et sont ok. c'était l'angle qui n'était pas le bon.

Avatar de l’utilisateur
thierryvalk
Administrateur du site
Messages : 3771
Enregistré le : jeu. 9 juil. 2015 20:08
Localisation : Belgique

Re: le bar du forum

Messagepar thierryvalk » mar. 29 déc. 2015 21:00

Ok, merci, je vais tester.


Retourner vers « DSPiy général »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 8 invités