Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*----------------------------------------------------------------------------*/
- /* Copyright (c) 2019 FIRST. All Rights Reserved. */
- /* Open Source Software - may be modified and shared by FRC teams. The code */
- /* must be accompanied by the FIRST BSD license file in the root directory of */
- /* the project. */
- /*----------------------------------------------------------------------------*/
- #include "RobotContainer.h"
- #include "subsystems/DriveSubsystem.h"
- #include <units/units.h>
- #include <frc/controller/PIDController.h>
- #include <frc/geometry/Translation2d.h>
- #include <frc/shuffleboard/Shuffleboard.h>
- #include <frc/trajectory/Trajectory.h>
- #include <frc/trajectory/TrajectoryGenerator.h>
- #include <frc2/command/InstantCommand.h>
- #include <frc2/command/SequentialCommandGroup.h>
- #include <frc2/command/SwerveFollowerCommand.h>
- #include <frc2/command/button/JoystickButton.h>
- #include "Constants.h"
- using namespace DriveConstants;
- RobotContainer::RobotContainer() {
- // Initialize all of your commands and subsystems here
- // Configure the button bindings
- ConfigureButtonBindings();
- // Set up default drive command
- m_drive.SetDefaultCommand(frc2::RunCommand(
- [this] {
- m_drive.Drive(units::meters_per_second_t(m_driverController.GetY(frc::GenericHID::kLeftHand)),
- units::meters_per_second_t(m_driverController.GetY(frc::GenericHID::kRightHand)),
- units::radians_per_second_t(m_driverController.GetX(frc::GenericHID::kLeftHand)),
- false);
- },
- {&m_drive}));
- }
- void RobotContainer::ConfigureButtonBindings() {}
- frc2::Command* RobotContainer::GetAutonomousCommand() {
- // Set up config for trajectory
- frc::TrajectoryConfig config(AutoConstants::kMaxSpeed,
- AutoConstants::kMaxAcceleration);
- // Add kinematics to ensure max speed is actually obeyed
- config.SetKinematics(m_drive.kDriveKinematics);
- // An example trajectory to follow. All units in meters.
- auto exampleTrajectory = frc::TrajectoryGenerator::GenerateTrajectory(
- // Start at the origin facing the +X direction
- frc::Pose2d(0_m, 0_m, frc::Rotation2d(0_deg)),
- // Pass through these two interior waypoints, making an 's' curve path
- {frc::Translation2d(1_m, 1_m), frc::Translation2d(2_m, -1_m)},
- // End 3 meters straight ahead of where we started, facing forward
- frc::Pose2d(3_m, 0_m, frc::Rotation2d(0_deg)),
- // Pass the config
- config);
- frc2::SwerveFollowerCommand<4> swerveFollowerCommand(
- exampleTrajectory, [this]() { return m_drive.GetPose(); },
- m_drive.kDriveKinematics,
- frc2::PIDController(AutoConstants::kPXController, 0, 0),
- frc2::PIDController(AutoConstants::kPYController, 0, 0),
- frc::ProfiledPIDController(AutoConstants::kPThetaController, 0, 0,
- AutoConstants::kThetaControllerConstraints),
- [this](auto moduleStates) { m_drive.SetModuleStates(moduleStates); },
- {&m_drive});
- // no auto
- return new frc2::SequentialCommandGroup(
- std::move(swerveFollowerCommand), std::move(swerveFollowerCommand),
- frc2::InstantCommand(
- [this]() {
- m_drive.Drive(units::meters_per_second_t(0),
- units::meters_per_second_t(0),
- units::radians_per_second_t(0), false);
- },
- {}));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement