Introduction: PROTEI_007

Protei_007 is the seventh prototype for a project called Protei, which is an open source, articulated, segmented, robotic, unmanned, sailboat, originally built to sail upwind, dragging a long oil-absorbent boom, to aid in the cleanup of oil near spill sites.  However, Protei is being developed into a more modular and adaptable design for an affordable, easy-to-build, boat, that can be utilized for various purposes, including nuclear waste monitoring, biological sampling, and plastic trash collection.  The documentation for the construction and design of Protei_006, a 3 meter remote controlled prototype,  can be downloaded, viewed, or purchased here, in the hope that eventually, there can be a fleet of unmanned robotic boats, as others copy and implement the designs for ready-to-deploy boats. 

This tutorial includes all the necessary information for the mechanical construction, electronic architecture, and software packages for Protei_007, including the laser templates and code packages.  This can be constructed in a few hours.  Required tools include a laser cutter. 

MAJOR THANKS TO SEEED STUDIO for supporting the building of the following Protei prototype!



This particular snakelike robot is the skeleton of a segmented articulating robot that can be controlled both with a joystick or any type of input, as well as the capability to move on its own with a wavelike motion propagated down the body.  Each rib (horizontal plexiglass cross section) is composed of 3/8" plexiglass, and is attached to servo motors which act as the joint, rotating back and forth in one axis (side to side).  This makes each segment independently shape-shifting, contrary to earlier versions of Protei.  Each segment is connected by either a rigid metal bracket joint, or by a more flexible PVC tube.  This current version is about 1.5 meters long, composed of 17 segments.   This is rather arbitrary, and does not need to be followed exactly.  Additionally, I use three sizes of servos, with the larger ones in the center, and smaller ones on either end, mimicking the tapering shape of a snake.

See video and documentation of Protei_006 :



Here are some photos and some documentation from Protei_007 at the ITP Winter Show 2011.

Step 1: MATERIALS

PARTS
3' x 3' plexiglass, either 1/8" or 1/4" 
Servo motors (preferably with a metal coupler - I use 17, 8 large ones, 5 medium ones, 4 micro servos) - I like these from sparkfun, but you can get them at many electronics or hobby shops)
3/8" vinyl tubing (for example)
18 guage wire
Arduino

TOOLS / Accessories
laser cutter
screwdriver
pliers
wire cutter
snips
battery
DC power supply
Heat gun
epoxy


Step 2: Laser Cut the Plexiglass Ribs

There are three sizes of servos I used for the joints, each which I embedded in the plexiglass ribs. These ribs, which are aligned perpendicularly along the length of the body, have five holes and a slot for the servo. The holes are for the wiring and structural support from one list to the next.  Here are the template files used for the laser cut. I made these in Illustrator.  If the servos used are slightly different in size, alter the file prior to printing so that the servos fit in snuggly.

I used three sizes of servos. I made 8 large ribs for servos, 5 mid sized ribs for mini servos, and 4 small ribs on the ends (tail and head) for the micro servos.

Download the laser template files.



Step 3: Glue the Servos in the Ribs

Attach a servo arm that is just linear to each servo.

Once the plexiglass ribs are cut, embed the servos in each rib. Sand down the plexiglass if you are having trouble fitting the servo in.  Make sure that the servo arm can spin freely.  If not, readjust the fitting of the servo inside the plexiglass so that it can. Use epoxy to hold them in place.

Step 4: Connect the Ribs

I used two methods for connection of one servo joint to the next.  In the center of the body, I used rigid perforated brackets.  I attached these to the servo arm each side of the servo arm with small machine screws (the ones that came with the servos).  

For the joints towards either end of the snake, I used a more flexible, organic joint, composed of the flexible rubber tubing.  For this, cut about 3 inches of rubber tubing, and slip the tubing onto the servo arm. If you are having trouble sliding it on, use a heatgun by heating the tube, then pushing it onto the servo arm before it cools.  For added structural support, screw the tubing into the servo arm.  

When you do this, make sure that the servo arm, is always on the same side (so that when you attach the plexiglass ribs together, the joints will all be on one side of the snake body).

Step 5: BUILD the Structure Out

This is a repetitive step.  But keep attaching all the ribs together until you have built the entire snake.  

String the servo wires that hang free through the holes in the side of the ribs, from the back backward of the snake to the front.

Step 6: WIRE It Up

Run wires from the each servo through the lateral holes on the ribs all the way to the head of the snake, where the housing for the microcontroller and power supply will be.  Keep good track (using color coding is best)

Step 7: Plug in Wires to a Breadboard or a Perf Board

Follow this schematic.  

Step 8: Add a Power Supply

Because the Arduino hardware only outputs 40mAmp per pin, but the servos can require up to 2 amps at full torque (though generally less), an external power supply might be necessary.  Depending on the number of servos and their specifications, you can decide what specifications for a battery is required.  A 6V NiMH like this works but it is heavy.  Plug this into the power and ground from the battery as seen on the schematic.


Step 9: Upload the Code

The firmware I used to propagate a wave down the ribs (from servo to servo) can be found at my github site here, the code called servosMoveSnake.  I use Arduino as the platform.  In this simple code, I pass a the values down from one object to the next, looping over and over.  servosMoveSnake_xbee is very similar, but allows the use of the remote control to initialize the wave and control the speed. I am currently working on a firmware that makes propagating a wave down a line of servos much easier, while allowing for wave variations (this is all the newer code entitles servo_wave). 

I modelled this type motion: 

Step 10: Let It Run!

just a test: 

Step 11: Optional: Add a Camera

I use this wireless spy camera .  It is very simple to hook this up, using a nine volt battery to power it.  Because series 2 xbees use 2.4 gigahertz wireless, you should avoid a camera with that same frequency of transmission (try 950 MHz).  Just power the camera, plug in the receiver, hook up the receiver to a monitor using RCA cable, or to a computer for camera vision.  TO go from RCA to USB try a grass valley converter.

Step 12: Optional: Add Wireless Control

Using xbees and a hacked joystick, I added remote control capability: 

First, I got the xbees talking to each other. 

Then I got some button presses from one xbee to move some servos from the other. 

Step 13: Update the Firmware of the Xbees

If you are using series 2 xbees, follow the above example to configure the firmware. 

A good way to get started with series 2 xbees is Rob Faludi's Building Wireless Sensor Networks book
A good way to get started using series 1 xbees is Tom Igoe's Making Things Talk book: 

Step 14: Make the Joystick

I hacked into a joystick so that up down left and right were button presses, that could control the motion (forwards backwards left right) of the r/c snake.