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 "vex/vex.h"
8
9#include "core/robot_specs.h"
10#include "core/subsystems/odometry/odometry_tank.h"
11#include "core/competition/command_structure/auto_command.h"
12#include "core/utils/controls/feedback_base.h"
13#include "core/utils/controls/pid.h"
14#include "core/utils/pure_pursuit.h"
15
16#include <vector>
17
23class TankDrive {
24 public:
25 enum class BrakeType {
26 None,
27 ZeroVelocity,
28 Smart,
29 TurnOnly,
30 };
31
41 vex::motor_group& left_motors, vex::motor_group& right_motors, robot_specs_t& config,
42 OdometryBase* odom = NULL
43 );
44
45 AutoCommand* DriveToPointCmd(
46 Translation2d pt, vex::directionType dir = vex::forward, double max_speed = 1.0,
47 double end_speed = 0.0
48 );
49 AutoCommand* DriveToPointCmd(
50 Feedback& fb, Translation2d pt, vex::directionType dir = vex::forward,
51 double max_speed = 1.0, double end_speed = 0.0
52 );
53
54 AutoCommand* DriveToPointCmd(
55 double x, double y, vex::directionType dir = vex::forward, double max_speed = 1.0,
56 double end_speed = 0.0
57 );
58
59 AutoCommand* DriveForwardCmd(
60 double dist, vex::directionType dir = vex::forward, double max_speed = 1.0,
61 double end_speed = 0.0
62 );
63 AutoCommand* DriveForwardCmd(
64 Feedback& fb, double dist, vex::directionType dir = vex::forward,
65 double max_speed = 1.0, double end_speed = 0.0
66 );
67
68 AutoCommand* TurnToHeadingCmd(double heading, double max_speed = 1.0, double end_speed = 0.0);
69 AutoCommand* TurnToHeadingCmd(
70 Feedback& fb, double heading, double max_speed = 1.0, double end_speed = 0.0
71 );
72
73 AutoCommand* TurnToPointCmd(
74 double x, double y, vex::directionType dir = vex::directionType::fwd,
75 double max_speed = 1.0, double end_speed = 0.0
76 );
77 AutoCommand* TurnToPointCmd(
78 Translation2d point, vex::directionType dir = vex::directionType::fwd,
79 double max_speed = 1.0, double end_speed = 0.0
80 );
81
82 AutoCommand* TurnDegreesCmd(double degrees, double max_speed = 1.0, double start_speed = 0.0);
83 AutoCommand* TurnDegreesCmd(
84 Feedback& fb, double degrees, double max_speed = 1.0, double end_speed = 0.0
85 );
86
87 AutoCommand* PurePursuitCmd(
88 PurePursuit::Path path, vex::directionType dir, double max_speed = 1,
89 double end_speed = 0
90 );
91 AutoCommand* PurePursuitCmd(
92 Feedback& feedback, PurePursuit::Path path, vex::directionType dir,
93 double max_speed = 1, double end_speed = 0
94 );
95 Condition* DriveStalledCondition(double stall_time);
96 AutoCommand* DriveTankCmd(double left, double right);
97
99 void stop();
100
103
114 void drive_tank(double left, double right, int power = 1, BrakeType bt = BrakeType::None);
120 void drive_tank_raw(double left, double right);
121
133 void drive_arcade(
134 double forward_back, double left_right, int power = 1, BrakeType bt = BrakeType::None
135 );
136
152 bool drive_forward(
153 double inches, vex::directionType dir, Feedback& feedback, double max_speed = 1,
154 double end_speed = 0
155 );
156
169 bool drive_forward(
170 double inches, vex::directionType dir, double max_speed = 1, double end_speed = 0
171 );
172
186 bool turn_degrees(
187 double degrees, Feedback& feedback, double max_speed = 1, double end_speed = 0
188 );
189
203 bool turn_degrees(double degrees, double max_speed = 1, double end_speed = 0);
204
219 bool drive_to_point(
220 double x, double y, vex::directionType dir, Feedback& feedback, double max_speed = 1,
221 double end_speed = 0
222 );
223
238 bool drive_to_point(
239 double x, double y, vex::directionType dir, double max_speed = 1, double end_speed = 0
240 );
241
253 bool turn_to_heading(
254 double heading_deg, Feedback& feedback, double max_speed = 1, double end_speed = 0
255 );
266 bool turn_to_heading(double heading_deg, double max_speed = 1, double end_speed = 0);
267
269 void reset_auto();
270
281 static double modify_inputs(double input, int power = 2);
282
297 bool pure_pursuit(
298 PurePursuit::Path path, vex::directionType dir, Feedback& feedback,
299 double max_speed = 1, double end_speed = 0
300 );
301
317 private:
318 bool pure_pursuit(
319 PurePursuit::Path path, vex::directionType dir, double max_speed = 1,
320 double end_speed = 0
321 );
322 vex::motor_group& left_motors;
323 vex::motor_group& right_motors;
324
325 OdometryBase* odometry;
327
328 Feedback* correction_pid;
330 Feedback* drive_default_feedback = NULL;
331 Feedback* turn_default_feedback = NULL;
332
333 robot_specs_t& config;
335
336 bool func_initialized =
337 false;
339 bool is_pure_pursuit = false;
340};
Definition auto_command.h:25
Definition feedback_base.h:10
Definition odometry_base.h:30
Definition pose2d.h:21
Definition pure_pursuit.h:14
bool turn_to_heading(double heading_deg, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:559
void drive_tank_raw(double left, double right)
Definition tank_drive.cpp:149
bool drive_forward(double inches, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:243
bool turn_degrees(double degrees, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:324
BrakeType
Definition tank_drive.h:25
@ None
just send 0 volts to the motors
Definition tank_drive.h:26
void drive_tank(double left, double right, int power=1, BrakeType bt=BrakeType::None)
Definition tank_drive.cpp:162
void reset_auto()
Reset the initialization for autonomous drive functions.
Definition tank_drive.cpp:138
TankDrive(vex::motor_group &left_motors, vex::motor_group &right_motors, robot_specs_t &config, OdometryBase *odom=NULL)
Definition tank_drive.cpp:8
static double modify_inputs(double input, int power=2)
Definition tank_drive.cpp:630
Pose2d get_position()
Returns the Robot position as a Pose2d.
Definition tank_drive.cpp:147
void drive_arcade(double forward_back, double left_right, int power=1, BrakeType bt=BrakeType::None)
Definition tank_drive.cpp:220
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:386
void stop()
Stops rotation of all the motors using their "brake mode".
Definition tank_drive.cpp:141
bool pure_pursuit(PurePursuit::Path path, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:645
Definition robot_specs.h:11