Recommended Posts

Hi,

Here is my latest project that i have been working on the past 2 months.

It's only function is to keep on rotating a platform or sphere. So it doesn't really have any purpose besides looking kinda cool.

It can be used as a MOC display stand, but it has it's weight limit.

I tried to have Gyroboy(from Ev3 education set) balancing on the platform but it was to heavy and it didn't really like the unstable platform.

So it ended up with a borring box on top instaid.

19442136874_48157e4f2c_z.jpgLego Axis by Andreas Håkansson, on Flickr

The build was inspired by a robot/machine i saw on the new season of battlebots. It's the one holding the trophy.

After some research i found out that it was created by Mark Setrakian. I also found a video of his machine. (see below)

You might notice that his moves alot more smoother. And that i stole the name becouse i couldn't come up with something myself.

So this project was kinda software heavy compared to my other mocs so i figured i might aswell share i little about what makes it tick.

For those that don't care how it works or just hate math should probably skip the rest.

First off, what is the problem?

The problem is to get the arm to follow i curved line at a specific height in space so that the 5 arms together makes a circular motion.

What I need for this is a way to convert X,Y,Z coordinates into angles for the diffrent joint in the arm and then a way to plot a curved path in the X,Y,Z coordinate system.

Converting X,Y,Z coordinates into angles (for 3 joints)

The way i did this was to create two 2-dimensional views of the arm, X-Y and Z-Ys (not same as Y).

19877061910_351cc193c6_z.jpgYX by Andreas Håkansson, on Flickr

So first of i calculate the value of Ys. This is done with the X Y positions that would be part of our desired position.

Ys = sqrt(X^2 + Y^2)

Now it is possible to get the angle between Ys and X.

Angle Radians_YsX = arccos(X/Ys) (arccos = inverted cos = cos-1)

Some calculators/softwares (EV3 original software) would directly give you the value in degrees.

In labview you get the value in radians instaid of degrees so you have to convert it into degrees youself.

The diffrence between radians and degrees is basically that for degrees 360 = full circle and for radians 6,28(Pi x 2) = full circle.

I used labview so i had to add this.

Degrees_YsX = Radians_YsX x 180 / Pi

Now i have the calculated angle for the first joint.

19878393399_72e5ecba6a_z.jpgYsZ by Andreas Håkansson, on Flickr

B and C is fixed distances in the mechanical design so they will be constants in this case.

Ys i got from the calculations above and Z is part of our desired position so i know that value aswell.

To get the angle for bc (third joint) i first need to know the lenght of V.

V = sqrt(Z^2 + Ys^2)

To get the angle for bc.

Radians_bc = arccos((B^2 + C^2 - V^2) / (2 x B x C))

Degrees_bc = Radians_bc x 180 / Pi

Now i just need the angle between B and Z (bz) for the second joint.

First i calculate the angle between B and V (bv)

Radians_bv = arccos((B^2 + C^2 - V^2) / (2 x B x C))

Degrees_bv = Radians_bc x 180 / Pi

Then i calculate the angle between V and Z (vz)

Radians_vz = arccos(Z/V)

Degrees_vz = Radians_vz x 180 / Pi

Add them together

Degrees_bz = Degrees_bv + Degrees_vz

Now i am able to generate the degree values for the 3 joint in the arm based on the XYZ coordinates.

