Using Kinematic Analysis to Create a Robotic Leg Model

One of my prior projects was A six legged robot, that used a simple rotational motion from a motor to produce complex rotational motion at each of its legs. The concept worked roughly, but the design process I had used to create it was pretty imprecise (aka, trial and error in Autodesk Inventor). There are some changes I want to make to the design for the next version, and I wanted to come up with a way to determine its motion more precisely.

Things worked in my favor a few days ago, when I found a video on Reddit that used some very cool software created by Disney Labs. In effect, it was given a target path, and used an iterative process to create a set of rotating gears, levers, and rods that could articulate the path.

This is effectively what I need to do with BugBeest, my six-legged robot, because while the leg movement is a compound motion, the components that make it up are relatively simple. The motion from the top view is simply a cam and a rotating point, which rotates the leg around an axis.  The motion from the side view can be simplified to a piston moving in and out, and needs to be translated into the leg moving up and down. This is a more complicated set of joints, but If I could use software similar to what  Disney created (since I’m very doubtful they provide this for free to the general public) to simulate this motion, I could use their same iterative process manually to create the ideal leg motion.

Some resourceful comments in the Reddit post lead me to GIM, a piece of software created by the COMPMECH Research Group at a university in Spain. It can simulate kinematic objects and plot their paths, which is in effect a simplified version of what Disney Labs used in their process. So, I downloaded the software and started trying it out.


I first created the leg layout of what Bugbeest currently has, simulating the cam with a linear piston with a sinusoidal displacement. The dimensions were done by eye, but the motion on the leg is very similar to what the 3d CAD model shows (it’s actually a little closer to what I had originally envisioned):

Ok, so it does’t look exactly the same, but that is because the model here is missing a few components. 

With this functioning, the next step is to come up with a better design for the leg which solves the issues with the current version. These are:

  • The leg is pushed down, putting the cam in compressive load. change the leg so that it is in tension when the leg is lowered.
  • the leg  rotates faster on the lower half of the rotation than the upper half, making the steps jerky and imprecise. change the leg so that the slower movement occurs when the leg is lowered
  • the leg has too much horizontal displacement, fix this to reduce the uneccesary load on the motor.

A design with the cam “pulling” the leg down would solve the first two of these issues, but the third  may require an slightly different joint to function in the same way as the original. I decided to use a bellcrank mechanism to translate the horizontal movement into a more vertical movement. My initial design worked, but it didn’t hold the cam (or piston in this 2d representation) in the plane of motion, which would not work for rotating the leg:


Adding a third linkage allowed me to keep the piston fixed, and after a bunch of tweaking I settled on a design that gave me a lot of vertical movement with as little horizontal displacement as possible:


I don’t think I would have been able to produce this design without software like this, allowing me to change parameters on the fly to improve the response. Very glad I was able to use it for free! The next step (eventually) is to build this design in 3d CAD (as well as the rotating component, which should be simpler), and test it out there.  But I am very happy with this first step.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s