Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.55 KB | None | 0 0
  1. #include <Commands/RunIntakeWheels.h>
  2. #include "GenerateAutonomousSequence.h"
  3. #include "AutonomousDrive.h"
  4. #include "AutonomousDriveForward.h"
  5. #include "AutonomousDriveWithEncoders.h"
  6. #include "AutonomousTurnWithGyro.h"
  7. #include "AutonomousWait.h"
  8. #include "OpenGripper.h"
  9. #include "CloseGripper.h"
  10. #include "PositionArm.h"
  11. #include "StartFieldPositioningSystem.h"
  12. #include "Utilities/CommandGroupBuilder.h"
  13. #include "Utilities/RobotNavigation.h"
  14. #include "Utilities/CommandGroupBuilder.h"
  15. #include "DriverStation.h"
  16. #include "ShiftGearbox.h"
  17.  
  18. namespace {
  19. bool ScoreOnScaleFirst(const FieldOrientation& orientation) {
  20. return orientation.GetStartingRobotPos() == Position::Center ||
  21. orientation.GetStartingRobotPos() == orientation.GetScalePos() ||
  22. orientation.GetScalePos() == orientation.GetSwitchPos();
  23. }
  24.  
  25. frc::CommandGroup* PickupCube(const RobotNavigation& navigator, const RobotNavigation::Position startPos) {
  26. return BuildSequential( {
  27. BuildParallel( {
  28. new AutonomousDrive(navigator.CreatePath(startPos, RobotNavigation::Position::PickupCubeAtSwitch)),
  29. new PositionArm(PositionArm::Position::Pickup),
  30. new OpenGripper(),
  31. new RunIntakeWheels()
  32. }),
  33. new CloseGripper()
  34. });
  35. }
  36.  
  37. frc::CommandGroup* ScoreCube(const RobotNavigation& navigator, const RobotNavigation::Position startPos, const RobotNavigation::Position finishPos, const PositionArm::Position armPos) {
  38. return BuildSequential({
  39. BuildParallel({
  40. new AutonomousDrive(navigator.CreatePath(startPos, finishPos)),
  41. BuildSequential({ new CloseGripper(), new PositionArm(armPos) })
  42. }),
  43. new OpenGripper()
  44. });
  45. }
  46. }
  47.  
  48. frc::CommandGroup* GenerateAutonomousSequence() {
  49. frc::CommandGroup* const sequence = new frc::CommandGroup;
  50. // We always start the FPS
  51. //sequence->AddSequential(new StartFieldPositioningSystem());
  52. const auto& ds = DriverStation::GetInstance();
  53. const auto& message = ds.GetGameSpecificMessage();
  54. const FieldOrientation orientation(message);
  55. const RobotNavigation navigator(orientation);
  56. AutoTarget target;
  57. StartingPos pos;
  58. //Get target and pos from SmartDashboard chooser
  59. sequence->AddSequential(new CloseGripper());
  60. if (orientation.GetStartingRobotPos() == Position::Center) {
  61. //Score on switch from center
  62. } else if (orientation.GetStartingRobotPos() == Position::Left) {
  63. if (target == AutoTarget::Switch) {
  64. if (orientation.GetSwitchPos() == Position::Left) {
  65. //Score on left switch from left
  66. sequence->AddSequential(new PositionArm(PositionArm::Position::Switch));
  67. sequence->AddSequential(new AutonomousDriveForward(4000, -0.8));
  68. sequence->AddSequential(new AutonomousWait(500));
  69. if (orientation.GetStartingRobotPos() == Position::Left && orientation.GetStartingRobotPos() == orientation.GetSwitchPos())
  70. sequence->AddSequential(new OpenGripper());
  71. } else if (orientation.GetStartingRobotPos() == Position::Right) {
  72. //Score on right switch from left
  73. //Not attempting
  74. }
  75. } else if (target == AutoTarget::Scale) {
  76. if (orientation.GetSwitchPos() == Position::Left) {
  77. //Score on left scale from left
  78. //Might be wrong
  79. /*sequence->AddSequential(new AutonomousDriveWithEncoders(3.5, 0.8));
  80. sequence->AddSequential(new AutonomousTurnWithGyro(-20, 0.6));
  81. sequence->AddSequential(new PositionArm(PositionArm::Position::ScaleFront));
  82. sequence->AddSequential(new AutonomousDriveWithEncoders(3.5, 0.8));*/
  83. sequence->AddSequential(new ShiftGearbox(ShiftGearbox::Gear::High));
  84. sequence->AddSequential(new PositionArm(PositionArm::Position::ScaleFront));
  85. sequence->AddSequential(new AutonomousDriveWithEncoders(4.2, 0.6));
  86. sequence->AddSequential(new AutonomousTurnWithGyro(-16, 0.4));
  87. sequence->AddSequential(new AutonomousDriveWithEncoders(2.5, 0.6));
  88. sequence->AddSequential(new AutonomousWait(500));
  89. sequence->AddSequential(new OpenGripper());
  90. sequence->AddSequential(new AutonomousWait(500));
  91. sequence->AddSequential(new AutonomousDriveWithEncoders(-1, 0.6));
  92. sequence->AddSequential(new CloseGripper());
  93. sequence->AddSequential(new PositionArm(PositionArm::Position::Retracted));
  94. sequence->AddSequential(new AutonomousWait(2000));
  95. sequence->AddSequential(new ShiftGearbox(ShiftGearbox::Gear::Low));
  96. } else if (orientation.GetStartingRobotPos() == Position::Right) {
  97. //Score on right scale from left
  98. //Might be wrong
  99. sequence->AddSequential(new ShiftGearbox(ShiftGearbox::Gear::High));
  100. sequence->AddSequential(new AutonomousDriveWithEncoders(5.57, 1));
  101. sequence->AddSequential(new AutonomousTurnWithGyro(-90, 0.8));
  102. sequence->AddSequential(new PositionArm(PositionArm::Position::ScaleFront));
  103. sequence->AddSequential(new AutonomousDriveWithEncoders(5.2, 1));
  104. sequence->AddSequential(new AutonomousTurnWithGyro(90, 0.8));
  105. sequence->AddSequential(new AutonomousDriveWithEncoders(1.16, 1));
  106. sequence->AddSequential(new ShiftGearbox(ShiftGearbox::Gear::Low));
  107. }
  108. }
  109. } else if (orientation.GetStartingRobotPos() == Position::Right) {
  110. if (target == AutoTarget::Switch) {
  111. if (orientation.GetSwitchPos() == Position::Left) {
  112. //Score on left switch from right
  113. //Not attempting
  114. } else if (orientation.GetSwitchPos() == Position::Right) {
  115. //Score on right switch from right
  116. sequence->AddSequential(new PositionArm(PositionArm::Position::Switch));
  117. sequence->AddSequential(new AutonomousDriveForward(4000, -0.8));
  118. sequence->AddSequential(new AutonomousWait(500));
  119. if (orientation.GetStartingRobotPos() == Position::Right && orientation.GetStartingRobotPos() == orientation.GetSwitchPos()) {
  120. sequence->AddSequential(new OpenGripper());
  121. }
  122. }
  123. } else if (target == AutoTarget::Scale) {
  124. if (orientation.GetSwitchPos() == Position::Left) {
  125. //Score on left scale from right
  126. } else if (orientation.GetSwitchPos() == Position::Right) {
  127. //Score on right scale from right
  128. sequence->AddSequential(new CloseGripper());
  129. sequence->AddSequential(new ShiftGearbox(ShiftGearbox::Gear::High));
  130. sequence->AddSequential(new PositionArm(PositionArm::Position::ScaleFront));
  131. sequence->AddSequential(new AutonomousDriveWithEncoders(3, 0.6));
  132. if (orientation.GetStartingRobotPos() == Position::Right && orientation.GetStartingRobotPos() == orientation.GetScalePos()) {
  133. sequence->AddSequential(new AutonomousTurnWithGyro(20, 0.4));
  134. sequence->AddSequential(new AutonomousDriveWithEncoders(3.2, 0.6));
  135. sequence->AddSequential(new AutonomousWait(500));
  136. sequence->AddSequential(new OpenGripper());
  137. sequence->AddSequential(new AutonomousWait(500));
  138. sequence->AddSequential(new AutonomousDriveWithEncoders(-1, 0.6));
  139. sequence->AddSequential(new CloseGripper());
  140. }
  141. sequence->AddSequential(new PositionArm(PositionArm::Position::Retracted));
  142. sequence->AddSequential(new AutonomousWait(1000));
  143. sequence->AddSequential(new ShiftGearbox(ShiftGearbox::Gear::Low));
  144. }
  145. }
  146. }
  147.  
  148.  
  149. // sequence->AddSequential(new AutonomousWait(2000));
  150. // sequence->AddSequential(new PositionArm(PositionArm::Position::Switch));
  151. // sequence->AddSequential(new AutonomousDriveForward(4000, -0.8));
  152.  
  153. //if ((orientation.GetStartingRobotPos() == Position::Left && orientation.GetStartingRobotPos() == orientation.GetSwitchPos()) || (orientation.GetStartingRobotPos() == Position::Center && Position::Right == orientation.GetSwitchPos())) {
  154. //}
  155. return sequence;
  156.  
  157. //useful stuff for later
  158. /*if (true || !orientation.IsInitialized()) {
  159. sequence->AddSequential(new CloseGripper());
  160. sequence->AddSequential(new AutonomousDrive(RobotNavigation::CreateProfile(2, 0, 0, 0)));
  161. return sequence;
  162. }
  163.  
  164. if (ScoreOnScaleFirst(orientation)) {
  165. sequence->AddSequential(ScoreCube(navigator, RobotNavigation::Position::StartingPos, RobotNavigation::Position::ScoreOnScale, PositionArm::Position::ScaleRear));
  166. sequence->AddSequential(PickupCube(navigator, RobotNavigation::Position::ScoreOnScale));
  167. sequence->AddSequential(ScoreCube(navigator, RobotNavigation::Position::PickupCubeAtSwitch, RobotNavigation::Position::ScoreOnSwitch, PositionArm::Position::Switch));
  168. } else {
  169. sequence->AddSequential(ScoreCube(navigator, RobotNavigation::Position::StartingPos, RobotNavigation::Position::ScoreOnSwitch, PositionArm::Position::Switch));
  170. sequence->AddSequential(PickupCube(navigator, RobotNavigation::Position::ScoreOnSwitch));
  171. sequence->AddSequential(ScoreCube(navigator, RobotNavigation::Position::PickupCubeAtSwitch, RobotNavigation::Position::ScoreOnScale, PositionArm::Position::ScaleRear));
  172. }
  173.  
  174. return sequence;*/
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement