2
votes

Here I am trying to detect FIDUCIAL points on PCB in real time using camera, also I am using C#.net 4 win-form Application.

After googling for Two days and reading many post and blog. I found that I have to do something called translational error detection and rotational error detection.

ie. Location of fiducial (object) on Image for actual() vs required(Known location)

In image below

Black Square in bottom right and Top left the Fiducial point which I need to detect and use for error check.

Here (A) is correct Image and (B) is image with error in location of fiducial point.

enter image description here

Now I have to draw line on image, with respect to fiducial point. So on image A I can draw line (RED) as shown in below image (A).

But if I draw Same line on image (B), which has error due to the way it has been placed I will draw the wrong line (RED) if I use the same value of X and Y.

But here for Correct line on (B) I need to ADD ERROR value to my X and Y values so that I can draw correct line (GRREN) as shown in (B).

enter image description here

So here, I am trying to find out how can I archive this;

1) Detect the TWO fiducial point, get their location on Image, compare it with the correct location.

2) Find the ERROR (in Angle / in transaction/ in rotation) ?

3) use the error value by adding it X and Y values.

I also found that Aforge.net or OpenCV can be useful for this but I am not sure How ? There are other possible shapes for Fiducial are Triangle, Diamond and circle.

Any help/Guide is appreciated ...!!! Thanks for your time.

EDIT

I have the Offset values, for both fidicual points, (DX1,DY1) and (DX2,DY2) is values by which original point is moved.

So, now how do I use it ? to correct the error in placement. Now How do I use it

1
Can post an image of a PCB so we see what the fiducial marks are (relative to their surroundings)?Bull
I do not have image from real machine yet, but I will be like PCB moving on Conveyor, when it stop for soldering I need to perform check..H. Mahida
You would be probably better off breaking this question down into separate more specific questions. And without a real image I can't suggest anything (having been burned too many times by reality turning out to be rather different to what I imagined).Bull

1 Answers

2
votes

Adjust the actual FID1 to be 0,0, adjust the expected FID1 to be 0,0 as well. This creates a "hinge/pivot" point. Now, all other fiducial and all other component can be represented as polar coordinate from ths 0,0 hinge.

Now, forget about X,Y coordinate system. You don't care about X,Y. You must translate all X,Y to polar coordinates instead, using many significant digit for accuracy.

Now, you only have to calculated delta angle from expected to actual! Again, don't bother with X,Y calculation By using the hinge/pivot concept, the vector distance of expected and actual is always equal. The length of vector never changes expected to actual - only the angle changes!

Remember the PCB is the same size no matter how you rotate it. Think of old school protractor. Set protractor to 0,0 origin and draw an arc!

I do not have big enough reputation to post an image, so unfortunately I have to link to the image instead. Also, I have too many projects to give you a proper tutorial so this 2-minute psuedo illustration will have to be good enough.

illustration of hinge/pivot concept