Building a 3-D Printed Robot – Part 3

It’s been about a month since the last update and there has been some progress.  I received the 3D printed parts only to find that all of the parts had been printed using PLA instead of ABS plastic.  PLA is quite brittle and does not react to Acetone (the importance of this characteristic will become clear later).  It took over 2 weeks more to have all of the parts reprinted in ABS.  While I was waiting, I worked out the development environment.

The Development Environment

As I mentioned in my previous post, I am using the Robotics Operating System and that is very well supported on Ubuntu.  I am using VirtualBox to run Ubuntu on my Mac.  I found the default CPU and memory configuration to be a bit pokey, so I’ve juiced it up a bit (4 CPUs and 6G of memory).  I experimented with LiClipse and found that it was not responsive enough for my tastes and so I have decided to use Geany for the IDE.


geany on ubuntu
I am using Geany (IDE) and GitG (Git client) running on a Ubuntu VM hosted by Mac OS

Geany enables me to easily customize the build menu and I have found it to be very responsive within the VM.  I have also set up a Git repository on BitBucket and selected GitG for my Git client so that I don’t need to use the command line for commits.  I plan to publish the link to the repository as soon as I have the hand code working.  You can see from the screen shot above that I am working the foundational Servo and ServoController classes.

The use of a local and cloud-based Git repository helps to ensure I don’t lose my code but it doesn’t address how the code gets to the Raspberry Pi.  I experimented with several options including setting up the Raspberry Pi as an NFS server and finally settled on a shell script that uses the rsync command.

rsync -v -r -e ssh --delete --exclude ".*/" /home/mike/catkin_ws/src/inmoov pi@raspberrypi.local:/home/pi/catkin_ws/src

This command essentially does a difference comparison between the master source on Ubuntu and the source on the Raspberry Pi (you probably have to scroll the command to see the whole thing).  The command reconciles the differences and removes extra files from theRaspberry Pi and moving changes from Ubuntu to theRaspberry Pi (while ignoring the hidden directory for Git).  I plan to add the ROS commands to build the rest of code later but this is functional enough for now.

New Hardware

I’ve added a 7″ touch screen and case to the Raspberry Pi so that I will be able to monitor the robot standalone.  I’m currently using it to conveniently monitor what is going on in the Raspberry Pi.  See the parts list below for details.  I ran into a few problems with the display and case.

  1. I broke a part of the case during installation.  The case parts are made of plexiglass and cut with what appears to be a laser cutter. Two of the interlocking parts has no leeway in the dimensions and were too tight.  I broke one part but was able to get by.
  2. The display was upside down. Apparently, the display case was designed before the touch screen design was complete and the apparent lack of testing resulted in an upside down display.  To fix this issue, a software patch enabled a new configuration setting for the touchscreen to display upside down, negating the case design problem.
  3. Not enough clearance for USB power cables.  The Raspberry Pi is stacked on top of the touchscreen controller card and attached to the back of the touchscreen.  Power must be applied to the touchscreen controller first and then routed to the Raspberry Pi. There are several options to do this including connecting the two with a USB cable.  Unfortunately, the stress relieve plastic on a standard USB cable collides with the support structure of the case.  I had to cut a portion of the stress relief to make it fit.

I would not recommend this case for the above reasons plus it weighs quite a bit and would not be suitable for a mobile robot.  I’ll have to find an alternative to attach the touchscreen to the back of the robot later.

Here is the Raspberry Pi with the touchscreen attached to a breadboard that houses the servo controller. The servos are installed in the right forearm.  The forearm parts have gone through quite a bit of finishing work.

Finishing the 3D Parts

I wanted to spiff up the look of the 3D parts and have done research and experimentation with different techniques.  Here is a side by side of my latest attempt.

On the left is a white PLA plastic 3D print of the wrist parts with no finishing work. On the right is the ABS reprint (I said white damn it, not natural! sigh) after completing several finishing steps.  The difference is more pronounced in person.

I am using the following finishing process:

  1. Sand the part with 60, 120, 220 and then 320 grit sand paper.  A palm sander is very handy to help this get done.  This took many hours to complete.
  2. Fill in major gaps (e.g. between parts that are glued together) with a goopy mixture of acetone and extra ABS plastic soaked over night.  I made mine thicker than that described in to tutorial.  This goop creates a liquid filler that can be painted into crevices and defects.  Sand that down and repeat until all the gaps are filled.
  3. Wash and dry the part to remove the sanding dust
  4. Use the Cold Vapor Acetone Bath technique to smooth the surface of the ABS plastic. This will not work for PLA.  This is far less dangerous than techniques that heat the very flammable acetone.  This technique lines a paint can with acetone soaked paper towels.  The evaporating acetone condenses on the part surface and begins to melt the surface of the part.  After about an hour, I remove the paint can and let the part gas out for 24 hours.  I haven’t tried a longer duration for fear of melting the parts too much.  The results are pretty nice, however I found that the parts shown above still had a slightly rough feel possibly because I let the part gas out in my dusty garage or maybe I didn’t wash them enough.
  5. Apply a single coat of 30 minute epoxy.  I learned this technique here.

What’s Next?

I’ve got servo pulleys on order that will replace the defaults used by the InMoov project. I’ll get the hand assembled and tendons threaded.  I will also develop a ROS action server for the hand and wrist and write a Python GUI to control the hand on the touch screen.

Current Parts List

  1. [$40] Raspberry Pi 3 – Model B – ARMv8 with 1G RAM
  2. [$8] Assembled Pi T-Cobbler Plus – GPIO Breakout – for RasPi A+/B+/Pi 2/Pi 3
  3. [$15] Adafruit 16-Channel 12-bit PWM/Servo Driver – I2C interface – PCA9685
  4. [$2] 4700uF 10v Electrolytic Capacitor (for the Servo Driver board)
  5. [$15] Pimoroni Raspberry Pi 7″ Touchscreen Display Case – Noir
  6. [$80] Pi Foundation PiTFT – 7″ Touchscreen Display for Raspberry Pi
  7. [$5] Addicore Heat sinks for the Raspberry Pi 3
  8. [$330] 3D printing services for ABS plastic for the right hand, wrist and forearm
  9. [$20] sandpaper
  10. [$6] Metal paint can for the Cold Vapor Bath finishing techniqu
  11. [$5] Magnets to keep paper towel along the inside of the paint can
  12. [$10] 32 oz. of acetone
  13. [$20] various screws and super glue
  14. [$14] Pacer Technology Zpoxy, 30 minute set, 8 oz.