"Recycle" doesn't consider component height.

80 views
Skip to first unread message

Clemens Koller

unread,
Jun 10, 2021, 12:50:33 PM6/10/21
to OpenPnP
Hi!

I am on some OpenPnP-git-from-last-week and I start using the "Recycle" function with a ReferenceLoosePartFeeder.

I am picking quite big capacitors 10uF 35V X7R, 3225M, 1.4mm height. The ReferenceLoosePartFeeder is just on a piece of paper on the table @ height=0.

When picking a capacitor, it's component height is considered correctly. The nozzle tip just stops at 1.4mm above the table to get it.
But when I hit Recycle the nozzle tip goes down to height=0 and therefore, the bottom side of the capacitor would ends up at -1.4mm which means that the nozzle's spring is compressed by this amount, just not enough to hit a limit switch... obviously not nice.

Is there some configuration missing or is this a simple bug or is this already fixed?

Greets,

Clemens

ma...@makr.zone

unread,
Jun 10, 2021, 1:23:29 PM6/10/21
to ope...@googlegroups.com

Hi Clemens
Hi @doppelgrau (I hope you are reading this too)

I think this is due to doppelgrau and myself having developed two features in parallel i.e. my refactoring did not cover the new stuff that was not yet merged. This needs a fix.

https://github.com/openpnp/openpnp/pull/1143

https://github.com/openpnp/openpnp/pull/1174

@doppelgrau,

I was introducing the Nozzle.moveToPickLocation(Feeder) and Nozzle.moveToPlacementLocation(Location, Part) methods that should now always be used instead of the generic MovableUtils.moveToLocationAtSafeZ()

Why? This is done to support on-the-fly contact probing when you have a ContactProbeNozzle. So if the feeder and/or PCB Z is unknown or only set roughly, it will automatically probe it the first time it wants to pick or place. Similarly it will also probe the part height where it is unknown (which it can in the loose part feeder).

The two loose part feeder classes are special in that their components height is above the stored Z of the feeder. I believe has to be that way because they can have different parts with different heights in one feeder and the height is only determined once the vision has identified the part.

There is the method

    Feeder.isPartHeightAbovePickLocation()

that tells the difference.

The new Nozzle.moveToPickLocation(Feeder) and Nozzle.moveToPlacementLocation(Location, Part) methods know all about that and will account for the part height where needed and do probing where necessary/possible.

So all that would have to be done is replacing the

MovableUtils.moveToLocationAtSafeZ(nozzle, putLocation);

with a

nozzle.moveToPickLocation(this)

in all the takeBackPart() overrrides.

@doppelgrau, do you fix it, or should I?

_Mark

johanne...@formann.de

unread,
Jun 10, 2021, 2:23:10 PM6/10/21
to OpenPnP
Hi Mark,

I can fix it probably Sunday. But feel free to fix it if you find time before.

greetings
Johannes

ma...@makr.zone

unread,
Jun 11, 2021, 11:02:29 AM6/11/21
to OpenPnP
Done.

@Clemens, please test with the newest version. Thanks!
Reply all
Reply to author
Forward
0 new messages