See the comments on the video. There's a lot not working here, but it does pick and it does place.
A big hindrance here was that as soon as the pump was enabled the second arduino - configured to run the 4th axis and the lights - lost serial connectivity. This seems to be some kind of EMI. After a lot of trial and error I got past this by moving the pump to its own power supply and adding a 0.1uF cap between + and the motor casing and grounding the casing.
Tuning and tweaking then commenced and a lot of fiddling around with the vision pipelines and I eventually got it reliably placing the SOIC-16 almost right. Rotation was still slightly random - in spite of the logs showing the vision to be happy. Then I noticed that when the pump was running, the nozzle was intermittently rotating slowly clockwise. I'm pretty sure this is the motor EMI again. The step and direction signals for the 4th axis take a several inch leap from one board to the other and probably make a great antenna. So the next step is to wrap the motor in grounded aluminum foil and if that doesn't work it is coming out of the case and being placed far away at the end of a tube.
Other snippets of learning:
- grbl responds immediately with an ok even if it has not yet finished moving. So the imaging was happening before the part was in front of the camera and the lights were flashing on and off way too fast. This is fixed with a "dwell" putting G4P0 on the end of the move G-code and a G4P1 after the "lights on" G-code
- I edited the default lighting scripts to remove the "turn the other one off before we turn this one on" logic as I am using the coolant control pins which are M7/M8 for on but a shared M9 for off.
- grbl homing is oddly broken where it wasn't before - it seems like the x-limit is triggering randomly. more EMI?
- default vision pipelines don't work at all with my cameras and SOIC-16 parts.