64 lines
1.6 KiB
C++
64 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "chassis.h"
|
|
|
|
const float TARGET_SQ_DIST = pow(3.0, 2); // distance from setpoint that is ok (cm)
|
|
const float TARGET_RAD_ERR = 0.25; // angle from setpoint that is ok (rad)
|
|
|
|
const float LONGITUDINAL_kP = 3.0;
|
|
const float LATERAL_kP = 3.0 * DEG_TO_RAD;
|
|
|
|
class Robot
|
|
{
|
|
protected:
|
|
/**
|
|
* robotState is used to track the current task of the robot. You will add new states as
|
|
* the term progresses.
|
|
*/
|
|
enum ROBOT_STATE
|
|
{
|
|
ROBOT_IDLE,
|
|
ROBOT_DRIVE_TO_POINT,
|
|
ROBOT_CALIB_TURN,
|
|
ROBOT_CALIB_DRIVE,
|
|
};
|
|
ROBOT_STATE robotState = ROBOT_IDLE;
|
|
|
|
/* Define the chassis*/
|
|
Chassis chassis;
|
|
|
|
// For managing key presses
|
|
String keyString;
|
|
|
|
/**
|
|
* For tracking current pose and the destination.
|
|
*/
|
|
Pose currPose;
|
|
Pose destPose;
|
|
|
|
public:
|
|
Robot(void) {keyString.reserve(10);}
|
|
void InitializeRobot(void);
|
|
void RobotLoop(void);
|
|
|
|
protected:
|
|
/* State changes */
|
|
void EnterIdleState(void);
|
|
void EnterCalibTurn(void);
|
|
void EnterCalibDrive(void);
|
|
|
|
// /* Navigation methods.*/
|
|
void UpdatePose(const Pose& u);
|
|
void SetDestination(const Pose& destination);
|
|
void DriveToPoint(void);
|
|
void CalibTurn(void);
|
|
void CalibDrive(void);
|
|
bool CheckReachedDestination(void);
|
|
void HandleDestination(void);
|
|
|
|
// Square distance between current and target pose
|
|
float SquareDistance(void);
|
|
|
|
// minimum radians to transform current to setpoint
|
|
float RadError(float current, float setpoint);
|
|
};
|