Programming Mecanum Wheels

I have tried searching CD and WPILib for a while now, and tried everything. How do you do mecanum wheel programming?

Hi! I’ve dug up a few mechanum links from wpi located here: http://wpilib.screenstepslive.com/s/3120/m/7912/l/95588-getting-your-robot-to-drive-with-the-robotdrive-class and here: http://wpilib.screenstepslive.com/s/4485/m/13809/l/241862-driving-a-robot-using-mecanum-drive.

I don’t know if they particularly relate to your team’s robot, but they will hopefully be useful! My team has done mechanum drivetrain for the two years I have been on the team, so let me know if you have any questions or need more explanation! :slight_smile:

**WPILib RobotDrive.java **

    /**
     * Drive method for Mecanum wheeled robots.
     *
     * A method for driving with Mecanum wheeled robots. There are 4 wheels
     * on the robot, arranged so that the front and back wheels are toed in 45 degrees.
     * When looking at the wheels from the top, the roller axles should form an X across the robot.
     *
     * This is designed to be directly driven by joystick axes.
     *
     * @param x The speed that the robot should drive in the X direction. -1.0..1.0]
     * @param y The speed that the robot should drive in the Y direction.
     * This input is inverted to match the forward == -1.0 that joysticks produce. -1.0..1.0]
     * @param rotation The rate of rotation for the robot that is completely independent of
     * the translation. -1.0..1.0]
     * @param gyroAngle The current angle reading from the gyro.  Use this to implement field-oriented controls.
     */
    public void mecanumDrive_Cartesian(double x, double y, double rotation, double gyroAngle) {
        if(!kMecanumCartesian_Reported) {
            UsageReporting.report(tResourceType.kResourceType_RobotDrive, getNumMotors(), tInstances.kRobotDrive_MecanumCartesian);
            kMecanumCartesian_Reported = true;
        }

I have no idea why this code is not working, any ideas, I have been stressing about it for the past two hours. :ahh:


        double magnitude = driveStick.getMagnitude();
        double direction = driveStick.getDirectionDegrees();
        double rotation = otherStick.getTwist();
        RobotDrive driveTrain = new RobotDrive(3,4,5,6);
        while (isEnabled() && isOperatorControl()) {
        	
        	driveTrain.mecanumDrive_Polar(magnitude, direction, rotation);
        	Timer.delay(0.005);
        }

This is located in teleopPeriodic() in Robot.java.

Any ideas?

You probably want to fetch the current values from your joystick inside the while(isEnabled && isOperatorControl()) loop. Otherwise you take the reading once and keep sending them over and over.