RIT VEXU Core API
Loading...
Searching...
No Matches
tank_drive.h
1#pragma once
2
3#ifndef PI
4#define PI 3.141592654
5#endif
6
7#include "core/robot_specs.h"
8#include "core/subsystems/odometry/odometry_tank.h"
9#include "core/utils/command_structure/auto_command.h"
10#include "core/utils/controls/feedback_base.h"
11#include "core/utils/controls/pid.h"
12#include "core/utils/pure_pursuit.h"
13#include "vex.h"
14#include <vector>
15
16using namespace vex;
17
23class TankDrive {
24 public:
25 enum class BrakeType {
29 TurnOnly,
30 };
31
39 TankDrive(motor_group &left_motors, motor_group &right_motors, robot_specs_t &config, OdometryBase *odom = NULL);
40
41 AutoCommand *DriveToPointCmd(
42 Translation2d pt, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0
43 );
44 AutoCommand *DriveToPointCmd(
45 Feedback &fb, Translation2d pt, vex::directionType dir = vex::forward, double max_speed = 1.0,
46 double end_speed = 0.0
47 );
48
49 AutoCommand *DriveToPointCmd(
50 double x, double y, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0
51 );
52
53 AutoCommand *
54 DriveForwardCmd(double dist, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0);
55 AutoCommand *DriveForwardCmd(
56 Feedback &fb, double dist, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0
57 );
58
59 AutoCommand *TurnToHeadingCmd(double heading, double max_speed = 1.0, double end_speed = 0.0);
60 AutoCommand *TurnToHeadingCmd(Feedback &fb, double heading, double max_speed = 1.0, double end_speed = 0.0);
61
62 AutoCommand *TurnToPointCmd(
63 double x, double y, vex::directionType dir = vex::directionType::fwd, double max_speed = 1.0,
64 double end_speed = 0.0
65 );
66 AutoCommand *TurnToPointCmd(
67 Translation2d point, vex::directionType dir = vex::directionType::fwd, double max_speed = 1.0,
68 double end_speed = 0.0
69 );
70
71 AutoCommand *TurnDegreesCmd(double degrees, double max_speed = 1.0, double start_speed = 0.0);
72 AutoCommand *TurnDegreesCmd(Feedback &fb, double degrees, double max_speed = 1.0, double end_speed = 0.0);
73
74 AutoCommand *PurePursuitCmd(PurePursuit::Path path, directionType dir, double max_speed = 1, double end_speed = 0);
75 AutoCommand *PurePursuitCmd(
76 Feedback &feedback, PurePursuit::Path path, directionType dir, double max_speed = 1, double end_speed = 0
77 );
78 Condition *DriveStalledCondition(double stall_time);
79 AutoCommand *DriveTankCmd(double left, double right);
80
84 void stop();
85
90
101 void drive_tank(double left, double right, int power = 1, BrakeType bt = BrakeType::None);
107 void drive_tank_raw(double left, double right);
108
120 void drive_arcade(double forward_back, double left_right, int power = 1, BrakeType bt = BrakeType::None);
121
135 bool
136 drive_forward(double inches, directionType dir, Feedback &feedback, double max_speed = 1, double end_speed = 0);
137
150 bool drive_forward(double inches, directionType dir, double max_speed = 1, double end_speed = 0);
151
163 bool turn_degrees(double degrees, Feedback &feedback, double max_speed = 1, double end_speed = 0);
164
178 bool turn_degrees(double degrees, double max_speed = 1, double end_speed = 0);
179
193 bool drive_to_point(
194 double x, double y, vex::directionType dir, Feedback &feedback, double max_speed = 1, double end_speed = 0
195 );
196
211 bool drive_to_point(double x, double y, vex::directionType dir, double max_speed = 1, double end_speed = 0);
212
223 bool turn_to_heading(double heading_deg, Feedback &feedback, double max_speed = 1, double end_speed = 0);
234 bool turn_to_heading(double heading_deg, double max_speed = 1, double end_speed = 0);
235
239 void reset_auto();
240
251 static double modify_inputs(double input, int power = 2);
252
267 bool pure_pursuit(
268 PurePursuit::Path path, directionType dir, Feedback &feedback, double max_speed = 1, double end_speed = 0
269 );
270
286 private:
287 bool pure_pursuit(PurePursuit::Path path, directionType dir, double max_speed = 1, double end_speed = 0);
288 motor_group &left_motors;
289 motor_group &right_motors;
290
291 OdometryBase *odometry;
293
294 PID correction_pid;
296 Feedback *drive_default_feedback = NULL;
297 Feedback *turn_default_feedback = NULL;
298
300 &config;
301
302 bool func_initialized = false;
304 bool is_pure_pursuit = false;
305};
Definition auto_command.h:25
Definition feedback_base.h:10
Definition odometry_base.h:31
Definition core/utils/controls/pid.h:23
Definition pose2d.h:23
Definition pure_pursuit.h:15
bool drive_forward(double inches, directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:215
bool turn_to_heading(double heading_deg, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:508
void drive_tank_raw(double left, double right)
Definition tank_drive.cpp:125
TankDrive(motor_group &left_motors, motor_group &right_motors, robot_specs_t &config, OdometryBase *odom=NULL)
Definition tank_drive.cpp:7
bool turn_degrees(double degrees, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:291
BrakeType
Definition tank_drive.h:25
@ ZeroVelocity
try to bring the robot to rest. But don't try to hold position
Definition tank_drive.h:27
@ None
just send 0 volts to the motors
Definition tank_drive.h:26
@ Smart
bring the robot to rest and once it's stopped, try to hold that position
Definition tank_drive.h:28
void drive_tank(double left, double right, int power=1, BrakeType bt=BrakeType::None)
Definition tank_drive.cpp:138
void reset_auto()
Definition tank_drive.cpp:110
static double modify_inputs(double input, int power=2)
Definition tank_drive.cpp:571
bool pure_pursuit(PurePursuit::Path path, directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:584
Pose2d get_position()
Definition tank_drive.cpp:123
void drive_arcade(double forward_back, double left_right, int power=1, BrakeType bt=BrakeType::None)
Definition tank_drive.cpp:193
bool drive_to_point(double x, double y, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:351
void stop()
Definition tank_drive.cpp:115
Definition translation2d.h:22
Definition robot_specs.h:11