However the degree values of the joint is not the same as the degree value for the motors so i will have to account for that with some gear ratio calculations. (I have a feeling most people here in the technic forum knows the basics of gear ratio so i'll skip explaining that.)

In the calibration sequence of the machine i then match the starting position for the motors with the appropriate degree value.

Creating a curved path.

The curved path is based of a circle that has it center in the middel of the machine. Each arm will move along 64 degrees of the circle.

I used 64 degree instaid of 72 (1/5 of 360 degree) to avoid collisions of the arms when they do the transition.

I had to use a separate coordinate system for the path based of the center of the machine, in the new coordinate system i use Xc and Yc.

19877055770_1d6b01ece2_z.jpgPath by Andreas Håkansson, on Flickr

As you can see in the image above the path starts at 328 degree and moves to 392 degree. I keep going above 359 (instaid of starting over at 0) to avoid having make special code that would have to hadle the jump as it moves along the path.

To get Xc and Yc coordinates for the path (based of th center of the machine).

Yc = cos(v) x r (v = angle, r = radius)

Xc = sin(v) x r

Ex:

1/ (Yc) 127,2mm = cos(328) x 150mm (Xc) -79,5mm = sin(328) x 150mm

2/ (Yc) 150mm = cos(360) x 150mm (Xc) 0mm = sin(360) x 150mm

3/ (Yc) 127,2mm = cos(392) x 150mm (Xc) 79,5mm = sin(392) x 150mm

Now i just need to get the path based in the center coordinate system to the coordinate system for the arm.

The distance between the two coordninate systems is know (just measure).

To get the Z and X positions.

Z = P - Yc (P = distance between the two coordinate systems)

X = 0 - Xc

Ex:

(Z) 122,8mm = 250mm - 127,2mm (Yc)

(X) 79,5mm = 0 - -79,5mm (Xc)

The Y value for the arm does not need to be calculated, it can be what ever i set it at as long as the arms can reach it.

So that is basically the math for the machine. I use the same calucaltions for all 5 arms.

To get it to move in the path i start at 328 degree and then every 100ms i add 1 degree until i get to 392. Then i lower the Y value to lower the arm and then start to subtract 4 degree every 100ms

until it reach 328 again. Then change back the Y value to make to arm go up again then it kinda repeats that.

Each arm starts at 5 diffrents points in this cycle so that when the first arm starts moving forward the last arm will start moving revers. This way there will always be 4 arms holding the plate.

There is probably more efficent ways to solve this, but this is what i could come up with. :)

Most of the equations could be used for a walking robot as long as its only has 3 joints / leg if you want all legs to pull in the same directions.

But i have a feeling there might be some weight issue.

Hopefully the explinations was understandable and not too boring. :)

/Hknssn

Share this post


Link to post
Share on other sites

It's cool that you shared the math behind the kinematic equations in your build. The one and only kinematics course that I took made my head spin. Matrices make everything easier and faster, but it's no fun to work out on your own. Yikes! The math in that course almost turned my brains into tater tots.

It's also nice to see something other than a vehicle even if that's all I build.

v/r

Andy

Share this post


Link to post
Share on other sites

Cool, have you tried it with a sphere, like the original?

What is the weight issue? The arms certainly look strong enough...

Oh and I suppose you could also make a tilted rotating circle path? A bit more complicated goniometrics though ;)

Edited by Jeroen Ottens

Share this post


Link to post
Share on other sites

Wow this is really cool , have some questions how may ev3's and motors did you use . What language did you write the software in ?

Share this post


Link to post
Share on other sites
Cool, have you tried it with a sphere, like the original?

What is the weight issue? The arms certainly look strong enough...

I have not tried a sphere since i had no around, but i think it would work better since it would stay centered automatically.

It's the motors/gearing. The motors seems to struggle when it's too heavy.

Wow this is really cool , have some questions how may ev3's and motors did you use . What language did you write the software in ?

I used 4 Ev3 units with 15 servo motors and 10 touch sensors. They communicated with bluetooth.

For the programming i used Labview.

Share this post


Link to post
Share on other sites

Very cool. Thanks for sharing all the schematics. I can tell a lot of work was put into the planning and building of this MOC.

Share this post


Link to post
Share on other sites

That's certainly a complicated way to rotate a plate and, therefore, awesome! Thanks for sharing the thought process that went into the programming.

Share this post


Link to post
Share on other sites

Great idea and well executed. Thanks for sharing that one and all the info. Make a nice display peice.

H

Share this post


Link to post
Share on other sites

I used 4 Ev3 units with 15 servo motors and 10 touch sensors.

You have that many units - I envy you so much :hmpf_bad:

Edited by Technic Jim

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.