TR-mbed 1.0
Loading...
Searching...
No Matches
ChassisSubsystem.h
Go to the documentation of this file.
1#ifndef TR_EMBEDDED_CHASSIS_SUBSYSTEM_H
2#define TR_EMBEDDED_CHASSIS_SUBSYSTEM_H
3
4#include "mbed.h"
6
10// #include <subsystems/ChassisKalman.h>
11// #include <algorithms/WheelKalman.h>
12#include <util/algorithms/PID.h>
13// #include <algorithms/WheelSpeeds.h>
14// #include <algorithms/ChassisSpeeds.h>
15
16#define CAN_BUS_TYPE CANHandler::CANBUS_1
17#define MOTOR_TYPE M3508
18#define M3508_POST_MAX_RPM 469
19#define INPUT_THRESHOLD 0.01
20
21#define PI 3.14159265
22#define SECONDS_PER_MINUTE 60
23#define TICKS_PER_ROTATION 8192.0
24#define WHEEL_DIAMETER_METERS 0.146
25
26#define MAX_BEYBLADE_SPEED 1800
27#define BEYBLADE_ACCELERATION 0.05
28#define MAX_VEL 2.92
29
31{
32 double r1x, r1y, r2x, r2y, r3x, r3y, r4x, r4y;
33};
34
36{
37 double LF;
38 double RF;
39 double LB;
40 double RB;
41
42 void operator*=(double scalar)
43 {
44 LF *= scalar;
45 RF *= scalar;
46 LB *= scalar;
47 RB *= scalar;
48 }
49};
50
52{
53 double vX;
54 double vY;
55 double vOmega;
56};
57
59{
60 double max_Vel;
61 double max_vOmega;
62};
63
71{
72public:
73
87
95 ChassisSubsystem(const Config &config);
96
101 {
103 COAST
104 };
105
113
120
128
129 float previousRPM[4] = {0, 0, 0, 0};
130
131 static float limitAcceleration(float desiredRPM, float previousRPM, int power);
132
133 static float p_theory(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm);
134
135 static float Bisection(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm, float chassisPowerLimit);
136
138
144
149 float setWheelSpeeds(WheelSpeeds wheelSpeeds);
150
156
161 void setWheelPower(WheelSpeeds wheelPower);
162
168
174 float setChassisSpeeds(ChassisSpeeds desiredChassisSpeeds_, DRIVE_MODE mode = ROBOT_ORIENTED);
175
182 ChassisSpeeds rotateChassisSpeed(ChassisSpeeds speeds, double yawCurrent);
183
191
199 void setMotorSpeedPID(MotorLocation location, float kP, float kI, float kD);
200
206 void setSpeedIntegralCap(MotorLocation location, double cap);
207
213 void setSpeedFeedforward(MotorLocation location, double FF);
214
215
222
228 void setBrakeMode(BrakeMode brakeMode);
229
233 void initializeImu();
234
238 void periodic(IMU::EulerAngles *imuCurr = nullptr);
239
245 static double radiansToDegrees(double radians);
246
252 static double degreesToRadians(double degrees);
253
258 int getHeadingDegrees() const;
259
260
268 double getMotorSpeed(MotorLocation location, SPEED_UNIT unit);
269
276 void setOmniKinematicsLimits(double max_Vel, double max_vOmega);
277
281 void readImu();
282
283
289 bool setOdomReference();
290
293
297
300
303
308
309 uint32_t lastPIDTime = 0;
310
311 // int8_t isInverted[4];
312
313 double prevVel;
314
318 double yawOdom;
319 double imuOdom;
320 int testData[300][4];
322
323 static double radiansToTicks(double radians);
324 static double ticksToRadians(double ticks);
325
326private:
327 DJIMotor LF, RF, LB, RB;
328 DJIMotor *yaw = 0;
329 double yawPhase;
330 BrakeMode brakeMode;
331
332 // double beybladeSpeed;
333 // bool beybladeIncreasing;
334 BNO055 &imu;
336
337 static double rpmToRadPerSecond(double RPM);
338 static double radPerSecondToRPM(double radPerSecond);
339
340 OmniKinematics m_OmniKinematics;
341 float chassis_radius;
342 void setOmniKinematics(double radius);
343 // Eigen::MatrixXd wheelSpeedsToChassisSpeeds(WheelSpeeds wheelSpeeds);
344
345 double FF_Ks;
346
347 void setMotorPower(MotorLocation location, double power);
348 void setMotorSpeedRPM(MotorLocation location, double speed);
349 // void setMotorSpeedTicksPerSecond(int index, double speed);
350
351 double getMotorSpeedRPM(MotorLocation location);
352 int motorPIDtoPower(MotorLocation location, double speed, uint32_t dt);
353
354 // ChassisKalman chassisKalman;
355 double testAngle;
356 int lastTimeMs;
357};
358
359#endif // TR_EMBEDDED_CHASSIS_SUBSYSTEM_H
Definition BNO055.h:142
Definition ChassisSubsystem.h:71
void periodic(IMU::EulerAngles *imuCurr=nullptr)
Definition ChassisSubsystem.cpp:474
double yawOdom
Definition ChassisSubsystem.h:318
PID pid_RF
Definition ChassisSubsystem.h:305
static float Bisection(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm, float chassisPowerLimit)
Definition ChassisSubsystem.cpp:185
DRIVE_MODE
Definition ChassisSubsystem.h:122
@ REVERSE_YAW_ORIENTED
Definition ChassisSubsystem.h:124
@ ODOM_ORIENTED
Definition ChassisSubsystem.h:126
@ ROBOT_ORIENTED
Definition ChassisSubsystem.h:125
@ YAW_ORIENTED
Definition ChassisSubsystem.h:123
void setBrakeMode(BrakeMode brakeMode)
Definition ChassisSubsystem.cpp:441
uint32_t lastPIDTime
Definition ChassisSubsystem.h:309
static double degreesToRadians(double degrees)
Definition ChassisSubsystem.cpp:485
void setOmniKinematicsLimits(double max_Vel, double max_vOmega)
Definition ChassisSubsystem.cpp:500
BrakeMode
Definition ChassisSubsystem.h:101
@ BRAKE
Definition ChassisSubsystem.h:102
@ COAST
Definition ChassisSubsystem.h:103
float setChassisSpeeds(ChassisSpeeds desiredChassisSpeeds_, DRIVE_MODE mode=ROBOT_ORIENTED)
Definition ChassisSubsystem.cpp:343
static double radiansToTicks(double radians)
Definition ChassisSubsystem.cpp:642
MotorLocation
Definition ChassisSubsystem.h:107
@ RIGHT_BACK
Definition ChassisSubsystem.h:111
@ RIGHT_FRONT
Definition ChassisSubsystem.h:109
@ LEFT_BACK
Definition ChassisSubsystem.h:110
@ LEFT_FRONT
Definition ChassisSubsystem.h:108
WheelSpeeds chassisSpeedsToWheelSpeeds(ChassisSpeeds chassisSpeeds)
Definition ChassisSubsystem.cpp:549
ChassisSpeeds rotateChassisSpeed(ChassisSpeeds speeds, double yawCurrent)
Definition ChassisSubsystem.cpp:384
void setWheelPower(WheelSpeeds wheelPower)
Definition ChassisSubsystem.cpp:330
float setWheelSpeeds(WheelSpeeds wheelSpeeds)
Definition ChassisSubsystem.cpp:224
static double ticksToRadians(double ticks)
Definition ChassisSubsystem.cpp:647
OmniKinematicsLimits m_OmniKinematicsLimits
Definition ChassisSubsystem.h:294
double prevVel
Definition ChassisSubsystem.h:313
int PEAK_POWER_SINGLE
Definition ChassisSubsystem.h:302
DJIMotor & getMotor(MotorLocation location)
Definition ChassisSubsystem.cpp:393
static float p_theory(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm)
Definition ChassisSubsystem.cpp:162
PID pid_LF
Definition ChassisSubsystem.h:304
void setSpeedFeedforward(MotorLocation location, double FF)
Definition ChassisSubsystem.cpp:421
void setSpeedIntegralCap(MotorLocation location, double cap)
Definition ChassisSubsystem.cpp:416
WheelSpeeds desiredWheelSpeeds
Definition ChassisSubsystem.h:292
void setMotorSpeedPID(MotorLocation location, float kP, float kI, float kD)
Definition ChassisSubsystem.cpp:411
SPEED_UNIT
Definition ChassisSubsystem.h:115
@ RPM
Definition ChassisSubsystem.h:117
@ METER_PER_SECOND
Definition ChassisSubsystem.h:118
@ RAD_PER_SECOND
Definition ChassisSubsystem.h:116
int getHeadingDegrees() const
Definition ChassisSubsystem.cpp:495
void initializeImu()
Definition ChassisSubsystem.cpp:446
double getMotorSpeed(MotorLocation location, SPEED_UNIT unit)
Definition ChassisSubsystem.cpp:451
bool setOdomReference()
Definition ChassisSubsystem.cpp:636
static float limitAcceleration(float desiredRPM, float previousRPM, int power)
Definition ChassisSubsystem.cpp:57
float previousRPM[4]
Definition ChassisSubsystem.h:129
ChassisSpeeds getChassisSpeeds() const
Definition ChassisSubsystem.cpp:338
int PEAK_POWER_ALL
Definition ChassisSubsystem.h:301
void readImu()
Definition ChassisSubsystem.cpp:469
float power_limit
Definition ChassisSubsystem.h:137
static double radiansToDegrees(double radians)
Definition ChassisSubsystem.cpp:490
ChassisSpeeds m_chassisSpeeds
Definition ChassisSubsystem.h:298
int testDataIndex
Definition ChassisSubsystem.h:321
ChassisSpeeds desiredChassisSpeeds
Definition ChassisSubsystem.h:291
WheelSpeeds normalizeWheelSpeeds(WheelSpeeds wheelSpeeds) const
Definition ChassisSubsystem.cpp:313
WheelSpeeds m_wheelSpeeds
Definition ChassisSubsystem.h:299
BrakeMode getBrakeMode()
Definition ChassisSubsystem.cpp:436
int testData[300][4]
Definition ChassisSubsystem.h:320
double imuOdom
Definition ChassisSubsystem.h:319
ChassisSpeeds wheelSpeedsToChassisSpeeds(WheelSpeeds wheelSpeeds)
Definition ChassisSubsystem.cpp:578
WheelSpeeds getWheelSpeeds() const
Definition ChassisSubsystem.cpp:52
PID pid_RB
Definition ChassisSubsystem.h:307
PID pid_LB
Definition ChassisSubsystem.h:306
Definition DJIMotor.h:47
Definition PID.h:138
Definition BNO055.h:89
Definition ChassisSubsystem.h:52
double vY
Definition ChassisSubsystem.h:54
double vX
Definition ChassisSubsystem.h:53
double vOmega
Definition ChassisSubsystem.h:55
Definition ChassisSubsystem.h:74
DJIMotor * yaw_motor
Definition ChassisSubsystem.h:83
int yaw_initial_offset_ticks
Definition ChassisSubsystem.h:84
int left_front_can_id
Definition ChassisSubsystem.h:75
const double radius
Definition ChassisSubsystem.h:80
BNO055 & imu
Definition ChassisSubsystem.h:85
int right_front_can_id
Definition ChassisSubsystem.h:76
const double speed_pid_ff_ks
Definition ChassisSubsystem.h:81
int right_back_can_id
Definition ChassisSubsystem.h:78
int left_back_can_id
Definition ChassisSubsystem.h:77
Definition IMU.h:8
Definition ChassisSubsystem.h:59
double max_Vel
Definition ChassisSubsystem.h:60
double max_vOmega
Definition ChassisSubsystem.h:61
Definition ChassisSubsystem.h:31
double r1y
Definition ChassisSubsystem.h:32
double r1x
Definition ChassisSubsystem.h:32
double r3y
Definition ChassisSubsystem.h:32
double r2x
Definition ChassisSubsystem.h:32
double r2y
Definition ChassisSubsystem.h:32
double r4x
Definition ChassisSubsystem.h:32
double r3x
Definition ChassisSubsystem.h:32
double r4y
Definition ChassisSubsystem.h:32
Definition ChassisSubsystem.h:36
double RB
Definition ChassisSubsystem.h:40
void operator*=(double scalar)
Definition ChassisSubsystem.h:42
double RF
Definition ChassisSubsystem.h:38
double LF
Definition ChassisSubsystem.h:37
double LB
Definition ChassisSubsystem.h:39