This instructable is about building a Rotary Stewart Platform. It allows to position its moving platform in six degrees of freedom. This specific platform is designed to be able to position a DSLR or any other digital camera.

This version of Stewart Platform uses instead of linear actuators just ordinary hobbyist servos for motion. Whole platform is controlled by an Arduino Uno, it computes all necessary equations to get the platform into right position and also controls servos.

Video of movement of completed platform can be seen here. Quality is not very good, but camera with better picture was at the time of capture on the platform. It was set-up for random position every 4 seconds.

Some informations about platform:

  • weight of load can be up to 2Kg (platform tested with 1.5Kg with no observable problems during moves in whole range of movements), theoretically platform should be able to cope with even higher loads, but it wasn't tested with such load
  • low power consumption - with load of 1kg was consumption of around 5W.
  • very good fineness of moves - smallest possible move is around 1mm
  • perfect ability to repeatedly achieve the same positions.
  • good stability of platform even with big loads.

All source files for platform (templates, Arduino source code, code for communication library can be found here.

Price of platform mostly depends on the price of servos and of the Arduino board. Cutting of parts, all other needed parts cost at most 50$. Total price can be around 150$.

IrDA and LCD with I2C interface were bought from ebay, they are very cheap (together around 10$)

Parts of platform are cutted from acrylic, i used 4mm acrylic.

Needed tools:

  • drill
  • screwdriver
  • tools needed for soldering and creation of PCB for connecting external power supply
  • measuring tools
  • double sided tape

In case of any questions, feel free to contact me.

Step 1: Building moving platform

We start by cutting parts from acrylic, here we will use templates from files platform_bot and platform_top. This platform is divided into two parts for better universality, just by changing top part of platform you can adapt it for various purposes. They are put together using screws placed in holes A1-A3.

Dimensions are chosen with respect to size of ordinary DSLR. Platform can be changed to be smaller or bigger.

At denoted places B1-B3 in bottom part of platform it is needed to drill holes which are used for anchoring of connecting rods. On third picture you can see proper way of doing that. These weird deformations in acrylic were caused by using CA glue to fix screws in acrylic.

On top of the moving platform it is necessary to place a piece of rubber or foam and fix it there with double sided tape. It will prevent unwanted rotations and movements of camera on the platform.

Length of connecting rods should be around 12cm and they should be bended as can be seen on picture of completed platform. This bend greatly improves range of movements. Length of rods should be chosen so that the angle between servo arms in horizontal position and the rod is around 70°.

<p>Hi. </p><p>I am curently looking at your code as i am developing a platform of my own, altough i will run it from a rpi, and coding in python. when testing your code the void getrxp(float pe[]) fails, i assume it is because you have used re inside function not pe, yet when i change it i get the compile error <br><br>platform.ino: In function 'void getrxp(float*)':<br>platform:220: error: invalid types 'float[int]' for array subscript</p><p>any help would be greate, thanks </p>
Hi, <br>in getrxp the argument is not used, i probably forgot to delete it. In getT you calculate vector for move in x,y,z direction. In getmatrix is calculated just rotation matrix. In getrxp you apply this vector and rotation matrix to get the desired position of attachment points of moving platform. So you don't need pe[] here.
<p>Hey awesome project!</p><p>I just have a quick question, you bend the rods to improve mobility to the platform but would it be possible to design the base smaller than the bottom platform (platform_bot), that way bending the rods wouldn't be necessary? </p><p>It's difficult to tell from the photo what angle the rods are bent, so I may be wrong. </p>
Hi, of course you can adjust size and shape of the top plane of the base (as long as you can still mount servos firmly on the base). It can help (and it will), but even the servo itself can get into way of the rod. The angle and distance of the bend from servo arm are not very important. Just bend it slightly and later you will see, only thing that is necessary is to make all rods with the same bend.
<p>This is great</p>
<p>How did you code the platform? ( Explain the code )</p><p>Is there a difference if you change the distance between the servo and push rod</p><p>Thanks, any help will be appreciated.</p>
Of course if you change sizes or lengths, you also need to change appropriate variables in the code. You shouldnt need to change code calculating inverse kinematic, only input variables.
<p>Is there any steps or videos to show how to code, as im new to Arduino and i cant understand the code. However, I do know the values of the servos would change accordingly to output values of flight simulator</p><p>Thanks </p>
<p>awesome project. I need some advice on cutting acrylic sheet, particularly,<br>the rectangular holes to hold the servos. How did you do it and what tools<br>did you use? Thank you.</p>
Hi, i didn't cut it by hand at all. At local advertising company they have laser cutter, they provided me with the plastic and also cutted it precisely with laser for reasonable price. Yet, if i had to cut it myself, i would definitely use dremel drill by drilling few holes and then connecting them.
<p>Hi, Great Project</p><p>I've one question do i need swivel ball links or ordinary links at end of each rod?</p>
Hi, you will definitely need ball links, with ordinary links there would be a lot of tension in the joints.
<p>Hi Mate, great work! :-)</p><p>One question how do I download the dxf filed from git hub? It wont let me :-(</p>
<p>Hi Thomas,</p><p>I'm an Industrial design student form the Netherlands and building my own stewart platform. I'm stuck at the proportions of the platform. Could you clarify how to determine the size of the base, top and legs?</p><p>I would like the top to be small enough to fit in my hand. The image shows the platform I have now, unfortunatly it runs into mechanical erros...</p><p>Cheers</p><p>Felix</p>
Hi, unfortunately i cant help you very much - there is really no specific ratio. But i don't see any big problem (only that the angle of legs is at limit of ball joints), but during movement there can be some other problems, the upper platforms is way smaller than bottom platform. Have you considered inverse positioning of servos? I mean rotate them by 180&deg;. Like this... http://www.instructables.com/id/My-Stewart-Platform-aka-the-other-kind-of-hexapod/<br>I think otherwise you will have to make upper platform bigger.
<p>Thank you for your fast response!</p><p>I kinda figured it out. There is a relation between the size of the top and bottom platform as well for the length of the legs. The more the platform looks like two triangles on top of each other the better the stability, the length of the legs do determine the degree of movement. Mine seem to be too long and the platform gets tangled up because the joints can't keep up with the rotations (like you said). </p><p>I'm going to make a new one that sticks to the triangular shape, similar to your setup.</p><p>Thanks</p>
<p>Hi Thomas,</p><p>First, congratulations for your work.</p><p>I was looking at your DXFs files and was wondering what should be the actual length of the servo_arms, as it shows 175 mm (6,88 inch.), which seems far too much in comparison with the plates?</p><p>JYB</p>
<p>That is definitely some kind of error. In program i used (QCad) it is 2cm from the middle of servo axis to the leg joint.</p>
<p>hi Thomas, i'm from Brazil.</p><p>I have a doubt about the servos:</p><p>Can I use servos with lower torque?</p>
hi, that depends on weight of load, with these servos the platform was strong and could handle the load for extended periods of time (hours). Therefore you can definitely use weaker servos if you won't put a lot of weight on it, also with shorter arms power of servos will be bigger.
<p>Can you give me your email or skype handle. I need your advice on programming the arduino for my flight simulator</p><p>thanks wkrlazaruk@gmail.com</p>
<p>hi Thomas, where did you get the mathematics? I'm trying to use your code but would like to see the mathematics behind it, do you have any article that you can share ? thanks</p>
<p>This is cool, I'd love to see a video of it in action...!</p>
<p>I added link for a video of platform in moves in the text, i don't have the platform right now because it's in my university, if i will get it once more, i will do better video and most probably i will expand this instructable.</p>
<p>me too! :)</p>

About This Instructable


120 favorites

More by ThomasKNR: Arduino controlled Rotary Stewart Platform
Add instructable to: