Advertisement
Guest User

Untitled

a guest
Feb 16th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. bool enableDrivePD = false;
  2. bool resetDriveSensors = false;
  3. double kP = 80;
  4. double kD = 250;
  5.  
  6. double turnkP = 0.2;
  7. double turnkD = 0.07;
  8.  
  9. double error;
  10. double prevError = 0;
  11. double derivative;
  12.  
  13. double turnError;
  14. double turnPrevError = 0;
  15. double turnDerivative;
  16.  
  17. double desiredTarget = 0;
  18. double desiredTurnValue = 0;
  19.  
  20. int drivePD() {
  21. while(1) {
  22. while(enableDrivePD) {
  23. if(resetDriveSensors) {
  24. resetDriveSensors = false;
  25. rightDt.resetRotation();
  26. leftDt.resetRotation();
  27. }
  28.  
  29. double leftMotorRotation = leftDtBack.rotation(rev);
  30. double rightMotorRotation = rightDtBack.rotation(rev);
  31. double averageRotation = (leftMotorRotation + rightMotorRotation) / 2;
  32.  
  33. error = desiredTarget - averageRotation;
  34. derivative = error - prevError;
  35.  
  36. double lateralMotorPower = (kP*error) + (kD*derivative);
  37. ///////////////////////
  38. ///////////////////////
  39. turnError = desiredTurnValue - iSensor.rotation(deg);
  40. turnDerivative = turnError - turnPrevError;
  41.  
  42. double turnMotorPower = (turnkP*turnError) + (turnkD*turnDerivative);
  43. ///////////////////////
  44. ///////////////////////
  45. // cout << "averageRotation: " << averageRotation << endl;
  46. // cout << "error: " << error << endl;
  47. // cout << "derivative: " << derivative << endl;
  48. // cout << "motorPower: " << lateralMotorPower << endl;
  49. cout << "iSensor: " << iSensor.rotation(deg) << endl;
  50. cout << "turnError: " << turnError << endl;
  51. cout << "turnDerivative: " << turnDerivative << endl;
  52. cout << "turnPower: " << turnMotorPower << endl;
  53. cout << "////" << endl;
  54. ///////////////////////
  55. ///////////////////////
  56. if(lateralMotorPower > 5) {
  57. lateralMotorPower = 5;
  58. } else if(lateralMotorPower < -5) {
  59. lateralMotorPower = -5;
  60. }
  61.  
  62. if(turnMotorPower > 5) {
  63. turnMotorPower = 5;
  64. } else if (turnMotorPower < -5) {
  65. turnMotorPower = -5;
  66. }
  67.  
  68. leftDt.spin(fwd, lateralMotorPower + turnMotorPower, volt);
  69. rightDt.spin(fwd, lateralMotorPower - turnMotorPower, volt);
  70.  
  71. prevError = error;
  72. this_thread::sleep_for(15);
  73. }
  74. this_thread::sleep_for(15);
  75. }
  76. return 1;
  77. }
  78.  
  79.  
  80. int main() {
  81. // Initializing Robot Configuration. DO NOT REMOVE!
  82. vexcodeInit();
  83.  
  84. iSensor.calibrate(2000);
  85. this_thread::sleep_for(2000);
  86. cout << "Done calibrating" << endl;
  87.  
  88. iSensor.setRotation(270, rotationUnits::deg);
  89. cout << "Rotation: " << iSensor.rotation() << endl;
  90. ///////////////////////
  91. ///////////////////////
  92. drivePDTask = vex::task(drivePD);
  93. enableDrivePD = true;
  94. resetDriveSensors = true;
  95. desiredTarget = inToRev(23.75);
  96. desiredTurnValue = 90;
  97. // this_thread::sleep_for(200);
  98.  
  99. // resetDriveSensors = true;
  100. // desiredTarget = inToRev(-23.75);
  101. // desiredTurnValue = -180;
  102.  
  103. while(1) {
  104. //Sleep task for short amount of time
  105. this_thread::sleep_for(10);
  106. }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement