hknssn Posted July 27, 2015 Posted July 27, 2015 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. Lego 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). YX 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. YsZ 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. Path 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 Quote
AndyCW Posted July 28, 2015 Posted July 28, 2015 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 Quote
Jeroen Ottens Posted July 28, 2015 Posted July 28, 2015 (edited) 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 July 28, 2015 by Jeroen Ottens Quote
braker23 Posted July 28, 2015 Posted July 28, 2015 Wow, that's an amazing MOC, the arm movements are very nicely coordinated, grats! Quote
darksheep Posted July 28, 2015 Posted July 28, 2015 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 ? Quote
hknssn Posted July 28, 2015 Author Posted July 28, 2015 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. Quote
Thirdwigg Posted July 28, 2015 Posted July 28, 2015 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. Quote
Blakbird Posted July 28, 2015 Posted July 28, 2015 That's certainly a complicated way to rotate a plate and, therefore, awesome! Thanks for sharing the thought process that went into the programming. Quote
Lakop Posted July 28, 2015 Posted July 28, 2015 Great idea and well executed. Thanks for sharing that one and all the info. Make a nice display peice. H Quote
Block_Smarts Lego Technic Posted July 29, 2015 Posted July 29, 2015 SO cool! If you still have it, try it upside-down! Quote
Technic Jim Posted July 29, 2015 Posted July 29, 2015 (edited) I used 4 Ev3 units with 15 servo motors and 10 touch sensors. You have that many units - I envy you so much Edited July 29, 2015 by Technic Jim Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.