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