Autonomous with Mechanum Wheels

It looks like I got driving mechanum wheels working. How do I get autonomous working? I use command like the ones below.

drive.mecanumDrive_Polar(.5,0,0);
timer(1,0);
drive.mechanumDrive_Polar(0,45,0);
timer(1,0);
drive.mecanumDrive_Polar(0,0,0);

I get an error, “Output not updated often enough.” Any ideas?

That sounds like the motor safety mechanism is kicking in and stopping your motors because you are not setting the output powers quickly enough (the one second pause from your timer delay).

So, you have two choices. The simple solution is to disable the motor safety feature.


// Turn off drive safety feature as there are long delays between
// changing motor speeds during autonomous
drive.setSafetyEnabled(false);

// Your autonomous code

// Optionally turn drive safety feature back on (if you want it for teleop)
drive.setSafetyEnabled(true);

Alternatively, you can break your time delay up into smaller chunks.

Our team leaves the drive safety feature disabled for the entire match and rely on manual intervention to hit the Enter key when we need to disable a run away robot.

The first important question is whether you’re using SimpleTemplate or IterativeTemplate. If you’re using SimpleTemplate, then your only problem is Motor Safety. If you are using IterativeRobot, you will need to restructure your code to remove the delays.

Here’s a description of motor safety: http://wpilib.screenstepslive.com/s/3120/m/7912/l/79730-using-the-motor-safety-feature The example Java program disabled motor safety in autonomous and enables it in teleop. See http://wpilib.screenstepslive.com/s/3120/m/7885/l/79459-the-hello-world-of-frc-robot-programming

I am using the SimpleRobot class. It turns out that I did turn safety off. My robot does nothing in autonomous. The robot works great in TeleOperator mode. I must have missed something else.

Can you post your code including the method for autonomous? Also, please post it in CODE tags so it will be easier to read.

Public void automous() {
myDrive.setSafetyEnabled(false);
myDrive.mecanumDrive_Polar(.5,0,0);
Timer.delay(1.0);
}

You have autonomous spelled wrong.

Is this what your code looks like, or is it spelled wrong in your code also?


public void autonomous() {
     myDrive.setSafetyEnabled(false);
     myDrive.mecanumDrive_Polar(.5,0,0);
     Timer.delay(1.0);
}

I made a different spelling mistake on my program. Thanks.

I have another related question. I want to use the method myDrive.mecanumDrive.Polar(x,y,z) in my autonomous method. Please explain the three numbers x,y,z. What does each do to the robot?

RobotDrive#mecanumDrive_Polar() takes input in the form of polar coordinates, as opposed to RobotDrive#mecanumDrive_Cartesian() which takes Cartesian (Rectangular) coordinates. The three parameters for RobotDrive#mecanumDrive_Polar() are as follows:

You can find information like this in the Javadocs in the sunspotfrcsdk directory.