8#include "pros/motors.hpp"
78 double compute(
double error,
double measured) {
100 void set(
double p,
double i = 0,
double d = 0) {
159 HoloDrive(
int fl_port,
int fr_port,
int bl_port,
int br_port,
161 double wheel_diameter,
162 double gear_ratio = 1.0,
188 void drive(
double inches,
int max_speed = 100,
int timeout_ms = 3000);
190 void strafe(
double inches,
int max_speed = 100,
int timeout_ms = 3000);
192 void turn_to(
double heading_deg,
int max_speed = 80,
int timeout_ms = 2000);
194 void turn_relative(
double degrees,
int max_speed = 80,
int timeout_ms = 2000);
226 pros::Motor fl_, fr_, bl_, br_;
229 double wheel_circumference_;
232 HoloPID drive_pid_, strafe_pid_, turn_pid_, heading_pid_;
237 int last_fl_ = INT_MIN, last_fr_ = INT_MIN;
238 int last_bl_ = INT_MIN, last_br_ = INT_MIN;
241 void set_holonomic(
double throttle,
double strafe,
double turn);
242 double inches_to_deg(
double inches)
const;
243 double drive_pos()
const;
244 double strafe_pos()
const;
275 std::vector<int> right_ports,
278 double wheel_diameter,
279 double gear_ratio = 1.0);
303 void drive(
double inches,
int max_speed = 100,
int timeout_ms = 3000);
305 void strafe(
double inches,
int max_speed = 100,
int timeout_ms = 3000);
307 void turn_to(
double heading_deg,
int max_speed = 80,
int timeout_ms = 2000);
309 void turn_relative(
double degrees,
int max_speed = 80,
int timeout_ms = 2000);
333 pros::MotorGroup left_, right_;
336 double wheel_circumference_;
339 HoloPID drive_pid_, strafe_pid_, turn_pid_, heading_pid_;
341 void set_tank(
double left_v,
double right_v);
342 double inches_to_deg(
double inches)
const;
343 double drive_pos()
const;
PROS API header provides high-level user functionality.
Tank drive with a single center-mounted strafe wheel (H-drive layout).
void opcontrol(int throttle, int strafe, int turn)
Drive from joystick inputs.
void strafe(double inches, int max_speed=100, int timeout_ms=3000)
Strafe right inches (negative = left).
void turn_to(double heading_deg, int max_speed=80, int timeout_ms=2000)
Turn to absolute heading 0–360°.
void set_drive_pid(double kP, double kI=0, double kD=0)
void drive(double inches, int max_speed=100, int timeout_ms=3000)
Drive forward inches (negative = reverse).
void set_turn_pid(double kP, double kI=0, double kD=0)
HDrive(std::vector< int > left_ports, std::vector< int > right_ports, int center_port, int imu_port, double wheel_diameter, double gear_ratio=1.0)
Construct an H-drive.
void turn_relative(double degrees, int max_speed=80, int timeout_ms=2000)
Turn degrees CW (positive) or CCW (negative).
double get_heading() const
void set_strafe_pid(double kP, double kI=0, double kD=0)
void set_brake_mode(pros::motor_brake_mode_e_t mode)
void set_heading_pid(double kP, double kI=0, double kD=0)
void calibrate(bool wait=true)
4-motor holonomic drive — supports X-Drive and Mecanum configurations.
void strafe(double inches, int max_speed=100, int timeout_ms=3000)
Strafe right inches (negative = left).
HoloDrive(int fl_port, int fr_port, int bl_port, int br_port, int imu_port, double wheel_diameter, double gear_ratio=1.0, Type type=Type::MECANUM)
Construct a 4-motor holonomic drive.
void set_heading_pid(double kP, double kI=0, double kD=0)
Set the heading-correction PID used during straight drive / strafe.
void drive(double inches, int max_speed=100, int timeout_ms=3000)
Drive forward inches (negative = reverse).
void set_drive_pid(double kP, double kI=0, double kD=0)
Set the linear-drive PID gains.
void set_strafe_pid(double kP, double kI=0, double kD=0)
Set the strafe PID gains.
void set_brake_mode(pros::motor_brake_mode_e_t mode)
Set brake mode for all four motors.
void turn_to(double heading_deg, int max_speed=80, int timeout_ms=2000)
Turn to absolute heading 0–360°.
void set_turn_pid(double kP, double kI=0, double kD=0)
Set the turn-in-place PID gains.
void opcontrol(int throttle, int strafe, int turn)
Drive from joystick inputs.
@ XDRIVE
Omni wheels mounted at 45°.
double get_heading() const
void calibrate(bool wait=true)
Calibrate the IMU.
void reset_sensors()
Tare motor encoders.
void turn_relative(double degrees, int max_speed=80, int timeout_ms=2000)
Turn degrees CW (positive) or CCW (negative).
Public LightLib odometry / pose-estimation API.
double wrap180(double a)
Normalize an angle in degrees to the half-open interval (-180, 180] so PID always takes the shortest ...
Internal PID used by HoloDrive / HDrive.
void reset()
Zero out integral and previous-state history.
double integral
Accumulated integral term.
double compute(double error)
Compute output using derivative on error.
bool seeded_err
Whether prev_error is valid.
bool seeded_meas
Whether prev_measured is valid.
double kP
Proportional gain.
double prev_error
Previous-cycle error.
double prev_measured
Previous-cycle measurement (for derivative-on-measurement).
void set(double p, double i=0, double d=0)
Set all three gains in one call.
double integralCap
Same gating semantics as LightPID::integralCap: > 0 enables the clamp.
double kD
Derivative gain.
double compute(double error, double measured)
Compute output using derivative on measurement (suppresses derivative kick on target changes).