CANJaguar and Encoders

How do I set a Jaguar, using CAN, to read the encoders and to rotate to a certain position?

I’m assuming I can set the ControlMode to PositionControl, but after that I am not sure what to do.

set the control mode:

void ChangeControlMode(ControlMode controlMode);

set the gains:

void SetPID(double p, double i, double d);

set the position feedback device to encoder:

void SetPositionReference(PositionReference reference);

enable control:

void EnableControl(double encoderInitialPosition = 0.0);

set a reference:

virtual void Set(float value, UINT8 syncGroup=0);

You also need to SetPositionReference, SetPID, and ConfigEncoderCodesPerRev.

Once you do all that, you EnableControl, and then Set the position you want.

The trickiest part is setting the PID values to useful numbers. You’ll need to experiment here, and you’ll want to start with small number and work your way up. Sadly, you HAVE to do this with your system completely together. You can’t tune a PID unloaded and then add a load and expect it to work well or at all.