|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Re: Omni Vex code in easyc?
Why is it necessary to cap the values at the maximums and minimums? Does the processor not automatically do this? I've always found it easier to subtract values from full drive and having the motors that need to be full power just have values greater than 255 and subtracting values from the other wheels instead of just starting from half power for everything. That way, you get full speed, but everything still works fine. I've never done a holonomic function, but this usually works fine for homemade arcade drives and the similar.
Also, please correct me when I say the obvious thing I'm missing, but the algorithm doesn't quite look right: Code:
LF = RR = lefty - leftx + 127 ;
RF = LR = 255 - lefty - leftx ;
I'm designing a robot to drive this way for practicing during Elevation, and I've not yet had time to start (notice the 4 weeks between BEST competition and VEX). Any clue what I'm missing? |
|
#2
|
|||||
|
|||||
|
Re: Omni Vex code in easyc?
Quote:
Quote:
For example, the robot is moving right at "full speed" while spinning slightly: 255 = GetRxInput ( 1 , 4 ) ; // Left Joystick, X Axis 127 = GetRxInput ( 1 , 3 ) ; // Left Joystick, Y Axis 180 = GetRxInput ( 1 , 1 ) ; // Right Joystick, X Axis // Half the input signal (so code does not overflow past 255) 128 = leftx / 2 ; 64 = lefty / 2 ; 90 = rightx / 2 ; // Drive Code Algorithim (note how "full speed" only sends half speed values to the motors to avoid saturation). 63 = 63 = 64 - 128 + 127 ; 63 = 63 = 255 - 64 - 128 ; 192 = 255 - RR ; // Reverse Direction of RR motor 192 = 255 - LR ; // Reverse Direction of LR motor // Spin Code Algorithim (Since we were only at half speed values before, the spin values have room to work with) 36 = 63 - 90 + 63 ; // RF 165 = 192 - 90 + 63 ; // RR 36 = 63 - 90 + 63 ; // LF 165 = 192 - 90 + 63 ; // LR Now is this algorithm perfect? No. In the N, E, S, and W directions the robot never travels at maximum speed; only when the robot goes diagonally do the motors reach their limits of zero and 255. You can overcompensate this by saturating the equation by not diving the leftx or lefty variables in half, but this will take away maneuverability. You can experiment with this by tweaking the constants to see how the system responds. A video of this code working is available here: http://www.team228.org/media/video/view/9 Another thing to keep in mind is that this is entirely open-loop; there are no sensors for feedback. Forward is always relative to the front of the robot. By adding a gyro to the robot, getting the angle of the joystick ( angle = atan(lefty/leftx); // I'm pretty sure math.h does everything in radians. You can also write a lookup table to save the processor from imploding. ), getting the angle of the robot (you'll also need to integrate results to keep track of robot angle over time), then you can then use slightly different algoritms to make sure the robot always goes in the direction of the joystick - no matter what way the robot is pointing. But that's a good exercise that one should experiment with and learn on their own. I posted the my basic holonomic drive code just so people can get past that initial hump of figuring out how to make it work (and judging by the number of teams I see with omni/mecanum drive that never strafe, this hump can be high). |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| 2008 Omni Drive Code Help | Vasily Zaitsev | Technical Discussion | 5 | 27-01-2008 00:57 |
| pic: vex omni drive | 1902_Battery_SGT | FIRST Tech Challenge | 6 | 28-05-2006 17:55 |
| pic: simple omni vex bot | colin340 | FIRST Tech Challenge | 15 | 05-05-2006 17:16 |
| EasyC Default Code | Team 1649 | Programming | 13 | 29-01-2006 11:52 |
| Vex Easyc vs Mplab | Joohoo | Programming | 17 | 27-01-2006 08:22 |