Introduction: Build a Moving TARS Robot From Interstellar

In this guide, we will be building a half-size of TARS to minimize the amount of materials while keeping it life-like. Keep in mind that if you want to build a larger size TARS robot, you may need to use very high-torque servo motors or stepper motors, which will require additional circuitry.

Inspiration: Interstellar

By far the star of the movie Interstellar was the monolithic chatterbox robot, TARS. Who doesn't love TARS? So, let's get building!

Why build TARS?

I've searched all over the internet and I could not find a single example of a TARS robot being built by other people. There are other example of people building replicas and cosplay models, but those are actuated by hand (or foot). Even the movie magic was created with advanced puppetry and physical manipulation. This instructable will be the first guide and build of TARS!

This instructable and project is made in collaboration with Kevin Dong.

Step 1: How It Works

The hardest aspect of building TARS is figuring out the dynamics of the robot. Given a two parallel plane surfaces, it is easy to make on move relative to the other using one servo, as two planes moving opposite to each other can be done with one actuation. However, it is unknown as to which plane would be moving. Thus, to restrict one side from moving, i.e. simply allowing one plane to move while the other remains at rest, requires two coupled servos, wherein the plane actuated is the only plane that moves.

The heart of the entire robot and the motion it is capable of doing lies in the coupling of 6 continuous rotation high-torque servo motors to accomplish full 4 legged body motion of TARS, 2 for each leg in the middle and one the two edges. This works because both servos are coupled. Since one the servos is powered and is programmed to remain still (programmed by lack of command given to the servo, while powering it) and the other servo is programmed to move, and given that the two gears are coupled together and the servos will choose to actuate the body of least resistance, both gears will move, and the body of one of the servos shall actuate. Using this principle applied over four parallel planes on one axis of rotation (and a bit of experimentation) we can mimic all the different motion that TARS can do. This can be analyzed using change of frame dynamics calculation using Euler angles, but we will not go though the details of the math and simply understand the motions conceptually. In theory, this can also be accopmpihed by using only 4 actuators, but we will stick with 6 in this instructables to keep the dynamics of motion of the robot simper.

You can download the servo couplers here. It is designed in Fusion360 and is a doubled-ended coupler so you can couple the motion of two servos together.

More details in the steps are coming up. Stay tuned.

Step 2: Materials

(6) Foam Board -- I bought mine from the dollar store

(2 set) Hot Glue Gun and glue sticks -- also from the dollar store, I used about 20 glue sticks

(1) Set square (for cutting marking, making right angles)

(6) Continuous Rotation High Torque Metal-Gear Servo Motors

(3) Double-sided Servo Couplers (3D printed)

(1) Bread Board

(1 set) Jumper Wires

(1) Arduino Uno

If you are not using an Uno, make sure that it has at least 6 PWM pins like the mega. For example the new Arduino 101 only has 4 PWM pins.

(1) Barrel Jack adapter for the Arduino

(1) Buck Converter

(8) AA batteries

Step 3: Model Scaling

As mentioned in the title, we are only building half-size model, because TARS is huuuuge.

Drawings and Plans Coming Soon.

Step 4: Marking the Foam Board

Using a ruler, measure the dimension from the drawing above onto the foam board and mark it with a dot. This will serve as your guide for cutting. Using a set square, make sure the lines are right angles and draw the lines.

Alternatively, I have also made plans on AutoCAD that you download, print, and tape together as your guide. You can also use this file to laser cut the foam.

Step 5: Cut the Foam Board

The black lines are full cuts. The shaded regions are score cuts,

I find it easier to not cut all the way through, but rather cut about 80% deep. Then, using the edge of a table bend the foam and you will be left with a paper hinge. Then cut this paper using the edge of the blade.

For the shaded regions, repeat the same technique of cutting 80% deep, then bend the foam on both ends, and peel off the foam layer from the paper, leaving you with a 0.5cm paper cavity. This will later be used for gluing.

Step 6: Gluing the Foam

Fill the paper cavities with glue and fold it into a rectangular prism shape, using the set square to make sure it the edges are square.

Step 7: Repeat

So you have made is 1/8th of the entirety of TARS. Now, repeat the process 7 more times! Yes, he is huuuuuge. And mind you, this is only half size.

Step 8: Making the Servo Mounts

Cut a piece of foam piece where the servo will rest. I just eyeballed the size of foam I needed for this step and glued it to the edges of 4 of the legs.

That's it for now for gluing and cutting foam pieces. On to the electronics.

Step 9: 3D Printing the Servo Couplers

3D print 3 pieces of these servo couplers (made using Fusion360) which can be downloaded here:

Step 10: Friction Fit the Servo Couplers

Place the servo coupler on top of one of the servos and use a rubber mallet to secure it in, until you cannot see the gears. Then, place the another servo on the opposite end of coupler and again, secure it in with a rubber mallet.

Repeat this 2 other times for the rest of the servo couplers.

Note: depending on the servo you have you may have to bore the hole a bit larger with a drill, or you may need to modify the CAD file.

I encourage you to couple all of these servos to each other and using a small piece of foam to test out a variety of motion to make sure that it is fitted well and the motion is as expected.

Step 11: Remove Stickers From the Servo

Peel off the stickers from the servo since we do not want to glue the sticker onto the foam board, but rather the servo itself.

You may also roughen up the outer surface of the servo using a blade to increase surface area with which the glue may bond.

Step 12: Position the Servos on the Legs

Position the servos on the servo mount you glued onto the legs on step 8 such that there is a small ~1mm gap between legs to minimize friction.

Mark the positions with a pencil and cut slots so the servo can be mounted flat on the foam board.

Step 13: Gluing the Servos

Glue the servos onto the servo mounts, where you marked it.

Step 14: Labelling the Wires

Label all the servo wires from 1 to 4 starting from the left.

This makes the wiring easier on the next step.

Step 15: Wiring the Circuitry

Wire the connections using jumper cables and a breadboard following the diagram above.

All the servos are powered in parallel from the buck converter, which is powered from 8 AA batteries which will have a total of 12V

While each of the signal pins on the servos are plugged in to the PWM pins in an Arduino, which can be seen as the digital pins with a tilda (squiggly) sign "~"

Step 16: Tape the Circuitry Onto the Walls of One of the Legs

I used hot glue and duct tape to temporarily tape it onto on of the legs.

In retrospect it's better to distribute the load over different legs and use longer wires, as well as cases for the electronics.

Step 17: Uploading the Code

Copy the following lines of code to the Arduino IDE.

First, test the servos using the following lines of code:


Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6;

void setup(){ servo1.attach(3); servo2.attach(5); servo3.attach(6); servo4.attach(9); servo5.attach(10); servo6.attach(11); }

void loop() { servo1.write(0); servo2.write(108); }

For movement or motion 1:


Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6;

// Calibrated values for CW/CCW max speeds and servo pins int s1[3] = {180,0, 3}; int s2[3] = {67,108, 5}; int s3[3] = {0,180, 6}; int s4[3] = {66,107, 9}; int s5[3] = {180,0, 10}; int s6[3] = {180,0, 11};

// Delay to rotate a servo 180 degrees at max speed int delay180 = 2500; int brakeSpeed = 0;

void setup(){ /*servo1.attach(3); servo2.attach(5); servo3.attach(6); servo4.attach(9); servo5.attach(10); servo6.attach(11);*/ }

int sign(int x) {return (x > 0) - (x < 0);}

void rotate(Servo servo, float angle, int info[]) { servo.attach(info[2]); if (angle > 0) { servo.write(100); delay(round(delay180 *(abs(angle)/180))); servo.write(90 - /*sign(info[0] - 90)*/brakeSpeed); delay(30); servo.write(90); } else { servo.write(80); delay(round(delay180 *(abs(angle)/180))); servo.write(90 + /* - sign(info[1] - 90)**/brakeSpeed); delay(30); servo.write(90); } servo.detach(); }

void loop() { rotate(servo1, 45, s1); delay(3000); rotate(servo1, -45 , s1); delay(3000); }

For movement or motion 2:


Servo servo1; Servo servo2; Servo servo3; Servo servo4; Servo servo5; Servo servo6;

Servo sList[6] = {servo1, servo2, servo3, servo4, servo5, servo6};

// Calibrated values for CW/CCW max speeds and servo pins /*int s1[2] = {85,95}; int s2[2] = {80,100}; int s3[2] = {80,100}; int s4[2] = {95,85}; int s5[2] = {100,80}; int s6[2] = {80,100};*/

int info[6][2] = {{80,100}, {75,105}, {75,105}, {100,80}, {105,75}, {75,105}};

// Delay to rotate a servo 180 degrees at max speed int delay180 = 3000;

void setup(){ servo1.attach(3); servo2.attach(5); servo3.attach(6); servo4.attach(9); servo5.attach(10); servo6.attach(11); }

//int sign(int x) {return (x > 0) - (x < 0);}

void rotate(int ser[], float angle) { for (int i = 0 ; i < 6; i++) { if (ser[i] == 1) { if (angle > 0) sList[i].write(info[i][0]); else sList[i].write(info[i][1]); } else { sList[i].write(90); } } delay(round(delay180 *(abs(angle)/180))); for (int i = 0 ; i < 6; i++) { sList[i].write(90); } }

void loop() { int servos[] = {1,0,0,0,0,1}; rotate(servos, 90); delay(2000); rotate(servos, -90); delay(2000); }

You can use a variety of different motion, such as the cartwheel motion biped walk, etc. by modifying the degree of rotation of each servo from the code above.

Step 18: Putting the Two Halves Together

Glue in two rectangular pieces of foam on the sides of one of the legs to increase the gluing surface area.

Mark the areas where the servos would fit and cut it open. Then, glue both halves together using hot glue.

Step 19: Congratulations!

You now have your own working half-size model of TARS the robot.

Step 20: Lessons Learned

I placed the foam legs a little too close to one another as such there was a much larger surface area, resulting in a large static friction margin that legs have to overcome. Therefore, the legs had a hard time moving up and and physically walking, although it was able to wobble for a while before one of the couplers slipped off (due to the use of plastic servos over metal geared ones). Though 2/6 of the servos I used were metal gears and did not slip off of the coupler.

Step 21: Coming Up Next

Coming soon -- TARS2.0

- Voice functionality

- Improving coupler design to have a set screw or clamping design

- 3d printed servo holder

- Arms

- Movable pivot point

- More polished finish

- Stepper motor actuated

- Wireless radio control

Video tutorial? (if there's interest)

Step 22: Vote for Me!

If you enjoy this instructables and would like to see more instructables like it please add it to your 'favourites' list and vote for me in the Robots and In-Motion contests. A 3d-printed would surely help a lot of my future builds.

Robotics Contest 2017

Participated in the
Robotics Contest 2017

Design Now: In Motion Contest

Participated in the
Design Now: In Motion Contest