Close
0%
0%

Arcus-3D-P1 - Pick and Place for 3D printers

Open source, mostly 3D printable, lightweight pick and place head for a standard groove mount

Similar projects worth following
Part rotation and bottom looking vision using two 9g digital hobby servos.

Bottom vision is currently implemented by using the top vision and a flying set of mirrors.

At 59 grams including the camera and mirrors, it weighs about the same as an E3D v6 hotend.

Standard groove mount, so you can just replace your hotend.

Overview

A pair of 9g digital hobby servos are utilized for part rotation and swinging a set of mirrors in front of the top vision to allow it to also provide the bottom vision.

360 degrees of part rotation is implemented, has an accuracy of about 1.6 degrees, and a best case rotation speed of 0.13sec/90 degrees.

The mirrors should be able to extend or retract in 0.19sec.

Full rotation and clearance for parts up to 21.5x21.5x12mm is implemented. 

The current design including the camera weighs 59 grams which is lighter than an assembled E3D v6, and the goal is to allow this to fit in its place.

This should allow adapting any existing 3D printer with decent accuracy, Z axis speed, and a stable build platform for small scale pick and place.

Other parallel projects are addressing some of the remaining requirements such as an inexpensive vacuum source, 3D printable tape feeder, and 3-way valve.

Caveats

It should be noted that the cheap, knock-off version servos will not work here for part rotation.  The measured accuracy of the knock-offs was almost 5x worse and they had significant backlash as well. This almost killed the project before it started as that was my original servo for testing.  

However, I was pleasantly surprised when I tried some still relatively inexpensive, but genuine manufacturer servos.  In this case, they were Tower Pro.  They exhibited basically zero backlash (as the potentiometer is tightly coupled to the output shaft), and accuracy within 1 degree for most of the scale.  As I'm using a 2:1 drive, that puts the overall accuracy at about 2 degrees.

There would need to be compensation for linearity if I used these for absolute positioning and temperature/timing issues could cause drift, but the nature of this task is relative if approached correctly.  You pick up a part, rotate, check the positioning, and then rotate it relative to the previous position.  This pattern will inherently correct for drift related errors.  They should perform that task just about as well as the common Nema 8 stepper solution.

Another caveat is that if the requested motion is less than 2 degrees, the servo sometimes doesn't move at all.  So I'm anticipating needing to code a minimum move size which backs off and then rotates to the target to compensate.

Lastly, a flying bottom looking camera doing vision during moves requires special sauce to work in OpenPnP.  It does have a defined path for implementation though.

