|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
Programming Mecanum
Hi. Im new to the programming jig, but I'm planning to use Java to program the robot. Our team is going to use mecanum wheels this year, but I don't really know how to program that. Any advice/tips/etc?
|
|
#2
|
|||
|
|||
|
Re: Programming Mecanum
I dont know what mecanum wheels are, however you will likely connect the motors to the speed controls, the Jaguars, or to some digital or analog output. If you use Jaguars then there is a class that handles the Jaguars (Victors) as well. There is control for the analog and digital out, although I dont know what they are as I am not as familiar with WPILib.
|
|
#3
|
||||
|
||||
|
Re: Programming Mecanum
Check out the holonomicDrive method of edu.wpi.first.wpilibj.RobotDrive. Holonomic Drive is just another name for the class of omnidirectional drives that work by vector addition (mecanum and quad-omnis).
--Ryan |
|
#4
|
|||
|
|||
|
Re: Programming Mecanum
if you are new go with LABview because dragging boxes and conecting wires is easier than typing code and having to worry about syntax
|
|
#5
|
|||
|
|||
|
Re: Programming Mecanum
Wait, Ryan, could you give me a sample of what that would look like?
And gaby, I programmed our bot last year, attempting Labview, but ended up going with Windriver. |
|
#6
|
||||
|
||||
|
Re: Programming Mecanum
I actually haven't programmed FRC in Java before, but using the information available at http://first.wpi.edu/FRC/frcjava.html, this is what I'd guess. Follow the instructions in the getting started guide to set up a basic robot project, the code they give you in the guide looks like this:
Code:
package edu.wpi.first.wpilibj.templates;
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.SimpleRobot;
import edu.wpi.first.wpilibj.Timer;
public class RobotTemplate extends SimpleRobot {
RobotDrive drive = new RobotDrive(1, 2);
Joystick leftStick = new Joystick(1);
Joystick rightStick = new Joystick(2);
public void autonomous() {
for (int i = 0; i < 4; i++) {
drive.drive(0.5, 0.0); // drive 50% fwd 0% turn
Timer.delay(2.0); // wait 2 seconds
drive.drive(0.0, 0.75); // drive 0% fwd, 75% turn
}
drive.drive(0.0, 0.0); // drive 0% forward, 0% turn} }
}
public void operatorControl() {
while (true && isOperatorControl() && isEnabled()) // loop until change
{
drive.tankDrive(leftStick, rightStick); // drive with joysticks
Timer.delay(0.005);
}
}
}
Code:
RobotDrive(int frontLeftMotor, int rearLeftMotor, int frontRightMotor, int rearRightMotor) Code:
public void operatorControl() {
while (true && isOperatorControl() && isEnabled()) // loop until change
{
drive.holonomicDrive(leftStick.getDirectionDegrees(), leftStick.getMagnitude(), rightStick.getX(GenericHID.Hand.kRight)); // drive with joysticks
Timer.delay(0.005);
}
}
Code is untested, so may require some adjustment. --Ryan |
|
#7
|
|||
|
|||
|
Re: Programming Mecanum
Alright, got it. Just what I needed. Thanks!
|
|
#8
|
|||||
|
|||||
|
Re: Programming Mecanum
Has this worked out for you?
Our team hasn't tried it yet because the drive base is still being assembled, and we're coding in Labview but I'm pretty sure that the holonomic drive code vi uses the same algorithm as the java RobotDrive holonomicDrive function. I was curious because I was under the impression that some of the mathematics of mecanum wheels were different from omni wheels, which I believe are what the stock algorithm was designed for. |
|
#9
|
|||
|
|||
|
Re: Programming Mecanum
Quote:
|
|
#10
|
|||
|
|||
|
Re: Programming Mecanum
Not sure I understand where this thread is. I have the coding for mechanums in C and it would have to be translated to Labview or Java or used as C in Labview. But not sure if its needed.
Steve |
|
#11
|
||||
|
||||
|
Re: Programming Mecanum
Here is the code that our team uses for mechanum (in C, but easily portable)-
Code:
velocity = (p1_y - 127); //Joystick 1 y rotation = (p1_x - 127); //Joystick 1 x strafe = (p2_x - 127); // Joystick 2 x wFL = velocity - rotation - strafe; //Front Left wheel, etc... wFR = velocity + rotation + strafe; wRL = velocity - rotation + strafe; wRR = velocity + rotation - strafe; pwm01 = wFL + 127; pwm02 = 127 - wFR; pwm03 = wRL + 127; pwm04 = 127 - wRR; |
|
#12
|
|||
|
|||
|
Re: Programming Mecanum
The ambiguously named holonomic drive method in C++, LabVIEW, and Java was designed for use with mecanum wheels, not omni wheels.
|
|
#13
|
|||
|
|||
|
Re: Programming Mecanum
The holonomic drive function will work with either mecanum or with a 4-wheel omni drive if the wheels are oriented 90 degrees from eachother, arranged like this:
/\ \/ It will not work with kiwi drive. |
|
#14
|
|||
|
|||
|
Re: Programming Mecanum
We tried the above code almost exactly.
It apears to work, but the left-right control of the joystick is inverted. Same with the rotation. What is the best way to flip to readings from the joystick? We are currently using the method to get the magitude and direction from the joystick. |
|
#15
|
|||||
|
|||||
|
Re: Programming Mecanum
I'm not sure in the Java library but in labview direction is departure from 0 degrees forward. Negating your direction should flip it's left/right movement.
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Mecanum Programming Help | Mars | Programming | 8 | 27-02-2008 15:41 |
| Bizarre Mecanum Programming Bug | manderson5192 | Programming | 10 | 08-02-2008 22:11 |
| Mecanum drivetrain programming problems | Mr. Freeman | Programming | 4 | 21-03-2007 17:11 |
| mecanum programming | mrmummert | Programming | 27 | 28-01-2007 13:45 |
| programming motors with programming kit | BorisTheBlade | FIRST Tech Challenge | 4 | 01-11-2005 19:03 |