### PnP - a simple "industrial" robot

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?

--
Brian Davis

Micah E. said…
I'm literally astonished at the utility you've proven the NXT to have... this is... wow!
Anonymous said…
I really like this one. Beautiful work. Good video, too.
Anonymous said…
Well done Brian! Can PnP 'sense' if it has a brick on it? Maybe if you coast the motor for a short time and immediatly brake it you can find out if there is a weight or not?
Brian Davis said…
Guy: perhaps you could, but there are a couple of easier ways. For this implementation, PnP uses the color sensor. When it waves in front of it, if it sees only 'black', it assumes no brick, and advances to the next pallet. The other way takes no (additional) sensors at all. Have a "test stand" that the arm can press the brick up against, like a ceiling. The height it "stalls out" at determines how tall the object on the "finger" is. Very simple, very reliable... and it doesn't take any additional sensor.
AchillesPDX said…
Wow. What an amazing and elegant robot! Any plans to post building instructions and/or the program you're using? Also, how many parts in addition to the retail NXT kit are you using there? I'm slowly building up my technic assortment, but right now only have the Dirt Bike and the NXT kit... although I did just order the Motorized Bulldozer... muhahahaha.
Unknown said…
Brian,

Impressive work (robot, video and programming), in particular the elegance of your solution(s).

It's always nice to see how the combination of "simple" mechanical elements and "simple" routines creates "beings" that bread the illusion of deliberate behavior of their own.

Any associated web page or bulidng instructions?
Robotica said…
Cool,

Brian do you plan to work with Dave parker to get this in a NXT-kit model ?

martyn
Anonymous said…
That is just amazing... The nice thing is that you can build a four-step assembly line with only two NXT's.
Brian Davis said…
OK, clearly I'm going to have to post some building instructions... :) . I'm fairly certain the PnP arm can be done with just a stock NXT kit, except uses some half-width elements. I can probably redesign it without them, but it will be bulkier. I'm not sure how much of the associated "infrastructure" you can simultaneously construct out of just the retail kit as well, I'll have to see.

Yes, I've got to admit, it's kind of fun making a descent video... there's a lot of creativity there as well as in the creation itself.
Damien Kee said…
Absolutely love it!

So simple and elegant.

damo
Brian, To answer your question, YES i am interested in building an assembly line. This would be an awesome project to work with a class or workshop team, The colored brick could be Lego boxes that need to be placed by color on shipping crates on an NXT train or NXT vehicle that follows a black line to a warehouse where they are then placed in storage by another robot. This Industrial Robot of yours is marvelous and is an inspiration to me. Thanks
Brian Davis said…
bazmati: I've got the LDD and .rbt files coming. Stay tuned...
Brian Davis said…
Huh, revisting this, I guess I should add the comment that I've put PnP up on NXTlog, so others can build it if they so desire:

http://mindstorms.lego.com/NXTLog/ProjectDisplay.aspx?id=f5b19d0b-a395-419d-897d-efc0ed36210b
Unknown said…
This comment has been removed by a blog administrator.
Anonymous said…
This comment has been removed by a blog administrator.
Steve Putz said…
I recently found Brian's great PnP video. I did build a version from just retail NXT kit parts. I can share a ldraw file if anyone's interested. steve@RoboticsLearning.com