A couple of these things may require modifications to OpenPnP to work, but I think the result will be worth it.

  • Build it, and they will come.

    Daren Schwenke18 hours ago 0 comments

    The last two days have been spent building and configuring OpenPNP on the Pi.

    It's java, but uses native code for the camera interface, which wasn't setup to be built for armv8, or any arm for that matter.  With some help of the forum, they got me going.

    That part is working now, but my camera is not showing up in their dropdown.  I assume it's still looking for USB cameras and I need to configure that somewhere.

    Working on it.

    EDIT: Nope, my fault.  I had turned down the GPU reserved memory too much, and the v4l2 kernel driver wouldn't load.  I put it back to gpu=128 for now and I have /dev/video0 again.

    After doing this the device shows up in openpnp, and the light comes on when I select it.

    However, the formats menu is goofy with all resolutions and framerates being 0.  I also get an error on startup of 

    queryFrameSize returned non-discrete frame size!

    14 times.  That matches the number of formats available.  I believe there is some miscommunication occuring in the v4l2 implementation which needs to be corrected.

    In other news, the LinuxCNC driver is working, sorta.  Connected, but the homing sequence openpnp comes with is silly and doesn't actually do homing at all.  I'm making it actually home the machine.  

    Working on it.

  • Too many keyboards..

    Daren Schwenke5 days ago 0 comments

    The Pi and BBG are mounted, OS installed, and I've connected them with serial and ethernet.  

    The camera for the latest printed PNP head was tested and works well!  I'm very happy with the full resolution zero latency captures I can get from it.

    I've also transferred my configs from the C1/E1 as most of it will be useful and give me a head start. 

    I find myself on the wrong keyboard now far too often.

    Openpnp wants to download stuff, which I can't let happen yet.  Thursday.

  • Trivial Idea...

    Daren Schwenke6 days ago 0 comments

    Having two boards running two operating systems with one being basically the slave of the the other got me thinking.

    I think it would be rather convenient if the Beaglebone actually booted from the Pi, via TFTP.  One image loaded onto just the Pi could then be used to manage both.

    Beyond the initial boot, I'm envisioning it also mounting things from the Pi via NFS.

    I went looking and setting up the Beaglebone to do this is possible, and does not look too hard.  There is still the matter of both boards coming up at the same time so the Beaglebone will be looking for the boot image before the Pi OS has begun to start.  I don't know if/how long it will wait, if it will retry the operation, or if it can be configured to perhaps sleep during uBoot to wait for the Pi to start it's TFTP server.

    If not, I suppose I could always have the Pi hit the reset button on the Beaglebone as part of its startup.

    I'll just have to try it and see.  Probably not now as I'm trying to avoid any more feature creep until 'Make it work first' is a reality.

  • Make it work first..

    Daren Schwenke6 days ago 0 comments

    There are a number of ways forward with regards to what is going to live under the Raspberry Pi, but all of them have a current, active roadblock except for one.

    I'm going to use both a Beaglebone Green and the Raspberry Pi for now. Comparing the eventual additional hardware costs given the low IO count, lack of an ADC, and only one (or two) hardware PWM pins available on the Pi, I think I might actually leave it that way.  There are two things which could still happen to change my mind, but I'll elaborate on those later.

    Basically I want the smoother acceleration and ease-of-use that Machinekit gives me, but I also wanted to be able to run everything on the Pi. Software-based step generation does work, but not at the high data rate that I'm going to need to take advantage of how insanely low the mass of what my steppers need to throw around is.

    If I can run the step generation at a higher step rate, I can then use the micro stepping of the drivers at a higher level.  Since the static load (the force trying to pull them one direction, in this case, gravity) on my steppers is so low, more microstepping may actually be somewhat accurate.  Accurate microstepping means I could run a slightly larger spool diameter and go faster. I'm not going to do that though as having the extra accuracy will allow me to push the edge of the build envelope out a little bit instead.  

    With the tripod kinematics, achievable accuracy is directly related to your current position.  As you approach any cable, you start to trade accuracy in one dimension for accuracy in another.  The best balance of vertical/horizontal accuracy happens to be right were the boards for assembly are ending up, but where the feeders will be does trade some vertical accuracy for horizontal accuracy.  Having the extra steps, and if microstepping has a low enough load, the extra accuracy, will be useful and give me more breathing room there.

    Moving the trajectory planning and step generation to the Beaglebone lets me use the PRU and therefore generate very accurate step trains at AM radio frequencies.. aka.. whatever rate I want.  That's, way, way faster than the driver chips could possibly go.

    So the end result is I'm going to have two computers in there but that's fine, as the cost is about the same as adding all the little bits i would need to add without having it. The Beaglebone can deliver them all and then some.

    Decision made, I wired up the Pi and Beaglebone, steppers,  basically everything I'm ready to mount yesterday.  I'll post some pictures later.

  • TPU vibration isolators.

    Daren Schwenke08/12/2018 at 02:49 0 comments

    Spent some time refining the model for the 3D printed vibration isolators today.  It's a lot easier to print now.

    I cut one of the failures in half so you can see what it looks like on the inside.

    They fit in the oversize mounting holes on my stepper mount.

    Sliced in Cura set to 1 wall, 2 top/bottom layers, no infill, and over extruded by 20%

    I fit all the parts for the base today, then disassembled it again.  The second coat of lacquer is drying now.

    Assembly tomorrow. 

    EDIT: A day later, and the paint is still too soft to work with it.

  • Silicone, sucks.

    Daren Schwenke08/11/2018 at 09:43 0 comments

    Given the choice of placing your can of silicone lubricant you use to clean and lubricate the balls and pushrods on your printer next to it, in the same general area as your hairspray, don't.... ever.... do.... that.

    I grabbed the silicone instead of my hairspray and started to spray my bed... for a split second, once.... for one part... and have been paying for it ever since.

    I've now lost 4 prints due to adhesion issues, which basically never... ever.... happens for me.

    The silicone has seemed to sink into my granite bed rather readily, and so my stupid mistake has been very difficult to eradicate.

    Bah.

    Another round of razor scraping and acetone, and... 

    Printing...  again.

  • Wood-working, Take 2.

    Daren Schwenke08/11/2018 at 01:43 0 comments

    Since I finally have my rod positioning settled again, I could move on to building the base.

    Routed out a circle on one end of my 2'x2' piece of oak laminated particle board.  I'm going to wrap the outer edge in a strip of polycarbonate I have leftover here from building the M2 and paint the inside black, assuming I can remember what paint chemistry does not break down polycarbonate.. Feel free to comment!

    It's going to be pretty, and simple to do to boot.

    The new lower mounts eliminate the crossmember, so I modeled a few 3D printed templates to avoid having to measure stuff.

    Figured out where I should put my drive rods.  Basically I moved them out as far as I could staying parallel to my top pulleys, and still keeping the mechanics hidden. Yes, I'll cut the edge off.

    Routed out the slots for the 'cables', roughly accounting for the angle at which they will intersect the upper pulleys.

    Added the blocks which will support the plywood base, and allow me to fasten down the polycarbonate strip. Yay, I got to use my oak blocks after all...

    Waiting for the glue to dry overnight, then I can assemble it.

  • Fail.

    Daren Schwenke08/10/2018 at 18:21 0 comments

    I assembled it.

    It doesn't even come close to the stability I had with the original equal length octahedral frame.

    I'm calling this a fail, going back to the original design, and moving on.  I'm still moving the steppers out and under the board though.

  • Fold yourself 3 times.

    Daren Schwenke08/09/2018 at 20:52 0 comments

    I liked the new angle.  I think it will work.

    As I was laying it down after trying the parts, I had a little brainstorm and realized how to make it fold basically flat.

    I've implemented it.  :)  

    I now have to print 12 different parts though.

  • Cat toy.

    Daren Schwenke08/09/2018 at 14:31 0 comments

    I finished my changes to get back a bit more rigidity and was reprinting the parts last night.

    However, one of my prints must have caught the print head early on, let loose, and I ended up with a ball of extruded filament instead of a part.  Thankfully the springy TPU filament I use on the connecting rods did it's job and lifted the head away from the other parts when this happened, so just the one got ruined.

    Reprinting.

    EDIT: Reprint of the most time consuming print almost done.

    Six more smaller parts to print yet till I can try my new angle compromise.

