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 <vector>
8
9#include "core/robot_specs.h"
10#include "core/subsystems/odometry/odometry_tank.h"
11#include "core/utils/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#include "vex.h"
16
22class TankDrive {
23 public:
24 enum class BrakeType {
28 TurnOnly,
29 };
30
40 vex::motor_group& left_motors, vex::motor_group& right_motors, robot_specs_t& config,
41 OdometryBase* odom = NULL
42 );
43
44 AutoCommand* DriveToPointCmd(
45 Translation2d pt, vex::directionType dir = vex::forward, double max_speed = 1.0,
46 double end_speed = 0.0
47 );
48 AutoCommand* DriveToPointCmd(
49 Feedback& fb, Translation2d pt, vex::directionType dir = vex::forward,
50 double max_speed = 1.0, double end_speed = 0.0
51 );
52
53 AutoCommand* DriveToPointCmd(
54 double x, double y, vex::directionType dir = vex::forward, double max_speed = 1.0,
55 double end_speed = 0.0
56 );
57
58 AutoCommand* DriveForwardCmd(
59 double dist, vex::directionType dir = vex::forward, double max_speed = 1.0,
60 double end_speed = 0.0
61 );
62 AutoCommand* DriveForwardCmd(
63 Feedback& fb, double dist, vex::directionType dir = vex::forward,
64 double max_speed = 1.0, double end_speed = 0.0
65 );
66
67 AutoCommand* TurnToHeadingCmd(double heading, double max_speed = 1.0, double end_speed = 0.0);
68 AutoCommand* TurnToHeadingCmd(
69 Feedback& fb, double heading, double max_speed = 1.0, double end_speed = 0.0
70 );
71
72 AutoCommand* TurnToPointCmd(
73 double x, double y, vex::directionType dir = vex::directionType::fwd,
74 double max_speed = 1.0, double end_speed = 0.0
75 );
76 AutoCommand* TurnToPointCmd(
77 Translation2d point, vex::directionType dir = vex::directionType::fwd,
78 double max_speed = 1.0, double end_speed = 0.0
79 );
80
81 AutoCommand* TurnDegreesCmd(double degrees, double max_speed = 1.0, double start_speed = 0.0);
82 AutoCommand* TurnDegreesCmd(
83 Feedback& fb, double degrees, double max_speed = 1.0, double end_speed = 0.0
84 );
85
86 AutoCommand* PurePursuitCmd(
87 PurePursuit::Path path, vex::directionType dir, double max_speed = 1,
88 double end_speed = 0
89 );
90 AutoCommand* PurePursuitCmd(
91 Feedback& feedback, PurePursuit::Path path, vex::directionType dir,
92 double max_speed = 1, double end_speed = 0
93 );
94 Condition* DriveStalledCondition(double stall_time);
95 AutoCommand* DriveTankCmd(double left, double right);
96
98 void stop();
99
102
113 void drive_tank(double left, double right, int power = 1, BrakeType bt = BrakeType::None);
119 void drive_tank_raw(double left, double right);
120
132 void drive_arcade(
133 double forward_back, double left_right, int power = 1, BrakeType bt = BrakeType::None
134 );
135
151 bool drive_forward(
152 double inches, vex::directionType dir, Feedback& feedback, double max_speed = 1,
153 double end_speed = 0
154 );
155
168 bool drive_forward(
169 double inches, vex::directionType dir, double max_speed = 1, double end_speed = 0
170 );
171
185 bool turn_degrees(
186 double degrees, Feedback& feedback, double max_speed = 1, double end_speed = 0
187 );
188
202 bool turn_degrees(double degrees, double max_speed = 1, double end_speed = 0);
203
218 bool drive_to_point(
219 double x, double y, vex::directionType dir, Feedback& feedback, double max_speed = 1,
220 double end_speed = 0
221 );
222
237 bool drive_to_point(
238 double x, double y, vex::directionType dir, double max_speed = 1, double end_speed = 0
239 );
240
252 bool turn_to_heading(
253 double heading_deg, Feedback& feedback, double max_speed = 1, double end_speed = 0
254 );
265 bool turn_to_heading(double heading_deg, double max_speed = 1, double end_speed = 0);
266
268 void reset_auto();
269
280 static double modify_inputs(double input, int power = 2);
281
296 bool pure_pursuit(
297 PurePursuit::Path path, vex::directionType dir, Feedback& feedback,
298 double max_speed = 1, double end_speed = 0
299 );
300
316 private:
317 bool pure_pursuit(
318 PurePursuit::Path path, vex::directionType dir, double max_speed = 1,
319 double end_speed = 0
320 );
321 vex::motor_group& left_motors;
322 vex::motor_group& right_motors;
323
324 OdometryBase* odometry;
326
327 Feedback* correction_pid;
329 Feedback* drive_default_feedback = NULL;
330 Feedback* turn_default_feedback = NULL;
331
332 robot_specs_t& config;
334
335 bool func_initialized =
336 false;
338 bool is_pure_pursuit = false;
339};
Definition auto_command.h:25
Definition feedback_base.h:10
Definition odometry_base.h:30
Definition pose2d.h:24
Wrapper for a vector of points, checking if any of the points are too close for pure pursuit.
Definition pure_pursuit.h:12
bool turn_to_heading(double heading_deg, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:544
void drive_tank_raw(double left, double right)
Definition tank_drive.cpp:147
bool drive_forward(double inches, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:240
bool turn_degrees(double degrees, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:319
BrakeType
Definition tank_drive.h:24
@ ZeroVelocity
try to bring the robot to rest. But don't try to hold position
Definition tank_drive.h:26
@ None
just send 0 volts to the motors
Definition tank_drive.h:25
@ Smart
bring the robot to rest and once it's stopped, try to hold that position
Definition tank_drive.h:27
void drive_tank(double left, double right, int power=1, BrakeType bt=BrakeType::None)
Definition tank_drive.cpp:160
void reset_auto()
Reset the initialization for autonomous drive functions.
Definition tank_drive.cpp:136
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:615
Pose2d get_position()
Returns the Robot position as a Pose2d.
Definition tank_drive.cpp:145
void drive_arcade(double forward_back, double left_right, int power=1, BrakeType bt=BrakeType::None)
Definition tank_drive.cpp:217
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:381
void stop()
Stops rotation of all the motors using their "brake mode".
Definition tank_drive.cpp:139
bool pure_pursuit(PurePursuit::Path path, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:630
Definition translation2d.h:21
Definition robot_specs.h:11