Problems using CAN with PID


I’ve been trying to use the CANJaguar class with PID control, but due to a lack of examples and documentation it has been a lot of guess and check work. I have successfully created a CANJaguar object and correctly configured it to the point where I could get encoder feed back. However I have run into a bit of trouble trying to use PID Control with the robot.

Here is some sample test code I created for a CANJaguar based driveTrain:

My problem is that even after setting a setpoint value using setX(x), the driveTrain wheel fail to move. Testing shows that the method getX() returns a value of zero. What’s wrong? If anyone knows anything about the topic any information would be very helpful.

Try with kSpeed instead of kPosition for ControlMode. Unit is Rotations/Minute.

You can also use bdc-comm to adjust the CAN jaguars directly through serial cable.

Agreed you must switch to kSpeed. You will need different P I D numbers when you switch to kSpeed. For tuning speed mode, start with the I number (not P as you would for kPosition). Once you have an I you like, you can ramp up P to tame minor oscillations. Always set D to zero in speed mode. There are several posts which give more details on tuning CANJaguar kSpeed controllers.

Wait a second. Why does D have to be set to 0 in speed mode? Ours seem to work best with P=.700, I=.085, D=5.000

It varies, there are different strategies. This year I’ve had good luck with speed control using the Ziegler-Nichols method (search it) with P and I (no D).