View all 63 project logs

Enjoy this project?

Share

Discussions

jediminer543 wrote 03/10/2018 at 10:28 point

This is pretty awesome.

Do you have any idea when you will be releasing the files? My local hackspace has been wanting a pick and place facility for a while now, and has a couple of unused 3D printer frames lying around.

Thanks.

  Are you sure? yes | no

Daren Schwenke wrote 04/26/2018 at 23:20 point

Files are up.  Not cleaned up, but they are up.

  Are you sure? yes | no

Marc Peltier wrote 02/19/2018 at 11:10 point

Hi Daren!
I had guessed the organization of gear train, and the need for a 90° gearbox, between the servo output and the actuator gear.

I recently experimented with gears in POM, very cheap on aliexpress. com. There are all kinds of models, straight, in crown, or at 45°, with different numbers of teeth. The bore is generally 1.95mm, when they are designed to be pressed together on a 2mm shaft, or 2.1mm, when they are designed to rotate freely on the shaft.

I was able to resize the bore with my lathe, according to my needs. For the small series we use, it is better to base the design on existing gears, to be modified at the lathe. Moulds are very expensive!

You can probably also make the splines for coupling with the servo output by heat, deforming an existing POM part with a brass servo output coupler, used as a heated punch. A hijacked hot-end will be perfect for that...

  Are you sure? yes | no

Daren Schwenke wrote 02/19/2018 at 15:11 point

That is pretty much exactly the path I took and the parts I used.  The fitment depth is critical though to prevent backlash and binding which took some iteration.

  Are you sure? yes | no

Marc Peltier wrote 02/20/2018 at 09:38 point

Just an idea this morning:
Dismantle the servo. Mount the potentiometer directly on the Pick&Place rotary tube, and try to directly link the last pinion of the servo gear train to this tube, with no 90° deflection, making it a part of the servo system. By the way, you will probably be able to improve the transmission ratio, and in the whole the precision in rotation. The very short stroke of the Z-Probe should make it possible to find a pinion thick enough to take up this movement without loss of link.

