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"
5#include "../util/peripherals/imu/BNO055.h"
6
7#include <motor/DJIMotor.h>
11// #include <subsystems/ChassisKalman.h>
12// #include <algorithms/WheelKalman.h>
13#include <algorithms/Pose2D.h>
14#include <algorithms/PID.h>
15// #include <algorithms/WheelSpeeds.h>
16// #include <algorithms/ChassisSpeeds.h>
17#include "algorithms/eigen-3.4.0/Eigen/QR"
18
19#define CAN_BUS_TYPE CANHandler::CANBUS_1
20#define MOTOR_TYPE M3508
21#define M3508_POST_MAX_RPM 469
22#define INPUT_THRESHOLD 0.01
23
24#define I2C_SDA PB_7
25#define I2C_SCL PB_8
26#define IMU_RESET PA_8
27
28#define PI 3.14159265
29#define SECONDS_PER_MINUTE 60
30#define TICKS_PER_ROTATION 8192.0
31#define WHEEL_DIAMETER_METERS 0.146
32
33#define MAX_BEYBLADE_SPEED 1800
34#define BEYBLADE_ACCELERATION 0.05
35#define MAX_VEL 2.92
36
38{
39 double r1x, r1y, r2x, r2y, r3x, r3y, r4x, r4y;
40};
41
43{
44 double LF;
45 double RF;
46 double LB;
47 double RB;
48
49 void operator*=(double scalar)
50 {
51 LF *= scalar;
52 RF *= scalar;
53 LB *= scalar;
54 RB *= scalar;
55 }
56
57 char *to_string()
58 {
59 char buffer[56];
60 sprintf(buffer, "LF: %4.2f RF: %4.2f LB: %4.2f RB: %4.2f\0", LF, RF, LB, RB);
61 return buffer;
62 }
63};
64
66{
67 double vX;
68 double vY;
69 double vOmega;
70};
71
73{
74 double max_Vel;
75 double max_vOmega;
76};
77
85{
86public:
94 ChassisSubsystem(short lfId, short rfId, short lbId, short rbId, BNO055 &imu, double radius);
95
100 {
102 COAST
103 };
104
112
119
126
127 float previousRPM[4] = {0, 0, 0, 0};
128
129 static float limitAcceleration(float desiredRPM, float previousRPM, int power);
130
131 static float p_theory(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm);
132
133 static float Bisection(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm, float chassisPowerLimit);
134
136
142
147 float setWheelSpeeds(WheelSpeeds wheelSpeeds);
148
154
159 void setWheelPower(WheelSpeeds wheelPower);
160
166
172 float setChassisSpeeds(ChassisSpeeds desiredChassisSpeeds_, DRIVE_MODE mode = ROBOT_ORIENTED);
173
180 ChassisSpeeds rotateChassisSpeed(ChassisSpeeds speeds, double yawCurrent);
181
189
197 void setMotorSpeedPID(MotorLocation location, float kP, float kI, float kD);
198
204 void setSpeedIntegralCap(MotorLocation location, double cap);
205
211 void setSpeedFeedforward(MotorLocation location, double FF);
212
217 void setSpeedFF_Ks(double Ks);
218
225
231 void setBrakeMode(BrakeMode brakeMode);
232
236 void initializeImu();
237
241 void periodic();
242
248 static double radiansToDegrees(double radians);
249
255 static double degreesToRadians(double degrees);
256
261 int getHeadingDegrees() const;
262
268
276 double getMotorSpeed(MotorLocation location, SPEED_UNIT unit);
277
284 void setOmniKinematicsLimits(double max_Vel, double max_vOmega);
285
289 void readImu();
290
299 void setYawReference(DJIMotor *motor, double initial_offset_ticks);
300
303
307 char *MatrixtoString(Eigen::MatrixXd mat);
308
311
314
319
320 uint32_t lastPIDTime = 0;
321
322 // int8_t isInverted[4];
323
324 double prevVel;
325
329 double yawPhase;
330 int testData[300][4];
332
333 static double radiansToTicks(double radians);
334 static double ticksToRadians(double ticks);
335
336private:
337 DJIMotor LF, RF, LB, RB;
338 DJIMotor *yaw = 0;
339 // double yawPhase;
340 BrakeMode brakeMode;
341
342 // double beybladeSpeed;
343 // bool beybladeIncreasing;
344 BNO055 imu;
346
347 static double rpmToRadPerSecond(double RPM);
348 static double radPerSecondToRPM(double radPerSecond);
349
350 OmniKinematics m_OmniKinematics;
351 float chassis_radius;
352 void setOmniKinematics(double radius);
353 // Eigen::MatrixXd wheelSpeedsToChassisSpeeds(WheelSpeeds wheelSpeeds);
354
355 double FF_Ks;
356
357 void setMotorPower(MotorLocation location, double power);
358 void setMotorSpeedRPM(MotorLocation location, double speed);
359 // void setMotorSpeedTicksPerSecond(int index, double speed);
360
361 double getMotorSpeedRPM(MotorLocation location);
362 int motorPIDtoPower(MotorLocation location, double speed, uint32_t dt);
363
364 // ChassisKalman chassisKalman;
365 double testAngle;
366 int lastTimeMs;
367
368 short lfId;
369 short rfId;
370 short lbId;
371 short rbId;
372};
373
374#endif // TR_EMBEDDED_CHASSIS_SUBSYSTEM_H
MatrixXf mat
Definition Tutorial_AdvancedInitialization_CommaTemporary.cpp:1
Definition BNO055.h:141
Definition ChassisSubsystem.h:85
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:189
DRIVE_MODE
Definition ChassisSubsystem.h:121
@ REVERSE_YAW_ORIENTED
Definition ChassisSubsystem.h:123
@ ROBOT_ORIENTED
Definition ChassisSubsystem.h:124
@ YAW_ORIENTED
Definition ChassisSubsystem.h:122
void setBrakeMode(BrakeMode brakeMode)
Definition ChassisSubsystem.cpp:435
uint32_t lastPIDTime
Definition ChassisSubsystem.h:320
static double degreesToRadians(double degrees)
Definition ChassisSubsystem.cpp:471
void setOmniKinematicsLimits(double max_Vel, double max_vOmega)
Definition ChassisSubsystem.cpp:486
BrakeMode
Definition ChassisSubsystem.h:100
@ BRAKE
Definition ChassisSubsystem.h:101
@ COAST
Definition ChassisSubsystem.h:102
float setChassisSpeeds(ChassisSpeeds desiredChassisSpeeds_, DRIVE_MODE mode=ROBOT_ORIENTED)
Definition ChassisSubsystem.cpp:347
static double radiansToTicks(double radians)
Definition ChassisSubsystem.cpp:636
MotorLocation
Definition ChassisSubsystem.h:106
@ RIGHT_BACK
Definition ChassisSubsystem.h:110
@ RIGHT_FRONT
Definition ChassisSubsystem.h:108
@ LEFT_BACK
Definition ChassisSubsystem.h:109
@ LEFT_FRONT
Definition ChassisSubsystem.h:107
WheelSpeeds chassisSpeedsToWheelSpeeds(ChassisSpeeds chassisSpeeds)
Definition ChassisSubsystem.cpp:535
ChassisSpeeds rotateChassisSpeed(ChassisSpeeds speeds, double yawCurrent)
Definition ChassisSubsystem.cpp:377
void setWheelPower(WheelSpeeds wheelPower)
Definition ChassisSubsystem.cpp:334
float setWheelSpeeds(WheelSpeeds wheelSpeeds)
Definition ChassisSubsystem.cpp:228
static double ticksToRadians(double ticks)
Definition ChassisSubsystem.cpp:641
OmniKinematicsLimits m_OmniKinematicsLimits
Definition ChassisSubsystem.h:304
double prevVel
Definition ChassisSubsystem.h:324
int PEAK_POWER_SINGLE
Definition ChassisSubsystem.h:313
DJIMotor & getMotor(MotorLocation location)
Definition ChassisSubsystem.cpp:386
static float p_theory(int LeftFrontPower, int RightFrontPower, int LeftBackPower, int RightBackPower, int LeftFrontRpm, int RightFrontRpm, int LeftBackRpm, int RightBackRpm)
Definition ChassisSubsystem.cpp:166
PID pid_LF
Definition ChassisSubsystem.h:315
void setSpeedFeedforward(MotorLocation location, double FF)
Definition ChassisSubsystem.cpp:411
void setSpeedIntegralCap(MotorLocation location, double cap)
Definition ChassisSubsystem.cpp:406
WheelSpeeds desiredWheelSpeeds
Definition ChassisSubsystem.h:302
void setMotorSpeedPID(MotorLocation location, float kP, float kI, float kD)
Definition ChassisSubsystem.cpp:401
SPEED_UNIT
Definition ChassisSubsystem.h:114
@ RPM
Definition ChassisSubsystem.h:116
@ METER_PER_SECOND
Definition ChassisSubsystem.h:117
@ RAD_PER_SECOND
Definition ChassisSubsystem.h:115
int getHeadingDegrees() const
Definition ChassisSubsystem.cpp:481
void initializeImu()
Definition ChassisSubsystem.cpp:440
void periodic()
Definition ChassisSubsystem.cpp:462
double getMotorSpeed(MotorLocation location, SPEED_UNIT unit)
Definition ChassisSubsystem.cpp:445
static float limitAcceleration(float desiredRPM, float previousRPM, int power)
Definition ChassisSubsystem.cpp:61
float previousRPM[4]
Definition ChassisSubsystem.h:127
ChassisSpeeds getChassisSpeeds() const
Definition ChassisSubsystem.cpp:342
int PEAK_POWER_ALL
Definition ChassisSubsystem.h:312
void setSpeedFF_Ks(double Ks)
Definition ChassisSubsystem.cpp:425
void readImu()
Definition ChassisSubsystem.cpp:457
double yawPhase
Definition ChassisSubsystem.h:329
float power_limit
Definition ChassisSubsystem.h:135
static double radiansToDegrees(double radians)
Definition ChassisSubsystem.cpp:476
ChassisSpeeds m_chassisSpeeds
Definition ChassisSubsystem.h:309
int testDataIndex
Definition ChassisSubsystem.h:331
void setYawReference(DJIMotor *motor, double initial_offset_ticks)
Definition ChassisSubsystem.cpp:630
ChassisSpeeds desiredChassisSpeeds
Definition ChassisSubsystem.h:301
WheelSpeeds normalizeWheelSpeeds(WheelSpeeds wheelSpeeds) const
Definition ChassisSubsystem.cpp:317
WheelSpeeds m_wheelSpeeds
Definition ChassisSubsystem.h:310
BrakeMode getBrakeMode()
Definition ChassisSubsystem.cpp:430
int testData[300][4]
Definition ChassisSubsystem.h:330
char * MatrixtoString(Eigen::MatrixXd mat)
Definition ChassisSubsystem.cpp:573
ChassisSpeeds wheelSpeedsToChassisSpeeds(WheelSpeeds wheelSpeeds)
Definition ChassisSubsystem.cpp:564
WheelSpeeds getWheelSpeeds() const
Definition ChassisSubsystem.cpp:56
PID pid_RB
Definition ChassisSubsystem.h:318
PID pid_LB
Definition ChassisSubsystem.h:317
Definition DJIMotor.h:54
Definition PID.h:138
Definition Pose2D.h:13
BNO055 imu(i2c, PA_8, MODE_NDOF)
Definition BNO055.h:88
Definition ChassisSubsystem.h:66
double vY
Definition ChassisSubsystem.h:68
double vX
Definition ChassisSubsystem.h:67
double vOmega
Definition ChassisSubsystem.h:69
Definition ChassisSubsystem.h:73
double max_Vel
Definition ChassisSubsystem.h:74
double max_vOmega
Definition ChassisSubsystem.h:75
Definition ChassisSubsystem.h:38
double r1y
Definition ChassisSubsystem.h:39
double r1x
Definition ChassisSubsystem.h:39
double r3y
Definition ChassisSubsystem.h:39
double r2x
Definition ChassisSubsystem.h:39
double r2y
Definition ChassisSubsystem.h:39
double r4x
Definition ChassisSubsystem.h:39
double r3x
Definition ChassisSubsystem.h:39
double r4y
Definition ChassisSubsystem.h:39
Definition ChassisSubsystem.h:43
double RB
Definition ChassisSubsystem.h:47
void operator*=(double scalar)
Definition ChassisSubsystem.h:49
char * to_string()
Definition ChassisSubsystem.h:57
double RF
Definition ChassisSubsystem.h:45
double LF
Definition ChassisSubsystem.h:44
double LB
Definition ChassisSubsystem.h:46