// Copyright (c) FIRST and other WPILib contributors. // Open Source Software; you can modify and/or share it under the terms of // the WPILib BSD license file in the root directory of this 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{ std::numbers::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, 0, 1, 2, 3}; SwerveModule m_frontRight{3, 4, 4, 5, 6, 7}; SwerveModule m_backLeft{5, 6, 8, 9, 10, 11}; SwerveModule m_backRight{7, 8, 12, 13, 14, 15}; 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(), {m_frontLeft.GetPosition(), m_frontRight.GetPosition(), m_backLeft.GetPosition(), m_backRight.GetPosition()}}; };