Of course, this will completely call into question the beautiful symmetrical architecture that you currently have, but I'm sure you will be able to quickly find a new layout logic, just as satisfying !

  Are you sure? yes | no

Daren Schwenke wrote 02/20/2018 at 10:06 point

Yep.  If I can't get the accuracy I need with just the digital servo, reading the output shaft angle directly is one way to move forward.  The servo potentiometer is still only 180 degrees though and a rotary encoder of sufficient resolution to actually improve the situation would greatly increase the cost.  

Rolling your own encoder you would need at least 400 cuts in a disk to improve here.  3D printing that at even 1 nozzle width per cut is still too large to fit nicely in the current design.

I toyed with the idea of drilling some holes in the third to last gear inside the servo and adding an optical gate there (with the servo re-wired for continous rotation).  The PID loop would move to Machinekit which is well suited to do a good job at it out of the box. That would work and I even have a suitable gate in my parts bin.  I would rather not though.

There are even existing multi-turn servos which are not continuous rotation designed for RC sailboats too, but again... many times the cost.

In the end, I'll probably just live with whatever accuracy I can get here.

  Are you sure? yes | no

Marc Peltier wrote 02/20/2018 at 13:11 point

Many RC servo potentiometers have a 270° stroke. These 9g servos are very economical, and trying to make your P&P head with just two digital servo controls makes sense. It's attractive because it's simple. And you could make a speed daemon with that, installed on a delta robot !

If you give up this approach, then why not just use this type of stepper motor Ø15mm, with directly usable output pinion and integrated planetary reduction: 

2 PCS high torque 5 V dc 2 phase 4 fil Dia 15mm moteur pas à pas avec micro planétaire réducteur avec engrenage conique(China)

https://fr.aliexpress.com/item/2pcs-2-phase-4-wire-Dia-15mm-stepper-motor-with-micro-planetary-reducer-high-torque-micro/32701351677.html?spm=a2g0w.search0104.3.28.9f4d765fv3pf93&ws_ab_test=searchweb0_0,searchweb201602_2_10152_10151_10065_10344_10068_10342_10343_10340_10341_10084_10083_10618_10630_10305_10304_10307_10306_10302_5722316_5711211_10313_10059_10184_10534_100031_10629_10103_10626_10625_10624_10623_10622_10621_10620_10142,searchweb201603_25,ppcSwitch_5&algo_expid=17e14cc8-4653-4261-ab15-56833755b9ca-4&algo_pvid=17e14cc8-4653-4261-ab15-56833755b9ca&transAbTest=ae803_5&priceBeautifyAB=0

You will get more than 2000 steps per revolution, about 2 turns/sec, with a backlash of about 5°, which can be cancelled by a spring. It is probably easier than using a position encoder and MachineKit...

  Are you sure? yes | no

Marc Peltier wrote 02/19/2018 at 06:35 point

Very well done !

I'm very happy to see this, because it's totally in line with what I imagine as equipment for my own Zatsit delta robot, very soon on KickStarter: www.zatsit.fr

Zatsit does not need the standard mount. Do you intend to publish the STL files, or better, the design files, so that it is easier to make the necessary adaptations?

You can get very cheap front surface mirrors here :

https://www.surplusshed.com/search.php?search=front+surface+mirror

Congratulations again!

  Are you sure? yes | no

Daren Schwenke wrote 02/19/2018 at 08:01 point

Thank you.

The source is a mess right now and I'd be embarrassed to release it.  I rushed it and most of my scaling and dimensional dependency best practices for OpenSCAD files went out the window. It's also started as an offshoot and is dependent on the code for the C1 so it would need to be split.  Eventually.

There are a couple bits like the right angle drive gears for rotation which require accuracy/fine detail beyond what any 3D printer can handle though.  I made the gears for the prototype by hand from existing injection moulded nylon gears, but it took a lot of patience and a couple tries to get them right.  If it works well, I'm going to look at getting them injection moulded with the servo splines built in.  Even then I think the only way to make the molds will be EDM.  Tiny stuff.

Thanks for the link.  I should be able to get a perfect set of mirrors here next time.  Still learning.  I got about 3 more tries here before I have to go spring for another $1 mirror.  Long term I'd definitely just source them cut to size, but this is something that people with a lot of patience can DIY to cut costs if I figure out how to do it and document it.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates