blob: 49db14f9f4e8713c9198bf4427da6061f6558d8b [file] [log] [blame]
#include "y2023/control_loops/drivetrain/drivetrain_base.h"
#include <chrono>
#include "frc971/control_loops/drivetrain/drivetrain_config.h"
#include "frc971/control_loops/state_feedback_loop.h"
#include "y2023/control_loops/drivetrain/drivetrain_dog_motor_plant.h"
#include "y2023/control_loops/drivetrain/hybrid_velocity_drivetrain.h"
#include "y2023/control_loops/drivetrain/kalman_drivetrain_motor_plant.h"
#include "y2023/control_loops/drivetrain/polydrivetrain_dog_motor_plant.h"
using ::frc971::control_loops::drivetrain::DownEstimatorConfigT;
using ::frc971::control_loops::drivetrain::DrivetrainConfig;
using ::frc971::control_loops::drivetrain::LineFollowConfig;
namespace chrono = ::std::chrono;
namespace y2023::control_loops::drivetrain {
using ::frc971::constants::ShifterHallEffect;
const ShifterHallEffect kThreeStateDriveShifter{0.0, 0.0, 0.25, 0.75};
const DrivetrainConfig<double> &GetDrivetrainConfig() {
// Yaw of the IMU relative to the robot frame.
static constexpr double kImuYaw = 0.0;
static DrivetrainConfig<double> kDrivetrainConfig{
::frc971::control_loops::drivetrain::ShifterType::kSimpleShifter,
::frc971::control_loops::drivetrain::LoopType::kClosedLoop,
::frc971::control_loops::drivetrain::GyroType::kSpartanGyro,
::frc971::control_loops::drivetrain::ImuType::kImuFlippedX,
drivetrain::MakeDrivetrainLoop,
drivetrain::MakeVelocityDrivetrainLoop,
drivetrain::MakeKFDrivetrainLoop,
drivetrain::MakeHybridVelocityDrivetrainLoop,
chrono::duration_cast<chrono::nanoseconds>(
chrono::duration<double>(drivetrain::kDt)),
drivetrain::kRobotRadius,
drivetrain::kWheelRadius,
drivetrain::kV,
drivetrain::kHighGearRatio,
drivetrain::kLowGearRatio,
drivetrain::kJ,
drivetrain::kMass,
kThreeStateDriveShifter,
kThreeStateDriveShifter,
true /* default_high_gear */,
0 /* down_offset if using constants use
constants::GetValues().down_error */
,
0.7 /* wheel_non_linearity */,
1.2 /* quickturn_wheel_multiplier */,
1.2 /* wheel_multiplier */,
true /*pistol_grip_shift_enables_line_follow*/,
(Eigen::Matrix<double, 3, 3>() << std::cos(kImuYaw), -std::sin(kImuYaw),
0.0, std::sin(kImuYaw), std::cos(kImuYaw), 0.0, 0.0, 0.0, 1.0)
.finished(),
false /*is_simulated*/,
DownEstimatorConfigT{{}, 0.015, 1000},
LineFollowConfig{
.Q = Eigen::Matrix3d((::Eigen::DiagonalMatrix<double, 3>().diagonal()
<< 1.0 / ::std::pow(0.1, 2),
1.0 / ::std::pow(1.0, 2),
1.0 / ::std::pow(1.0, 2))
.finished()
.asDiagonal()),
.R = Eigen::Matrix2d((::Eigen::DiagonalMatrix<double, 2>().diagonal()
<< 10.0 / ::std::pow(12.0, 2),
10.0 / ::std::pow(12.0, 2))
.finished()
.asDiagonal()),
.max_controllable_offset = 0.5},
frc971::control_loops::drivetrain::PistolTopButtonUse::kNone,
frc971::control_loops::drivetrain::PistolSecondButtonUse::kTurn1,
frc971::control_loops::drivetrain::PistolBottomButtonUse::
kControlLoopDriving,
};
return kDrivetrainConfig;
};
} // namespace y2023::control_loops::drivetrain