1#ifndef TR_EMBEDDED_CHASSIS_SUBSYSTEM_H
2#define TR_EMBEDDED_CHASSIS_SUBSYSTEM_H
7#include "util/peripherals/encoder/MA4.h"
18#define CAN_BUS_TYPE CANHandler::CANBUS_1
19#define MOTOR_TYPE M3508
20#define M3508_POST_MAX_RPM 469
21#define INPUT_THRESHOLD 0.01
24#define SECONDS_PER_MINUTE 60
25#define TICKS_PER_ROTATION 8192.0
26#define WHEEL_DIAMETER_METERS 0.146
27#define WHEEL_TO_CHASSIS_CENTER_LX 0.21
28#define WHEEL_TO_CHASSIS_CENTER_LY 0.14
30#define MAX_BEYBLADE_SPEED 1800
31#define BEYBLADE_ACCELERATION 0.05
144 static float p_theory(
int LeftFrontPower,
int RightFrontPower,
int LeftBackPower,
int RightBackPower,
int LeftFrontRpm,
int RightFrontRpm,
int LeftBackRpm,
int RightBackRpm);
146 static float Bisection(
int LeftFrontPower,
int RightFrontPower,
int LeftBackPower,
int RightBackPower,
int LeftFrontRpm,
int RightFrontRpm,
int LeftBackRpm,
int RightBackRpm,
float chassisPowerLimit);
358 MA4 *encoder =
nullptr;
367 static double rpmToRadPerSecond(
double RPM);
368 static double radPerSecondToRPM(
double radPerSecond);
371 float chassis_radius;
382 int motorPIDtoPower(
MotorLocation location,
double speed, uint32_t dt);
Definition ChassisSubsystem.h:75
void periodic(IMU::EulerAngles *imuCurr=nullptr)
Definition ChassisSubsystem.cpp:507
double yawOdom
Definition ChassisSubsystem.h:329
PID pid_RF
Definition ChassisSubsystem.h:316
static float Bisection(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm, float chassisPowerLimit)
Definition ChassisSubsystem.cpp:187
DRIVE_MODE
Definition ChassisSubsystem.h:127
@ REVERSE_YAW_ORIENTED
Definition ChassisSubsystem.h:129
@ ODOM_ORIENTED
Definition ChassisSubsystem.h:131
@ ROBOT_ORIENTED
Definition ChassisSubsystem.h:130
@ YAW_ORIENTED
Definition ChassisSubsystem.h:128
void setBrakeMode(BrakeMode brakeMode)
Definition ChassisSubsystem.cpp:475
uint32_t lastPIDTime
Definition ChassisSubsystem.h:320
static double degreesToRadians(double degrees)
Definition ChassisSubsystem.cpp:518
void setOmniKinematicsLimits(double max_Vel, double max_vOmega)
Definition ChassisSubsystem.cpp:533
BrakeMode
Definition ChassisSubsystem.h:106
@ BRAKE
Definition ChassisSubsystem.h:107
@ COAST
Definition ChassisSubsystem.h:108
float setChassisSpeeds(ChassisSpeeds desiredChassisSpeeds_, DRIVE_MODE mode=ROBOT_ORIENTED)
Definition ChassisSubsystem.cpp:349
static double radiansToTicks(double radians)
Definition ChassisSubsystem.cpp:751
MotorLocation
Definition ChassisSubsystem.h:112
@ RIGHT_BACK
Definition ChassisSubsystem.h:116
@ RIGHT_FRONT
Definition ChassisSubsystem.h:114
@ LEFT_BACK
Definition ChassisSubsystem.h:115
@ LEFT_FRONT
Definition ChassisSubsystem.h:113
WheelSpeeds chassisSpeedsToWheelSpeeds(ChassisSpeeds chassisSpeeds)
Definition ChassisSubsystem.cpp:590
ChassisSpeeds rotateChassisSpeed(ChassisSpeeds speeds, double yawCurrent)
Definition ChassisSubsystem.cpp:418
void setWheelPower(WheelSpeeds wheelPower)
Definition ChassisSubsystem.cpp:336
float setWheelSpeeds(WheelSpeeds wheelSpeeds)
Definition ChassisSubsystem.cpp:226
static double ticksToRadians(double ticks)
Definition ChassisSubsystem.cpp:756
OmniKinematicsLimits m_OmniKinematicsLimits
Definition ChassisSubsystem.h:305
double prevVel
Definition ChassisSubsystem.h:324
int PEAK_POWER_SINGLE
Definition ChassisSubsystem.h:313
DJIMotor & getMotor(MotorLocation location)
Definition ChassisSubsystem.cpp:427
static float p_theory(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm)
Definition ChassisSubsystem.cpp:164
PID pid_LF
Definition ChassisSubsystem.h:315
void setSpeedFeedforward(MotorLocation location, double FF)
Definition ChassisSubsystem.cpp:455
void setSpeedIntegralCap(MotorLocation location, double cap)
Definition ChassisSubsystem.cpp:450
WheelSpeeds desiredWheelSpeeds
Definition ChassisSubsystem.h:303
void setMotorSpeedPID(MotorLocation location, float kP, float kI, float kD)
Definition ChassisSubsystem.cpp:445
SPEED_UNIT
Definition ChassisSubsystem.h:120
@ RPM
Definition ChassisSubsystem.h:122
@ METER_PER_SECOND
Definition ChassisSubsystem.h:123
@ RAD_PER_SECOND
Definition ChassisSubsystem.h:121
int getHeadingDegrees() const
Definition ChassisSubsystem.cpp:528
void initializeImu()
Definition ChassisSubsystem.cpp:480
double getMotorSpeed(MotorLocation location, SPEED_UNIT unit)
Definition ChassisSubsystem.cpp:485
void updateYawPhaseFromEncoder()
Definition ChassisSubsystem.cpp:738
bool setOdomReference()
Definition ChassisSubsystem.cpp:677
static float limitAcceleration(float desiredRPM, float previousRPM, int power)
Definition ChassisSubsystem.cpp:59
float previousRPM[4]
Definition ChassisSubsystem.h:140
ChassisSpeeds getChassisSpeeds() const
Definition ChassisSubsystem.cpp:344
int PEAK_POWER_ALL
Definition ChassisSubsystem.h:312
void readImu()
Definition ChassisSubsystem.cpp:502
float power_limit
Definition ChassisSubsystem.h:148
HOLONOMIC_MODE
Definition ChassisSubsystem.h:135
@ MECANUM
Definition ChassisSubsystem.h:137
@ OMNI
Definition ChassisSubsystem.h:136
static double radiansToDegrees(double radians)
Definition ChassisSubsystem.cpp:523
ChassisSpeeds m_chassisSpeeds
Definition ChassisSubsystem.h:309
int testDataIndex
Definition ChassisSubsystem.h:332
ChassisSpeeds desiredChassisSpeeds
Definition ChassisSubsystem.h:302
WheelSpeeds normalizeWheelSpeeds(WheelSpeeds wheelSpeeds) const
Definition ChassisSubsystem.cpp:319
WheelSpeeds m_wheelSpeeds
Definition ChassisSubsystem.h:310
BrakeMode getBrakeMode()
Definition ChassisSubsystem.cpp:470
int testData[300][4]
Definition ChassisSubsystem.h:331
double imuOdom
Definition ChassisSubsystem.h:330
ChassisSpeeds wheelSpeedsToChassisSpeeds(WheelSpeeds wheelSpeeds)
Definition ChassisSubsystem.cpp:619
WheelSpeeds getWheelSpeeds() const
Definition ChassisSubsystem.cpp:54
PID pid_RB
Definition ChassisSubsystem.h:318
PID pid_LB
Definition ChassisSubsystem.h:317
Definition ChassisSubsystem.h:56
double vY
Definition ChassisSubsystem.h:58
double vX
Definition ChassisSubsystem.h:57
double vOmega
Definition ChassisSubsystem.h:59
Definition ChassisSubsystem.h:78
DJIMotor * yaw_motor
Definition ChassisSubsystem.h:87
int left_front_can_id
Definition ChassisSubsystem.h:79
const double radius
Definition ChassisSubsystem.h:84
MA4 * encoder
Definition ChassisSubsystem.h:90
BNO055 & imu
Definition ChassisSubsystem.h:89
int right_front_can_id
Definition ChassisSubsystem.h:80
const double speed_pid_ff_ks
Definition ChassisSubsystem.h:85
float yaw_initial_offset_ticks
Definition ChassisSubsystem.h:88
int right_back_can_id
Definition ChassisSubsystem.h:82
int left_back_can_id
Definition ChassisSubsystem.h:81
Definition ChassisSubsystem.h:63
double max_Vel
Definition ChassisSubsystem.h:64
double max_vOmega
Definition ChassisSubsystem.h:65
Definition ChassisSubsystem.h:35
double r1y
Definition ChassisSubsystem.h:36
double r1x
Definition ChassisSubsystem.h:36
double r3y
Definition ChassisSubsystem.h:36
double r2x
Definition ChassisSubsystem.h:36
double r2y
Definition ChassisSubsystem.h:36
double r4x
Definition ChassisSubsystem.h:36
double r3x
Definition ChassisSubsystem.h:36
double r4y
Definition ChassisSubsystem.h:36
Definition ChassisSubsystem.h:40
double RB
Definition ChassisSubsystem.h:44
void operator*=(double scalar)
Definition ChassisSubsystem.h:46
double RF
Definition ChassisSubsystem.h:42
double LF
Definition ChassisSubsystem.h:41
double LB
Definition ChassisSubsystem.h:43