/*----------------------------------------------------------------------------*/ /* Copyright (c) 2019-2020 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. */ /*----------------------------------------------------------------------------*/ #pragma once #include #include #include #include #include #include "SwerveModule.h" /** * Represents a swerve drive style drivetrain. */ class Drivetrain { public: Drivetrain() { m_gyro.Reset(); } void Drive(units::meters_per_second_t xSpeed, units::meters_per_second_t ySpeed, units::radians_per_second_t rot, bool fieldRelative); void UpdateOdometry(); static constexpr units::meters_per_second_t kMaxSpeed = 3.0_mps; // 3 meters per second static constexpr units::radians_per_second_t kMaxAngularSpeed{ wpi::math::pi}; // 1/2 rotation per second private: frc::Translation2d m_frontLeftLocation{+0.381_m, +0.381_m}; frc::Translation2d m_frontRightLocation{+0.381_m, -0.381_m}; frc::Translation2d m_backLeftLocation{-0.381_m, +0.381_m}; frc::Translation2d m_backRightLocation{-0.381_m, -0.381_m}; SwerveModule m_frontLeft{1, 2}; SwerveModule m_frontRight{2, 3}; SwerveModule m_backLeft{5, 6}; SwerveModule m_backRight{7, 8}; frc::AnalogGyro m_gyro{0}; frc::SwerveDriveKinematics<4> m_kinematics{ m_frontLeftLocation, m_frontRightLocation, m_backLeftLocation, m_backRightLocation}; frc::SwerveDriveOdometry<4> m_odometry{m_kinematics, m_gyro.GetRotation2d()}; };