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
21class TankDrive {
22 public:
23 enum class BrakeType {
27 TurnOnly,
28 };
29
37 TankDrive(vex::motor_group &left_motors, vex::motor_group &right_motors, robot_specs_t &config, OdometryBase *odom = NULL);
38
39 AutoCommand *DriveToPointCmd(
40 Translation2d pt, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0
41 );
42 AutoCommand *DriveToPointCmd(
43 Feedback &fb, Translation2d pt, vex::directionType dir = vex::forward, double max_speed = 1.0,
44 double end_speed = 0.0
45 );
46
47 AutoCommand *DriveToPointCmd(
48 double x, double y, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0
49 );
50
51 AutoCommand *
52 DriveForwardCmd(double dist, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0);
53 AutoCommand *DriveForwardCmd(
54 Feedback &fb, double dist, vex::directionType dir = vex::forward, double max_speed = 1.0, double end_speed = 0.0
55 );
56
57 AutoCommand *TurnToHeadingCmd(double heading, double max_speed = 1.0, double end_speed = 0.0);
58 AutoCommand *TurnToHeadingCmd(Feedback &fb, double heading, double max_speed = 1.0, double end_speed = 0.0);
59
60 AutoCommand *TurnToPointCmd(
61 double x, double y, vex::directionType dir = vex::directionType::fwd, double max_speed = 1.0,
62 double end_speed = 0.0
63 );
64 AutoCommand *TurnToPointCmd(
65 Translation2d point, vex::directionType dir = vex::directionType::fwd, double max_speed = 1.0,
66 double end_speed = 0.0
67 );
68
69 AutoCommand *TurnDegreesCmd(double degrees, double max_speed = 1.0, double start_speed = 0.0);
70 AutoCommand *TurnDegreesCmd(Feedback &fb, double degrees, double max_speed = 1.0, double end_speed = 0.0);
71
72 AutoCommand *PurePursuitCmd(PurePursuit::Path path, vex::directionType dir, double max_speed = 1, double end_speed = 0);
73 AutoCommand *PurePursuitCmd(
74 Feedback &feedback, PurePursuit::Path path, vex::directionType dir, double max_speed = 1, double end_speed = 0
75 );
76 Condition *DriveStalledCondition(double stall_time);
77 AutoCommand *DriveTankCmd(double left, double right);
78
82 void stop();
83
88
99 void drive_tank(double left, double right, int power = 1, BrakeType bt = BrakeType::None);
105 void drive_tank_raw(double left, double right);
106
118 void drive_arcade(double forward_back, double left_right, int power = 1, BrakeType bt = BrakeType::None);
119
133 bool
134 drive_forward(double inches, vex::directionType dir, Feedback &feedback, double max_speed = 1, double end_speed = 0);
135
148 bool drive_forward(double inches, vex::directionType dir, double max_speed = 1, double end_speed = 0);
149
161 bool turn_degrees(double degrees, Feedback &feedback, double max_speed = 1, double end_speed = 0);
162
176 bool turn_degrees(double degrees, double max_speed = 1, double end_speed = 0);
177
191 bool drive_to_point(
192 double x, double y, vex::directionType dir, Feedback &feedback, double max_speed = 1, double end_speed = 0
193 );
194
209 bool drive_to_point(double x, double y, vex::directionType dir, double max_speed = 1, double end_speed = 0);
210
221 bool turn_to_heading(double heading_deg, Feedback &feedback, double max_speed = 1, double end_speed = 0);
232 bool turn_to_heading(double heading_deg, double max_speed = 1, double end_speed = 0);
233
237 void reset_auto();
238
249 static double modify_inputs(double input, int power = 2);
250
265 bool pure_pursuit(
266 PurePursuit::Path path, vex::directionType dir, Feedback &feedback, double max_speed = 1, double end_speed = 0
267 );
268
284 private:
285 bool pure_pursuit(PurePursuit::Path path, vex::directionType dir, double max_speed = 1, double end_speed = 0);
286 vex::motor_group &left_motors;
287 vex::motor_group &right_motors;
288
289 OdometryBase *odometry;
291
292 PID correction_pid;
294 Feedback *drive_default_feedback = NULL;
295 Feedback *turn_default_feedback = NULL;
296
298 &config;
299
300 bool func_initialized = false;
302 bool is_pure_pursuit = false;
303};
Definition auto_command.h:25
Definition feedback_base.h:10
Definition odometry_base.h:31
Definition pid.h:21
Definition pose2d.h:24
Definition pure_pursuit.h:13
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
bool drive_forward(double inches, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:215
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:23
@ ZeroVelocity
try to bring the robot to rest. But don't try to hold position
Definition tank_drive.h:25
@ None
just send 0 volts to the motors
Definition tank_drive.h:24
@ Smart
bring the robot to rest and once it's stopped, try to hold that position
Definition tank_drive.h:26
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
TankDrive(vex::motor_group &left_motors, vex::motor_group &right_motors, robot_specs_t &config, OdometryBase *odom=NULL)
Definition tank_drive.cpp:7
static double modify_inputs(double input, int power=2)
Definition tank_drive.cpp:571
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
bool pure_pursuit(PurePursuit::Path path, vex::directionType dir, Feedback &feedback, double max_speed=1, double end_speed=0)
Definition tank_drive.cpp:584
Definition translation2d.h:21
Definition robot_specs.h:11