* the height of the tape, we don't need to Safe Z first.
* There is also probably no reason to Safe Z after extracting the
* pin since if the tool was going to hit it would have already hit.
*/
Actuator actuator = head.getActuator(actuatorId);
if (actuator == null) {
throw new Exception(String.format("No Actuator found with ID %s on feed Head %s", actuatorId, head.getId()));
}
head.moveToSafeZ(1.0);
if (vision.isEnabled()) {
if (visionOffset == null) {
// This is the first feed with vision, or the offset has
// been invalidated for some reason. We need to get an offset,
// complete the feed operation and then get a new offset
// for the next operation. By front loading this we make sure
// that all future calls can go directly to the feed operation
// and skip checking the vision first.
logger.debug("First feed, running vision pre-flight.");
visionOffset = getVisionOffsets(head, location);
}
logger.debug("visionOffsets " + visionOffset);
}
// Now we have visionOffsets (if we're using them) so we
// need to create a local, offset version of the feedStartLocation,
// feedEndLocation and pickLocation. pickLocation will be saved
// for the pick operation while feed start and end are used
// here and then discarded.
Location feedStartLocation = this.feedStartLocation;
Location feedEndLocation = this.feedEndLocation;
pickLocation = this.location;
if (visionOffset != null) {
feedStartLocation = feedStartLocation.subtract(visionOffset);
feedEndLocation = feedEndLocation.subtract(visionOffset);
pickLocation = pickLocation.subtract(visionOffset);
}
// Move the actuator to the feed start location.
actuator.moveTo(feedStartLocation.derive(null, null, Double.NaN, Double.NaN), 1.0);
// extend the pin
actuator.actuate(true);
// insert the pin
actuator.moveTo(feedStartLocation, 1.0);
// drag the tape
actuator.moveTo(feedEndLocation, feedSpeed);
head.moveToSafeZ(1.0);
// retract the pin
actuator.actuate(false);
if (vision.isEnabled()) {
visionOffset = getVisionOffsets(head, location);
logger.debug("final visionOffsets " + visionOffset);