Watching a typical multi-degree-of-freedom robotic arm can be a joy. Separate from precision welding on car frames, they sometimes seem to have a life of their own, and the way they seem to dance and flow is almost mesmerizing in some cases. PnP ("Pick and Place") was built for a couple of reasons - first, because it was fun, and second, because a number of folks seemed to think it would be hard or impossible.
It started as part of a challenge that involved building LEGO using only LEGO - a hard challenge in the first place, but we were trying to do it with only the parts available in a NXT kit. A lot of folks commented that this would be "very difficult" without some easy mechanism for linear motion, like gear racks... but I wasn't convinced. First, there were other ways to generate linear motion (lead screws, or certain mechanical linkages). And second, I wasn't sold that linear motion was required... so I set out to do it without linear motion, and using only three motors. I didn't finish (close, but no cigar), but what I did come up with was an elegant, and very simple way of manipulating 2x4 elements... or other parts. PnP is a two-degree-of-freedom arm, with a static mechanically leveled "finger" at the end. It can pick up and place 2x4 elements (or larger) and place them somewhere else, as well as activate levers, triggers, or slides. It could push elements together, measure element size (by pushing them against something hard, and seeing how far the arm has traveled), or it's shape (for elements of a certain size, it could be used to actually "feel" the upper profile, or determine where it balances). Since it can position the "finger" to a high accuracy and precision, the motions can be both precise and repeatable - & it's all programmed in NXT-G, with a fairly simple program (one My Block is used to move a specified joint to a specified location, with the speed as one of several variable parameters). Yes, it will maintain it's accuracy over a couple hours... in fact, the LEGO pieces very slowly separating in the framework are a bigger problem.
In this case PnP is set up as a simple color sorter - that's nothing new, there have been lots of those, many perhaps better done than this one. The difference is that PnP is much more general purpose - it could study the sequence of bricks in a pallet, and replicate that pattern from "raw materials" pallets (even unsorted ones), or determine if the pieces it's lifting were 2x4 bricks, or 2x4 plates. Since it uses only one sensor (to determine initial placement), it is free to incorporate several other sensors (like the HiTechnic color sensor here)... and it still has a motor port unused, to perform still other actions (moving the entire PnP arm along a track? Running a "brick press" or conveyor? Use your imagination). It would be very easy to set up more than one PnP arm in a row with their workspaces overlapping, allowing a robotic "assembly line" as items were passed down the row... or have a mobile pallet move along a line of PnP's to have things added on or stacked for transport.
Most LEGO robots have terribly narrow ranges of function - they are designed to do one thing, and only one thing, very well. But that doesn't have to be the case. It will be interesting seeing what EOAT's ("End Of Arm Tools") I can come up with for PnP as well, and just how far I (or you!) can take this.
Anybody want to build an assembly line?