Introduction: Vase Painting With Robotic Arm

This project was created as a course assignment at the California State University, Long Beach; taught by Behnaz Farahi: DESN 490: Generative AI and Robotics.

In this project, our objective was to use a robot to create art.

Team Members: Mina Seif, Paulo Cuellar

Supplies

Rhinoceros, Grasshopper Plugin, RoboDK, a brush, brush holder, a UR10e Robotic Arm, and a vase

Step 1: Testing the Robotic Arm

We started with an image that we ran through an algorithm in Grasshopper to create a contour map that was flattened into curves. Those curves on Rhino were exported to RoboDK where we used a pen and the UR10e robot to draw on a piece of paper.

This step is optional but highly recommended. There are a lot of things to figure out when using these programs together and then running a huge robotic arm. Test out what you can and work out the bugs before you transition to drawing/painting on more than one plane.

Step 2: Brush Painting

Next, we wanted to experiment with varying line widths so we switched from the pen to the calligraphy brush. You can edit the attached brushholder.stl to make sure it fits your brush/pen/tool. In Rhino, we drew curves with varying heights so that when the robot followed the curves, it would lift up and press down creating different line widths.

Figuring out how much to lift a curve was a trying process and our brush often smashed into the table. We recommend using a brush you don't care too much about.

Because painting with a brush requires ink, we also had to add a "dip" function to our program, so that the robot would dip the brush in ink before drawing a new curve. To do this, we created two targets in RoboDK. One above the ink tray, and one in it. Then in our program, we copy and pasted the dip movement in between each curve.

Don't forget to check your movement speeds so it's not throwing ink or paint around.

P.S. We are aware that our calligraphy does not have the correct traditional strokes, we're sorry.

Step 3: Painting on 3 Dimensions

Now that we were comfortable painting on 2 Dimensions, we moved on to a 3D object: our vase.

In Rhino, we modeled a surface that reflected our vase and drew a curve on that surface. We transported our vase and curve into RoboDK and then worked on how to make the robot draw sideways rather than straight up and down.

Making sure the robot could draw the curve without hitting itself, the vase, or the table took A LOT of troubleshooting.

We found that changing the position and angle of the drawing was the best option. After many hours, we found a simulation in which the robot would draw without any collisions, but when we ran it on the actual robot, it stopped itself saying it was a "protective stop."

Step 4: 3D Paint Tests

So instead of going any further down that path, we decided to make our curve shorter (about 90 degrees rather than 270) and put the vase on a spinning display platform.

After we simulated it on the robot and found no issues, we wrapped our vase in paper and tested out different speeds and quantity of drawing loops (where we would have the robot repeat the program of drawing our curve).

Step 5: Final Painting

When we were satisfied with our paper painting, we ran our program without paper and achieved our final product!

Step 6: Narrative

We used a simple curve path for the robot to follow in our project, but this has the potential to create art that could not be done by human hands. Robotic arms are used in many high precision and time-effective industries, to be able to create something beautiful with them is a step towards collaboration with emerging technology rather than rejection.