Disclaimer
This page is not connected with or endorsed by

The LEGO Company.

LEGO, LEGOLAND, LEGO SYSTEM, LEGO TECHNIC, DUPLO, LEGO PRIMO and LEGO MINDSTORMS are trademarks of The LEGO Company.  Star Wars and AT-ST are trademarks of George Lucas Company. 

 

 

 

 

Home

NXT Robotics

 

NXT Portrayer Robot

 

 

Daniele Benedettelli,

Septmber 2008

 

 

 

 

When I was at the Cirque des Sciences in Luxembourg (September 2007), I saw Erik's XY plotter in action, and I thought I should make my own portrayer robot. I started building a cartesian plotter like the one seen in Luxembourg, based on the LEGO Technic Control Center plotter 8094. That prototype was really precise, allowing 0.1mm resolution.

 

During a dinner in Luxembourg, Claude Baumann explained to me how to transform a raster image (composed by pixels) into a vector representation. Here is his tutorial about vectorization.

 

 

I showed the first prototype of the portrayer at the Festival of Creativity (Florence) in October 2008. In two days the robot portrayed more than 170 people!

The photos were taken by a webcam on a white background, to help edge extraction. The best illumination is diffuse white, to avoid sharp shadows on the faces.

 

 

 

 

 

 

 

 

 

The robot is an antropomorphic manipulator: it resembles a human arm, with a shoulder joint and an elbow joint, actuated by two motors. The third motor raises the whole arm from the sheet. I tried hard to avoid any kind of backlash, that would cause big errors in the position of the end effector.

To move the pen into a x-y position, one has to compute the joints angles: this is called computing the Inverse Kinematics of a manipulator. I find an excellent closed-form solution to this problem, provided by Ken Perlin.

The image processing is done on the PC by an original software I developed in MATLAB (see video below). I wrote a MEX-DLL to let MATLAB communicate with the NXT, sending messages and even files! The robot is programmed using NXC.

 

 

The steps to get a portrait are three: make a photo (or load an image), extract the edges to obtain a serie of black lines on white background, and then vectorize the drawing for the robot to understand and draw it.

This portrayer robot draws like a real artist, and not like a printer! First, it draws the long lines of the contour, then adds the details, and finally fills the dark areas.

 

 

 

The robot portrays Leonardo da Vinci's Mona Lisa.

 

 

Here you can see an Italian TV special broadcasted on 3rd May 2009, where I show the portrayer robot, the Rubik solver and other robots. Many thanks go to Matteo Molinari for the recording.