Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   FIRST Tech Challenge (http://www.chiefdelphi.com/forums/forumdisplay.php?f=146)
-   -   pic: kiwi vex robot (http://www.chiefdelphi.com/forums/showthread.php?t=46560)

colin340 14-04-2006 14:45

pic: kiwi vex robot
 

TheNotoriousKid 14-04-2006 14:47

Re: pic: kiwi vex robot
 
how does it move forward

Arkorobotics 14-04-2006 14:50

Re: pic: kiwi vex robot
 
Woah, this is a smart design! It's small, and the structure doesn't look flimsy. How does it run?

Can you upload a video? I would like to show my friends the kiwi drive in action :D

Greg Perkins 14-04-2006 14:52

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by TheNotoriousKid
how does it move forward

Magic. Hahaha, I'm kidding; actually there are three "omni-wheels" that are located at 120 degrees from each other, and due to the angle of the wheels, when two are driven the third acts as a caster. It's all got to do with the vectors of the machine, and since I do not know the formulas off the top of my head, I cannot explain it in full detail. If you want, search "kiwi drive" or "holonomic drive' on delphi here.

Greg Needel 14-04-2006 15:36

Re: pic: kiwi vex robot
 
colin,

does this mean you are going to enter the vex comp at the Ra Cha Cha this year?


Greg

colin340 14-04-2006 15:57

Re: pic: kiwi vex robot
 
it works like a champ with some code from Tom Bottiglieri it should be allot easier to control as for computation I will problem not but team 340 is working on starting a 9th grade team

thank you tom Bottiglieri and Greg Perkins for advise

billbo911 14-04-2006 16:12

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by colin340
it works like a champ with some code from Tom Bottiglieri it should be allot easier to control as for computation I will problem not but team 340 is working on starting a 9th grade team

thank you tom Bottiglieri and Greg Perkins for advise

With Tom's permission, could you possibly post the section of code that makes the magic work? PLEASE!!!!

Tom Bottiglieri 14-04-2006 16:24

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by billbo911
With Tom's permission, could you possibly post the section of code that makes the magic work? PLEASE!!!!

Well credit needs to be given where it's deserved. I got the equations for my kiwi code from the living genious, Joel Johnson.

Anyway, here's what you need to do to make it work:

PHP Code:

//Make sure variables are unsigned ints... rollovers WILL occur with signed ints
unsigned int trans_xtrans_yrot;

//Grab inputs (x,y coords in rectangular coordinates and rotation rate)
trans_x 254 PWM_in1
trans_y 254 PWM_in2
rot 254 PWM_in4;      

//Limit vector length to 127
trans_x = (unsigned int)(37+(254*trans_x)/359);
trans_y = (unsigned int)(37+(254*trans_y)/359);

//Assign and limit wheel outputs
wheel_1  = (unsigned char)limit( (((2*trans_x) + rot) / 3), 0254); 
wheel_2 = (unsigned char)limit( ((601 rot trans_x - (168*trans_y/97)) / 3), 0254); 
wheel_3 = (unsigned char)limit( ((161 rot trans_x + (168*trans_y/97)) / 3) , 0254); 

This assumes you have a limit function, which limits an input value to upper and lower bounds.

PHP Code:

signed int limit(signed int valuesigned int minsigned int max
 { 
      if (
value min
      { 
           
value min
      } else if (
value max
      { 
           
value max
      } 
  
      return 
value
 } 

That should be all you need, and it should work. (It took me about 2 hours to figure out the variables needed to be unsigned. :mad: )

billbo911 14-04-2006 16:50

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by Tom Bottiglieri
Well credit needs to be given where it's deserved. I got the equations for my kiwi code from the living genious, Joel Johnson.

Anyway, here's what you need to do to make it work:

PHP Code:

//Make sure variables are unsigned ints... rollovers WILL occur with signed ints
unsigned int trans_xtrans_yrot;

//Grab inputs (x,y coords in rectangular coordinates and rotation rate)
trans_x 254 PWM_in1
trans_y 254 PWM_in2
rot 254 PWM_in4;      

//Limit vector length to 127
trans_x = (unsigned int)(37+(254*trans_x)/359);
trans_y = (unsigned int)(37+(254*trans_y)/359);

//Assign and limit wheel outputs
wheel_1  = (unsigned char)limit( (((2*trans_x) + rot) / 3), 0254); 
wheel_2 = (unsigned char)limit( ((601 rot trans_x - (168*trans_y/97)) / 3), 0254); 
wheel_3 = (unsigned char)limit( ((161 rot trans_x + (168*trans_y/97)) / 3) , 0254); 

This assumes you have a limit function, which limits an input value to upper and lower bounds.

PHP Code:

signed int limit(signed int valuesigned int minsigned int max
 { 
      if (
value min
      { 
           
value min
      } else if (
value max
      { 
           
value max
      } 
  
      return 
value
 } 

That should be all you need, and it should work. (It took me about 2 hours to figure out the variables needed to be unsigned. :mad: )

Now I know why I like Tom (oh yeah, and Joe too :D ) so much!!

The problem is, now I have to go buy some omni wheels for this weekends project :cool:

BTW. Do you know how the constant values were determined (ie. 37, 359, 601, 168, 97, 161)? Also, I see you are using PWM_in4 for the rotation value. I assume this is off the left stick X-axis. Knowing these can help me modify this stuff for future projects. :)

Thanks again!!!!

s_forbes 14-04-2006 16:54

Re: pic: kiwi vex robot
 
I like that design! It's so compact and sturdy, good job!

colin340 14-04-2006 16:58

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by s_forbes
I like that design! It's so compact and sturdy, good job!

yes this is so much better then my old frame it's very stiff and compact

billbo911 15-04-2006 14:10

Re: pic: kiwi vex robot
 
I just got this working this morning. :) I tried for hours last night to code it with EasyC. Apparently doing the math wasn't so easy with EasyC. :o I'll figure it out later today. What you see it the video is coded with MPLAB in about 20 minutes.

Vex Kiwi Drive




:D

Steve0100 15-04-2006 15:39

Re: pic: kiwi vex robot
 
Very nice design!

There seem to be many variations of Vex holomic robots out there, probably because they are so fun to drive. Here's the beginnings of my first Vex bot, thanks to the RS sale:



Here's the underside:



My goal was to design a robot as clean and symmetrical as I could. It took one Starter kit and an additional hardware kit. The orange spacers in the motor mount bracket are the only non-vex parts, from an Erector set. They are conveniently in-between sizes of the vex plastic spacers.

To avoid having to support the axles on the outer sides of the wheels, I set back the motor with these spacers to allow a collar to hold in and support the axle on the motor side inside the bracket.

I've added sensors and have devised a scheme (still in the process of Implementation ) to have the robot detect walls and "bounce" off them before hitting with an angle of reflection equal to that of the angle of incidence. I'd like to put it inside a boxed-in area and have it bounce around like an billiard ball for robotics demos.

billbo911 15-04-2006 16:09

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by Steve0100
Very nice design!


I've added sensors and have devised a scheme (still in the process of Implementation ) to have the robot detect walls and "bounce" off them before hitting with an angle of reflection equal to that of the angle of incidence. I'd like to put it inside a boxed-in area and have it bounce around like an billiard ball for robotics demos.

Thanks. :)

I really like how clean your assembly looks!

On sensors.... from my experience with the the Vex Ultrasonics.
They do a good job of sensing objects directly in front as long as object has a surface that is perpendicular to the sensor. In other words, when approaching a wall at an angle, the sensor wont pick it up very well at all.
Additionally, if you do put your bot in a box, the walls will bounce the 40KHz signal pulses quite a bit, causing misreadings from the controller.
Here's a thought. Try using the light sensors from the Line Following kit. With a little experimentation, you should be able to fine tune an algorithm to detect the relative distance from the wall based on the amount of light being reflected off of it. The biggest problem you will face with that is consistent light levels, and that may render this option useless. (Remember the difficulties with the CMU cam. and reflected light in 2005?) :(

Joel J 15-04-2006 16:31

Re: pic: kiwi vex robot
 
Quote:

Originally Posted by billbo911
Now I know why I like Tom (oh yeah, and Joe too :D ) so much!!

The problem is, now I have to go buy some omni wheels for this weekends project :cool:

BTW. Do you know how the constant values were determined (ie. 37, 359, 601, 168, 97, 161)? Also, I see you are using PWM_in4 for the rotation value. I assume this is off the left stick X-axis. Knowing these can help me modify this stuff for future projects. :)

Thanks again!!!!

Here's the "documentation." Its in the PBASIC file that I used to program the KIWI drive 229 did a year or so ago.

Code:

'KIWI Code Overview
'------------------
'
'Vx, Vy, and w are on the interval [-127, 127], but the inputs p2_x, p2_y, p1_x are on the interval [0, 254],
'so we compensate by setting Vx, Vy, and w to the shifted version of the input:
'
'        trans_x = p2_x
'        trans_y = p2_y
'        rot        = p1_x
'
'        Vx = trans_x - 127
'        Vy = trans_y - 127
'        w  = rot - 127
'
'The kiwi system is characterized by the equation:
'
'        [ Vx ]                [  1                -1/2                -1/2          ]        [ V1 ]
'        [ Vy ]        =        [  0                -sqrt(3)/2        sqrt(3)/2 ]        [ V2 ]
'        [  w ]                [  1                1                1          ]        [ V3 ]
'
'        [1x3 matrx] =        [3x3 matrix] * [1x3 matrix]
'
'where L is a length constant, Vx, Vy, and w are the system translation velocity components, and the system
'angular velocity, and V1 is the wheel velocity vector at angle 0 degrees, V2 the wheel velocity vector at
'angle -120 degrees, and V3 the wheel velocity vector at 120 degrees.

'
'Solving this system for V1, V2, and V3 yields the following equations of motion:
'
'        V1 = (2Vx              + w) / 3
'        V2 = (-Vx - SQR(3)*Vy + w) / 3
'        V3 = (-Vx + SQR(3)*Vy + w) / 3
'
'(NOTE: These equations operate on the assumption that the magnitude of the desired velocity vector can be
'no greater than 127. That is, the hypotenuse of the triangle formed by the trans_x and trans_y variable
'cannot exceed 127. To ensure that this condition is met, one has to convert the rectangular
'coordinates (trans_x, trans_y) into polar coordinates (V_desired, theta), limit V_desired to 127, then
'back-calculate the new values of trans_x and trans_y based on the new value of V_desired and the already
'existent theta. The code that does this has been placed exactly before this large block of text.)
'
'(NOTE: UPDATE! The Basic Stamp doesn't like the math required to make the previous note a reality, so I
'am using a crude solution: I scale down all input values by 127*SQR(2) to ensure that the largest vector
'magnitude doesn't exceed 127.)
'
'The output from each equation (V1, V2, V3) is on the interval [-127, 127], but the desired outputs,
'drill_1, drill_2, drill_3 are all on the interval [0, 254], so we compensate by setting drill_1, drill_2,
'and drill_3 to the shifted version of V1, V2, and V3:
'
'        drill_1 = V1 + 127
'        drill_2 = V2 + 127
'        drill_3 = V3 + 127
'
'And that's it! Plug in all the variables, and we end up with the equations of motion that follow
'(note: fractions were expanded out to compensate for the integer based calculation done by the stamp):

'Motion equations



All times are GMT -5. The time now is 14:53.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi