I am trying to get my robot to drive straight and am having trouble. I find that when running the motors with no load they run fine. If I put a load on one motor it accelerates. The other performs as expected, it tries to maintain speed. I am running 393 motors with encoders and PID selected. I am running robot C.
See the following video: https://youtu.be/u3P0Wectwco
program is as follows;
#pragma config(I2C_Usage, I2C1, i2cSensors)
#pragma config(Sensor, dgtl12, killB, sensorTouch)
#pragma config(Sensor, I2C_1, , sensorQuadEncoderOnI2CPort, , AutoAssign )
#pragma config(Sensor, I2C_2, , sensorQuadEncoderOnI2CPort, , AutoAssign )
#pragma config(Sensor, I2C_3, , sensorQuadEncoderOnI2CPort, , AutoAssign )
#pragma config(Motor, port2, rmotor, tmotorVex393_MC29, PIDControl, reversed, driveRight, encoderPort, I2C_1)
#pragma config(Motor, port3, lmotor, tmotorVex393_MC29, PIDControl, driveLeft, encoderPort, I2C_2)
#pragma config(Motor, port4, topmotor, tmotorVex393_MC29, openLoop, encoderPort, I2C_3)
#pragma config(Motor, port5, pmotor, tmotorVex393_MC29, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard !!*//
void StopAll(){
motor[rmotor] = 0;
motor[lmotor] = 0;
motor[topmotor] = 0;
motor[pmotor] = 0;
}
//Stops the program at the push of a button
task eStop(){
while (SensorValue(killB) == 0){
wait1Msec(10);
}
StopAll();
stopAllTasks();
}
task main()
{
startTask(eStop);
nMotorEncoder[rmotor] = 0;
nMotorEncoder[lmotor] = 0;
motor[rmotor] = 15;
motor[lmotor] = 15;
wait1Msec(20000);
motor[rmotor] = 0;
motor[lmotor] = 0;
StopAll();
}
Thank you,
Mark