diff --git a/RELENTLESS/LemLib@0.4.7.zip b/RELENTLESS/LemLib@0.4.7.zip new file mode 100644 index 0000000..435b49f Binary files /dev/null and b/RELENTLESS/LemLib@0.4.7.zip differ diff --git a/RELENTLESS/include/lemlib/api.hpp b/RELENTLESS/include/lemlib/api.hpp new file mode 100644 index 0000000..26612e4 --- /dev/null +++ b/RELENTLESS/include/lemlib/api.hpp @@ -0,0 +1,17 @@ +/** + * @file include/lemlib/api.hpp + * @author LemLib Team + * @brief LemLib API header file. Include this in your source files to use the library. + * @version 0.4.5 + * @date 2023-01-27 + * + * @copyright Copyright (c) 2023 + * + */ +#pragma once + +#include "lemlib/util.hpp" +#include "lemlib/pid.hpp" +#include "lemlib/pose.hpp" +#include "lemlib/chassis/trackingWheel.hpp" +#include "lemlib/chassis/chassis.hpp" diff --git a/RELENTLESS/include/lemlib/chassis/chassis.hpp b/RELENTLESS/include/lemlib/chassis/chassis.hpp new file mode 100644 index 0000000..41a630b --- /dev/null +++ b/RELENTLESS/include/lemlib/chassis/chassis.hpp @@ -0,0 +1,173 @@ +/** + * @file include/lemlib/chassis/chassis.hpp + * @author LemLib Team + * @brief Chassis class declarations + * @version 0.4.5 + * @date 2023-01-23 + * + * @copyright Copyright (c) 2023 + * + */ + +#pragma once + +#include "pros/motors.hpp" +#include "pros/imu.hpp" +#include "lemlib/chassis/trackingWheel.hpp" +#include "lemlib/pose.hpp" + +namespace lemlib { +/** + * @brief Struct containing all the sensors used for odometry + * + * The sensors are stored in a struct so that they can be easily passed to the chassis class + * The variables are pointers so that they can be set to nullptr if they are not used + * Otherwise the chassis class would have to have a constructor for each possible combination of sensors + * + * @param vertical1 pointer to the first vertical tracking wheel + * @param vertical2 pointer to the second vertical tracking wheel + * @param horizontal1 pointer to the first horizontal tracking wheel + * @param horizontal2 pointer to the second horizontal tracking wheel + * @param imu pointer to the IMU + */ +typedef struct { + TrackingWheel* vertical1; + TrackingWheel* vertical2; + TrackingWheel* horizontal1; + TrackingWheel* horizontal2; + pros::Imu* imu; +} OdomSensors_t; + +/** + * @brief Struct containing constants for a chassis controller + * + * The constants are stored in a struct so that they can be easily passed to the chassis class + * Set a constant to 0 and it will be ignored + * + * @param kP proportional constant for the chassis controller + * @param kD derivative constant for the chassis controller + * @param smallError the error at which the chassis controller will switch to a slower control loop + * @param smallErrorTimeout the time the chassis controller will wait before switching to a slower control loop + * @param largeError the error at which the chassis controller will switch to a faster control loop + * @param largeErrorTimeout the time the chassis controller will wait before switching to a faster control loop + * @param slew the maximum acceleration of the chassis controller + */ +typedef struct { + float kP; + float kD; + float smallError; + float smallErrorTimeout; + float largeError; + float largeErrorTimeout; + float slew; +} ChassisController_t; + +/** + * @brief Struct containing constants for a drivetrain + * + * The constants are stored in a struct so that they can be easily passed to the chassis class + * Set a constant to 0 and it will be ignored + * + * @param leftMotors pointer to the left motors + * @param rightMotors pointer to the right motors + * @param trackWidth the track width of the robot + * @param wheelDiameter the diameter of the wheels (2.75, 3.25, 4, 4.125) + * @param rpm the rpm of the wheels + */ +typedef struct { + pros::Motor_Group* leftMotors; + pros::Motor_Group* rightMotors; + float trackWidth; + float wheelDiameter; + float rpm; +} Drivetrain_t; + +/** + * @brief Chassis class + * + */ +class Chassis { + public: + /** + * @brief Construct a new Chassis + * + * @param drivetrain drivetrain to be used for the chassis + * @param lateralSettings settings for the lateral controller + * @param angularSettings settings for the angular controller + * @param sensors sensors to be used for odometry + */ + Chassis(Drivetrain_t drivetrain, ChassisController_t lateralSettings, ChassisController_t angularSettings, + OdomSensors_t sensors); + /** + * @brief Calibrate the chassis sensors + * + */ + void calibrate(); + /** + * @brief Set the pose of the chassis + * + * @param x new x value + * @param y new y value + * @param theta new theta value + * @param radians true if theta is in radians, false if not. False by default + */ + void setPose(double x, double y, double theta, bool radians = false); + /** + * @brief Set the pose of the chassis + * + * @param pose the new pose + * @param radians whether pose theta is in radians (true) or not (false). false by default + */ + void setPose(Pose pose, bool radians = false); + /** + * @brief Get the pose of the chassis + * + * @param radians whether theta should be in radians (true) or degrees (false). false by default + * @return Pose + */ + Pose getPose(bool radians = false); + /** + * @brief Turn the chassis so it is facing the target point + * + * The PID logging id is "angularPID" + * + * @param x x location + * @param y y location + * @param timeout longest time the robot can spend moving + * @param reversed whether the robot should turn in the opposite direction. false by default + * @param maxSpeed the maximum speed the robot can turn at. Default is 200 + * @param log whether the chassis should log the turnTo function. false by default + */ + void turnTo(float x, float y, int timeout, bool reversed = false, float maxSpeed = 127, bool log = false); + /** + * @brief Move the chassis towards the target point + * + * The PID logging ids are "angularPID" and "lateralPID" + * + * @param x x location + * @param y y location + * @param timeout longest time the robot can spend moving + * @param maxSpeed the maximum speed the robot can move at + * @param log whether the chassis should log the turnTo function. false by default + */ + void moveTo(float x, float y, int timeout, float maxSpeed = 200, bool log = false); + /** + * @brief Move the chassis along a path + * + * @param filePath file path to the path. No need to preface it with /usd/ + * @param timeout the maximum time the robot can spend moving + * @param lookahead the lookahead distance. Units in inches. Larger values will make the robot move faster but + * will follow the path less accurately + * @param reverse whether the robot should follow the path in reverse. false by default + * @param maxSpeed the maximum speed the robot can move at + * @param log whether the chassis should log the path on a log file. false by default. + */ + void follow(const char* filePath, int timeout, float lookahead, bool reverse = false, float maxSpeed = 127, + bool log = false); + private: + ChassisController_t lateralSettings; + ChassisController_t angularSettings; + Drivetrain_t drivetrain; + OdomSensors_t odomSensors; +}; +} // namespace lemlib diff --git a/RELENTLESS/include/lemlib/chassis/odom.hpp b/RELENTLESS/include/lemlib/chassis/odom.hpp new file mode 100644 index 0000000..fc0a6c2 --- /dev/null +++ b/RELENTLESS/include/lemlib/chassis/odom.hpp @@ -0,0 +1,50 @@ +/** + * @file include/lemlib/chassis/odom.hpp + * @author LemLib Team + * @brief This is the header file for the odom.cpp file. Its not meant to be used directly, only through the chassis + * class + * @version 0.4.5 + * @date 2023-01-23 + * + * @copyright Copyright (c) 2023 + * + */ + +#pragma once + +#include "lemlib/chassis/chassis.hpp" +#include "lemlib/pose.hpp" + +namespace lemlib { +/** + * @brief Set the sensors to be used for odometry + * + * @param sensors the sensors to be used + * @param drivetrain drivetrain to be used + */ +void setSensors(lemlib::OdomSensors_t sensors, lemlib::Drivetrain_t drivetrain); +/** + * @brief Get the pose of the robot + * + * @param radians true for theta in radians, false for degrees. False by default + * @return Pose + */ +Pose getPose(bool radians = false); +/** + * @brief Set the Pose of the robot + * + * @param pose the new pose + * @param radians true if theta is in radians, false if in degrees. False by default + */ +void setPose(Pose pose, bool radians = false); +/** + * @brief Update the pose of the robot + * + */ +void update(); +/** + * @brief Initialize the odometry system + * + */ +void init(); +} // namespace lemlib diff --git a/RELENTLESS/include/lemlib/chassis/trackingWheel.hpp b/RELENTLESS/include/lemlib/chassis/trackingWheel.hpp new file mode 100644 index 0000000..a212ace --- /dev/null +++ b/RELENTLESS/include/lemlib/chassis/trackingWheel.hpp @@ -0,0 +1,80 @@ +/** + * @file include/lemlib/chassis/trackingWheel.hpp + * @author LemLib Team + * @brief tracking wheel class declarations + * @version 0.4.5 + * @date 2023-01-23 + * + * @copyright Copyright (c) 2023 + * + */ + +#pragma once + +#include "pros/motors.hpp" +#include "pros/adi.hpp" +#include "pros/rotation.hpp" + +namespace lemlib { +class TrackingWheel { + public: + /** + * @brief Create a new tracking wheel + * + * @param encoder the optical shaft encoder to use + * @param diameter diameter of the tracking wheel in inches + * @param distance distance between the tracking wheel and the center of rotation in inches + * @param gearRatio gear ratio of the tracking wheel, defaults to 1 + */ + TrackingWheel(pros::ADIEncoder* encoder, float diameter, float distance, float gearRatio = 1); + /** + * @brief Create a new tracking wheel + * + * @param encoder the v5 rotation sensor to use + * @param diameter diameter of the tracking wheel in inches + * @param distance distance between the tracking wheel and the center of rotation in inches + * @param gearRatio gear ratio of the tracking wheel, defaults to 1 + */ + TrackingWheel(pros::Rotation* encoder, float diameter, float distance, float gearRatio = 1); + /** + * @brief Create a new tracking wheel + * + * @param motors the motor group to use + * @param diameter diameter of the drivetrain wheels in inches + * @param distance half the track width of the drivetrain in inches + * @param rpm theoretical maximum rpm of the drivetrain wheels + */ + TrackingWheel(pros::Motor_Group* motors, float diameter, float distance, float rpm); + /** + * @brief Reset the tracking wheel position to 0 + * + */ + void reset(); + /** + * @brief Get the distance traveled by the tracking wheel + * + * @return float distance traveled in inches + */ + float getDistanceTraveled(); + /** + * @brief Get the offset of the tracking wheel from the center of rotation + * + * @return float offset in inches + */ + float getOffset(); + /** + * @brief Get the type of tracking wheel + * + * @return int - 1 if motor group, 0 otherwise + */ + int getType(); + private: + float diameter; + float distance; + float rpm; + pros::ADIEncoder* encoder = nullptr; + pros::Rotation* rotation = nullptr; + pros::Motor_Group* motors = nullptr; + float gearRatio = 1; +}; +} // namespace lemlib \ No newline at end of file diff --git a/RELENTLESS/include/lemlib/logger.hpp b/RELENTLESS/include/lemlib/logger.hpp new file mode 100644 index 0000000..e8c2763 --- /dev/null +++ b/RELENTLESS/include/lemlib/logger.hpp @@ -0,0 +1,139 @@ +/** + * @file include/lemlib/logger.hpp + * @author LemLib Team + * @brief A Logger for LemLib. + * @version 0.4.5 + * @date 2023-02-12 + * + * @copyright Copyright (c) 2023 + * + */ + +#pragma once + +namespace lemlib { + +static bool debug = false; +static bool verbose = false; + +namespace logger { + +/** + * @brief A level enumeration. + * + * Debug: Only enabled if lemlib::logger::debug is true + * Info: General information + * Warn: Warnings, usually not critical/doesn't affect the robot + * Error: Errors, usually critical and affects the robot + * Fatal: Fatal errors, crashes the program + * + * @note The log level is inclusive. For example, if the log level is set to + */ +enum class Level { DEBUG, INFO, WARN, ERROR, FATAL }; + +static Level lowestLevel = Level::INFO; + +/** + * @brief Whether or not to log debug messages. + * + * @return true if debug is enabled + */ +bool isDebug(); +/** + * @brief Sets lemlib::debug + * + * @param debug the new value + */ +void setDebug(bool debug); + +/** + * @brief Whether or not to log info messages. + * + * If false, only log messages with a level of lemlib::logger::Level::WARN + * or higher will be logged + */ +bool isVerbose(); +/** + * @brief Sets lemlib::verbose + * + * @param verbose the new value + */ +void setVerbose(bool verbose); + +/** + * @brief The current lowest log level. + * + * @return the lowest loggable level + */ +Level getLowestLevel(); + +/** + * @brief Sets the lowest loggable level + * + * @param level the new lowest loggable level + */ +void setLowestLevel(Level level); + +/** + * @brief Logs a message with an exception + * + * @param level the level of the message + * @param message the message + * @param exception the exception + */ +void log(Level level, const char* message, const char* exception); +/** + * @brief Logs a message + * + * @param level the level of the message + * @param message the message + */ +void log(Level level, const char* message); + +/** + * @brief Logs a debug message + * + * @param message + */ +void debug(const char* message); +/** + * @brief Logs an info message + * + * @param message + */ +void info(const char* message); +/** + * @brief Logs a warning message + * + * @param message + */ +void warn(const char* message); +/** + * @brief Logs an error message + * + * @param message + * @param exception + */ +void error(const char* message, const char* exception); +/** + * @brief Logs an error message + * + * @param message + */ +void error(const char* message); +/** + * @brief Logs a fatal message + * + * @param message + * @param exception + */ +void fatal(const char* message, const char* exception); +/** + * @brief Logs a fatal message + * + * @param message + */ +void fatal(const char* message); + +} // namespace logger +} // namespace lemlib \ No newline at end of file diff --git a/RELENTLESS/include/lemlib/pid.hpp b/RELENTLESS/include/lemlib/pid.hpp new file mode 100644 index 0000000..d736374 --- /dev/null +++ b/RELENTLESS/include/lemlib/pid.hpp @@ -0,0 +1,125 @@ +/** + * @file include/lemlib/pid.hpp + * @author Lemlib Team + * @brief FAPID class header + * @version 0.4.5 + * @date 2023-01-15 + * + * @copyright Copyright (c) 2023 + * + */ +#pragma once +#include +#include "pros/rtos.hpp" + +namespace lemlib { +/** + * @brief Feedforward, Acceleration, Proportional, Integral, Derivative PID controller + * + * The controller does not loop on its own. It must be called in a loop. + * For example: while(!controller.settled) { controller.update(input, output); } + * + */ +class FAPID { + public: + /** + * @brief Construct a new FAPID + * + * @param kF feedfoward gain, multiplied by target and added to output. Set 0 if disabled + * @param kA acceleration gain, limits the change in output. Set 0 if disabled + * @param kP proportional gain, multiplied by error and added to output + * @param kI integral gain, multiplied by total error and added to output + * @param kD derivative gain, multiplied by change in error and added to output + * @param name name of the FAPID. Used for logging + */ + FAPID(float kF, float kA, float kP, float kI, float kD, std::string name); + /** + * @brief Set gains + * + * @param kF feedfoward gain, multiplied by target and added to output. Set 0 if disabled + * @param kA acceleration gain, limits the change in output. Set 0 if disabled + * @param kP proportional gain, multiplied by error and added to output + * @param kI integral gain, multiplied by total error and added to output + * @param kD derivative gain, multiplied by change in error and added to output + */ + void setGains(float kF, float kA, float kP, float kI, float kD); + /** + * @brief Set the exit conditions + * + * @param largeError range where error is considered large + * @param smallError range where error is considered small + * @param largeTime time in milliseconds t + * @param smallTime + * @param maxTime + */ + void setExit(float largeError, float smallError, int largeTime, int smallTime, int maxTime); + /** + * @brief Update the FAPID + * + * @param target the target value + * @param position the current value + * @param log whether to check the most recent terminal input for user input. Default is false because logging + * multiple PIDs could slow down the program. + * @return float - output + */ + float update(float target, float position, bool log = false); + /** + * @brief Reset the FAPID + */ + void reset(); + /** + * @brief Check if the FAPID has settled + * + * If the exit conditions have not been set, this function will always return false + * + * @return true - the FAPID has settled + * @return false - the FAPID has not settled + */ + bool settled(); + /** + * @brief initialize the FAPID logging system + * + * if this function is called, std::cin will be used to interact with the FAPID + * + * the user can interact with the FAPID through the terminal + * the user can access gains and other variables with the following format: + * . to get the value of the variable + * ._ to set the value of the variable + * for example: + * pid.kP_0.5 will set the kP value to 0.5 + * list of variables thats value can be set: + * kF, kA, kP, kI, kD + * list of variables that can be accessed: + * kF, kA, kP, kI, kD, totalError + * list of functions that can be called: + * reset() + */ + static void init(); + private: + float kF; + float kA; + float kP; + float kI; + float kD; + + float largeError; + float smallError; + int largeTime = 0; + int smallTime = 0; + int maxTime = -1; // -1 means no max time set, run forever + + int largeTimeCounter = 0; + int smallTimeCounter = 0; + int startTime = 0; + + float prevError = 0; + float totalError = 0; + float prevOutput = 0; + + void log(); + std::string name; + static std::string input; + static pros::Task* logTask; + static pros::Mutex logMutex; +}; +} // namespace lemlib diff --git a/RELENTLESS/include/lemlib/pose.hpp b/RELENTLESS/include/lemlib/pose.hpp new file mode 100644 index 0000000..2e03e9f --- /dev/null +++ b/RELENTLESS/include/lemlib/pose.hpp @@ -0,0 +1,95 @@ +/** + * @file include/lemlib/pose.hpp + * @author LemLib Team + * @brief Pose class declarations + * @version 0.4.5 + * @date 2023-01-23 + * + * @copyright Copyright (c) 2023 + * + */ +#pragma once + +namespace lemlib { +class Pose { + public: + /** @brief x value*/ + float x; + /** @brief y value*/ + float y; + /** @brief theta value*/ + float theta; + /** + * @brief Create a new pose + * + * @param x component + * @param y component + * @param theta heading. Defaults to 0 + */ + Pose(float x, float y, float theta = 0); + /** + * @brief Add a pose to this pose + * + * @param other other pose + * @return Pose + */ + Pose operator+(const Pose& other); + /** + * @brief Subtract a pose from this pose + * + * @param other other pose + * @return Pose + */ + Pose operator-(const Pose& other); + /** + * @brief Multiply a pose by this pose + * + * @param other other pose + * @return Pose + */ + float operator*(const Pose& other); + /** + * @brief Multiply a pose by a float + * + * @param other float + * @return Pose + */ + Pose operator*(const float& other); + /** + * @brief Divide a pose by a float + * + * @param other float + * @return Pose + */ + Pose operator/(const float& other); + /** + * @brief Linearly interpolate between two poses + * + * @param other the other pose + * @param t t value + * @return Pose + */ + Pose lerp(Pose other, float t); + /** + * @brief Get the distance between two poses + * + * @param other the other pose + * @return float + */ + float distance(Pose other); + /** + * @brief Get the angle between two poses + * + * @param other the other pose + * @return float in radians + */ + float angle(Pose other); + /** + * @brief Rotate a pose by an angle + * + * @param angle angle in radians + * @return Pose + */ + Pose rotate(float angle); +}; +} // namespace lemlib diff --git a/RELENTLESS/include/lemlib/util.hpp b/RELENTLESS/include/lemlib/util.hpp new file mode 100644 index 0000000..3547a71 --- /dev/null +++ b/RELENTLESS/include/lemlib/util.hpp @@ -0,0 +1,77 @@ +/** + * @file include/lemlib/util.hpp + * @author LemLib Team + * @brief Utility functions declarations + * @version 0.4.5 + * @date 2023-01-15 + * + * @copyright Copyright (c) 2023 + * + */ + +#pragma once + +#include + +namespace lemlib { +/** + * @brief Slew rate limiter + * + * @param target target value + * @param current current value + * @param maxChange maximum change. No maximum if set to 0 + + * @return float - the limited value + */ +float slew(float target, float current, float maxChange); + +/** + * @brief Convert radians to degrees + * + * @param rad radians + * @return float degrees + */ +float radToDeg(float rad); + +/** + * @brief Convert degrees to radians + * + * @param deg degrees + * @return float radians + */ +float degToRad(float deg); + +/** + * @brief Calculate the error between 2 angles. Useful when calculating the error between 2 headings + * + * @param angle1 + * @param angle2 + * @param radians true if angle is in radians, false if not. False by default + * @return float wrapped angle + */ +float angleError(float angle1, float angle2, bool radians = false); + +/** + * @brief Return the sign of a number + * + * @param x the number to get the sign of + * @return float - -1 if negative, 1 if positive + */ +float sgn(float x); + +/** + * @brief Return the average of a vector of numbers + * + * @param values + * @return float + */ +float avg(std::vector values); + +/** + * @brief Return the average of a vector of numbers + * + * @param values + * @return double + */ +double avg(std::vector values); +} // namespace lemlib diff --git a/RELENTLESS/project.pros b/RELENTLESS/project.pros index af57b5a..acd6567 100644 --- a/RELENTLESS/project.pros +++ b/RELENTLESS/project.pros @@ -1,316 +1,339 @@ { - "py/object": "pros.conductor.project.Project", - "py/state": { - "project_name": "RELENTLESS", - "target": "v5", - "templates": { - "kernel": { - "location": "C:\\Users\\cjans\\AppData\\Roaming\\PROS\\templates\\kernel@3.8.0", - "metadata": { - "cold_addr": "58720256", - "cold_output": "bin/cold.package.bin", - "hot_addr": "125829120", - "hot_output": "bin/hot.package.bin", - "origin": "pros-mainline", - "output": "bin/monolith.bin" - }, - "name": "kernel", - "py/object": "pros.conductor.templates.local_template.LocalTemplate", - "supported_kernels": null, - "system_files": [ - "include/display/lv_core/lv_vdb.h", - "include/display/lv_core/lv_core.mk", - "include/display/lv_misc/lv_math.h", - "include/display/lv_objx/lv_tabview.h", - "include/display/lv_misc/lv_color.h", - "include/display/lv_hal/lv_hal_indev.h", - "include/display/lv_fonts/lv_fonts.mk", - "include/display/lv_misc/lv_symbol_def.h", - "include/display/lv_hal/lv_hal.mk", - "include/display/lv_themes/lv_theme_night.h", - "include/display/lv_draw/lv_draw_triangle.h", - "include/pros/optical.hpp", - "include/display/lv_draw/lv_draw_vbasic.h", - "include/display/lv_objx/lv_objx_templ.h", - "include/display/lv_core/lv_refr.h", - "include/pros/link.hpp", - "include/display/lv_objx/lv_btnm.h", - "include/display/lv_objx/lv_cb.h", - "firmware/v5-common.ld", - "include/pros/ext_adi.h", - "include/pros/rotation.h", - "include/display/lv_objx/lv_spinbox.h", - "include/display/lv_misc/lv_circ.h", - "include/display/lv_misc/lv_mem.h", - "include/display/lv_objx/lv_page.h", - "include/display/lv_objx/lv_ddlist.h", - "include/display/lv_core/lv_group.h", - "include/display/lvgl.h", - "include/display/lv_objx/lv_chart.h", - "include/pros/distance.h", - "include/display/lv_objx/lv_list.h", - "include/pros/vision.h", - "include/pros/misc.hpp", - "include/display/lv_draw/lv_draw.h", - "include/display/lv_objx/lv_label.h", - "include/display/lv_misc/lv_font.h", - "include/display/lv_draw/lv_draw_img.h", - "include/display/lv_misc/lv_log.h", - "include/display/lv_misc/lv_templ.h", - "include/pros/llemu.h", - "include/display/lv_objx/lv_btn.h", - "include/display/lv_fonts/lv_font_builtin.h", - "include/display/lv_objx/lv_calendar.h", - "firmware/libm.a", - "include/display/lv_conf.h", - "include/display/lv_objx/lv_sw.h", - "include/display/lv_draw/lv_draw_rect.h", - "include/display/lv_objx/lv_cont.h", - "include/pros/vision.hpp", - "include/display/lv_objx/lv_mbox.h", - "include/pros/adi.hpp", - "include/pros/imu.hpp", - "include/display/lv_objx/lv_table.h", - "include/pros/screen.hpp", - "include/display/lv_draw/lv_draw_label.h", - "include/display/lv_misc/lv_txt.h", - "include/pros/api_legacy.h", - "include/display/lv_objx/lv_lmeter.h", - "include/display/lv_themes/lv_theme_templ.h", - "include/pros/apix.h", - "include/display/lv_draw/lv_draw.mk", - "include/display/lv_themes/lv_theme_alien.h", - "include/pros/colors.hpp", - "include/display/lv_objx/lv_img.h", - "firmware/libc.a", - "include/display/lv_themes/lv_theme_zen.h", - "include/display/lv_themes/lv_theme_material.h", - "include/display/lv_draw/lv_draw_arc.h", - "include/display/lv_themes/lv_theme_mono.h", - "include/display/lv_themes/lv_themes.mk", - "include/display/lv_objx/lv_slider.h", - "include/pros/serial.h", - "include/display/lv_themes/lv_theme.h", - "include/display/README.md", - "include/display/lv_objx/lv_canvas.h", - "include/pros/misc.h", - "include/display/lv_misc/lv_fs.h", - "include/pros/rtos.h", - "include/display/lv_core/lv_indev.h", - "include/pros/motors.hpp", - "include/display/lv_core/lv_style.h", - "include/display/lv_version.h", - "include/display/lv_core/lv_lang.h", - "include/api.h", - "include/display/lv_objx/lv_gauge.h", - "include/pros/rtos.hpp", - "include/display/lv_hal/lv_hal_disp.h", - "include/pros/motors.h", - "include/display/lv_objx/lv_led.h", - "include/display/lv_draw/lv_draw_rbasic.h", - "include/display/lv_objx/lv_kb.h", - "include/display/lv_conf_checker.h", - "include/display/lv_hal/lv_hal.h", - "include/display/lv_draw/lv_draw_line.h", - "include/pros/gps.hpp", - "include/display/lv_objx/lv_objx.mk", - "include/display/lv_objx/lv_win.h", - "include/display/lv_core/lv_obj.h", - "include/display/lv_objx/lv_arc.h", - "include/pros/link.h", - "include/display/lv_objx/lv_preload.h", - "include/display/lv_misc/lv_area.h", - "include/display/lv_misc/lv_ll.h", - "include/pros/optical.h", - "include/pros/serial.hpp", - "include/pros/screen.h", - "include/display/lv_themes/lv_theme_nemo.h", - "include/pros/llemu.hpp", - "firmware/libpros.a", - "include/display/lv_misc/lv_gc.h", - "include/display/lv_misc/lv_anim.h", - "include/display/lv_objx/lv_line.h", - "include/pros/distance.hpp", - "include/pros/rotation.hpp", - "include/pros/error.h", - "include/display/lv_objx/lv_tileview.h", - "include/pros/gps.h", - "include/display/lv_misc/lv_task.h", - "include/pros/imu.h", - "firmware/v5-hot.ld", - "include/display/lv_misc/lv_misc.mk", - "include/pros/colors.h", - "common.mk", - "include/display/lv_objx/lv_roller.h", - "include/display/lv_objx/lv_bar.h", - "include/display/lv_themes/lv_theme_default.h", - "firmware/v5.ld", - "include/display/lv_misc/lv_ufs.h", - "include/display/lv_hal/lv_hal_tick.h", - "include/display/licence.txt", - "include/display/lv_objx/lv_ta.h", - "include/display/lv_objx/lv_imgbtn.h", - "include/pros/adi.h" - ], + "py/object": "pros.conductor.project.Project", + "py/state": { + "project_name": "RELENTLESS", "target": "v5", - "user_files": [ - "src/main.cc", - ".gitignore", - "Makefile", - "src/main.cpp", - "src/main.c", - "include/main.hpp", - "include/main.hh", - "include/main.h" - ], - "version": "3.8.0" - }, - "okapilib": { - "location": "C:\\Users\\cjans\\AppData\\Roaming\\PROS\\templates\\okapilib@4.8.0", - "metadata": { - "origin": "pros-mainline" + "templates": { + "LemLib": { + "location": "C:\\Users\\cjans\\AppData\\Roaming\\PROS\\templates\\LemLib@0.4.7", + "metadata": { + "origin": "local" + }, + "name": "LemLib", + "py/object": "pros.conductor.templates.local_template.LocalTemplate", + "supported_kernels": "^3.8.0", + "system_files": [ + "firmware\\LemLib.a", + "include\\lemlib\\chassis\\odom.hpp", + "include\\lemlib\\pose.hpp", + "include\\lemlib\\util.hpp", + "include\\lemlib\\chassis\\trackingWheel.hpp", + "include\\lemlib\\pid.hpp", + "include\\lemlib\\api.hpp", + "include\\lemlib\\logger.hpp", + "include\\lemlib\\chassis\\chassis.hpp" + ], + "target": "v5", + "user_files": [], + "version": "0.4.7" + }, + "kernel": { + "location": "C:\\Users\\cjans\\AppData\\Roaming\\PROS\\templates\\kernel@3.8.0", + "metadata": { + "cold_addr": "58720256", + "cold_output": "bin/cold.package.bin", + "hot_addr": "125829120", + "hot_output": "bin/hot.package.bin", + "origin": "pros-mainline", + "output": "bin/monolith.bin" + }, + "name": "kernel", + "py/object": "pros.conductor.templates.local_template.LocalTemplate", + "supported_kernels": null, + "system_files": [ + "include/display/lv_core/lv_vdb.h", + "include/display/lv_core/lv_core.mk", + "include/display/lv_misc/lv_math.h", + "include/display/lv_objx/lv_tabview.h", + "include/display/lv_misc/lv_color.h", + "include/display/lv_hal/lv_hal_indev.h", + "include/display/lv_fonts/lv_fonts.mk", + "include/display/lv_misc/lv_symbol_def.h", + "include/display/lv_hal/lv_hal.mk", + "include/display/lv_themes/lv_theme_night.h", + "include/display/lv_draw/lv_draw_triangle.h", + "include/pros/optical.hpp", + "include/display/lv_draw/lv_draw_vbasic.h", + "include/display/lv_objx/lv_objx_templ.h", + "include/display/lv_core/lv_refr.h", + "include/pros/link.hpp", + "include/display/lv_objx/lv_btnm.h", + "include/display/lv_objx/lv_cb.h", + "firmware/v5-common.ld", + "include/pros/ext_adi.h", + "include/pros/rotation.h", + "include/display/lv_objx/lv_spinbox.h", + "include/display/lv_misc/lv_circ.h", + "include/display/lv_misc/lv_mem.h", + "include/display/lv_objx/lv_page.h", + "include/display/lv_objx/lv_ddlist.h", + "include/display/lv_core/lv_group.h", + "include/display/lvgl.h", + "include/display/lv_objx/lv_chart.h", + "include/pros/distance.h", + "include/display/lv_objx/lv_list.h", + "include/pros/vision.h", + "include/pros/misc.hpp", + "include/display/lv_draw/lv_draw.h", + "include/display/lv_objx/lv_label.h", + "include/display/lv_misc/lv_font.h", + "include/display/lv_draw/lv_draw_img.h", + "include/display/lv_misc/lv_log.h", + "include/display/lv_misc/lv_templ.h", + "include/pros/llemu.h", + "include/display/lv_objx/lv_btn.h", + "include/display/lv_fonts/lv_font_builtin.h", + "include/display/lv_objx/lv_calendar.h", + "firmware/libm.a", + "include/display/lv_conf.h", + "include/display/lv_objx/lv_sw.h", + "include/display/lv_draw/lv_draw_rect.h", + "include/display/lv_objx/lv_cont.h", + "include/pros/vision.hpp", + "include/display/lv_objx/lv_mbox.h", + "include/pros/adi.hpp", + "include/pros/imu.hpp", + "include/display/lv_objx/lv_table.h", + "include/pros/screen.hpp", + "include/display/lv_draw/lv_draw_label.h", + "include/display/lv_misc/lv_txt.h", + "include/pros/api_legacy.h", + "include/display/lv_objx/lv_lmeter.h", + "include/display/lv_themes/lv_theme_templ.h", + "include/pros/apix.h", + "include/display/lv_draw/lv_draw.mk", + "include/display/lv_themes/lv_theme_alien.h", + "include/pros/colors.hpp", + "include/display/lv_objx/lv_img.h", + "firmware/libc.a", + "include/display/lv_themes/lv_theme_zen.h", + "include/display/lv_themes/lv_theme_material.h", + "include/display/lv_draw/lv_draw_arc.h", + "include/display/lv_themes/lv_theme_mono.h", + "include/display/lv_themes/lv_themes.mk", + "include/display/lv_objx/lv_slider.h", + "include/pros/serial.h", + "include/display/lv_themes/lv_theme.h", + "include/display/README.md", + "include/display/lv_objx/lv_canvas.h", + "include/pros/misc.h", + "include/display/lv_misc/lv_fs.h", + "include/pros/rtos.h", + "include/display/lv_core/lv_indev.h", + "include/pros/motors.hpp", + "include/display/lv_core/lv_style.h", + "include/display/lv_version.h", + "include/display/lv_core/lv_lang.h", + "include/api.h", + "include/display/lv_objx/lv_gauge.h", + "include/pros/rtos.hpp", + "include/display/lv_hal/lv_hal_disp.h", + "include/pros/motors.h", + "include/display/lv_objx/lv_led.h", + "include/display/lv_draw/lv_draw_rbasic.h", + "include/display/lv_objx/lv_kb.h", + "include/display/lv_conf_checker.h", + "include/display/lv_hal/lv_hal.h", + "include/display/lv_draw/lv_draw_line.h", + "include/pros/gps.hpp", + "include/display/lv_objx/lv_objx.mk", + "include/display/lv_objx/lv_win.h", + "include/display/lv_core/lv_obj.h", + "include/display/lv_objx/lv_arc.h", + "include/pros/link.h", + "include/display/lv_objx/lv_preload.h", + "include/display/lv_misc/lv_area.h", + "include/display/lv_misc/lv_ll.h", + "include/pros/optical.h", + "include/pros/serial.hpp", + "include/pros/screen.h", + "include/display/lv_themes/lv_theme_nemo.h", + "include/pros/llemu.hpp", + "firmware/libpros.a", + "include/display/lv_misc/lv_gc.h", + "include/display/lv_misc/lv_anim.h", + "include/display/lv_objx/lv_line.h", + "include/pros/distance.hpp", + "include/pros/rotation.hpp", + "include/pros/error.h", + "include/display/lv_objx/lv_tileview.h", + "include/pros/gps.h", + "include/display/lv_misc/lv_task.h", + "include/pros/imu.h", + "firmware/v5-hot.ld", + "include/display/lv_misc/lv_misc.mk", + "include/pros/colors.h", + "common.mk", + "include/display/lv_objx/lv_roller.h", + "include/display/lv_objx/lv_bar.h", + "include/display/lv_themes/lv_theme_default.h", + "firmware/v5.ld", + "include/display/lv_misc/lv_ufs.h", + "include/display/lv_hal/lv_hal_tick.h", + "include/display/licence.txt", + "include/display/lv_objx/lv_ta.h", + "include/display/lv_objx/lv_imgbtn.h", + "include/pros/adi.h" + ], + "target": "v5", + "user_files": [ + "src/main.cc", + ".gitignore", + "Makefile", + "src/main.cpp", + "src/main.c", + "include/main.hpp", + "include/main.hh", + "include/main.h" + ], + "version": "3.8.0" + }, + "okapilib": { + "location": "C:\\Users\\cjans\\AppData\\Roaming\\PROS\\templates\\okapilib@4.8.0", + "metadata": { + "origin": "pros-mainline" + }, + "name": "okapilib", + "py/object": "pros.conductor.templates.local_template.LocalTemplate", + "supported_kernels": "^3.3.1", + "system_files": [ + "include/okapi/api/odometry/odomMath.hpp", + "include/okapi/squiggles/physicalmodel/physicalmodel.hpp", + "include/okapi/api/chassis/model/threeEncoderXDriveModel.hpp", + "include/okapi/api/chassis/model/hDriveModel.hpp", + "include/okapi/api/chassis/model/readOnlyChassisModel.hpp", + "include/okapi/api/device/button/buttonBase.hpp", + "include/okapi/api/units/QAngularJerk.hpp", + "include/okapi/api/control/iterative/iterativeController.hpp", + "include/okapi/api/control/controllerInput.hpp", + "include/okapi/squiggles/math/quinticpolynomial.hpp", + "include/okapi/api/device/rotarysensor/continuousRotarySensor.hpp", + "include/okapi/api/control/async/asyncPositionController.hpp", + "include/okapi/api/filter/passthroughFilter.hpp", + "include/okapi/api/device/rotarysensor/rotarySensor.hpp", + "include/okapi/api/odometry/stateMode.hpp", + "include/okapi/impl/device/controller.hpp", + "include/okapi/api/units/QTime.hpp", + "include/okapi/api/control/util/controllerRunner.hpp", + "include/okapi/api/units/QTorque.hpp", + "include/okapi/impl/device/rotarysensor/IMU.hpp", + "include/okapi/api/control/util/pidTuner.hpp", + "include/okapi/impl/util/timeUtilFactory.hpp", + "include/okapi/api/device/motor/abstractMotor.hpp", + "include/okapi/impl/device/button/controllerButton.hpp", + "include/okapi/impl/device/rotarysensor/integratedEncoder.hpp", + "include/okapi/impl/device/rotarysensor/adiEncoder.hpp", + "include/okapi/api/filter/composableFilter.hpp", + "include/okapi/api/chassis/model/xDriveModel.hpp", + "include/okapi/squiggles/geometry/pose.hpp", + "include/okapi/api/odometry/twoEncoderOdometry.hpp", + "include/okapi/api/util/timeUtil.hpp", + "firmware/squiggles.mk", + "include/okapi/api/control/async/asyncPosPidController.hpp", + "include/okapi/impl/control/util/controllerRunnerFactory.hpp", + "include/okapi/impl/chassis/controller/chassisControllerBuilder.hpp", + "include/okapi/api/control/closedLoopController.hpp", + "include/okapi/squiggles/math/utils.hpp", + "include/okapi/api/control/async/asyncVelIntegratedController.hpp", + "include/okapi/api/units/QLength.hpp", + "include/okapi/impl/device/motor/motor.hpp", + "include/okapi/api/odometry/odometry.hpp", + "include/okapi/api/units/RQuantity.hpp", + "include/okapi/api/units/QArea.hpp", + "include/okapi/api/filter/filter.hpp", + "include/okapi/api/device/button/abstractButton.hpp", + "include/okapi/api/units/QPressure.hpp", + "include/okapi/api/control/async/asyncLinearMotionProfileController.hpp", + "include/okapi/api/control/util/flywheelSimulator.hpp", + "include/okapi/api/util/logging.hpp", + "include/okapi/api/chassis/model/threeEncoderSkidSteerModel.hpp", + "include/okapi/api/filter/emaFilter.hpp", + "include/okapi/impl/device/controllerUtil.hpp", + "include/okapi/api/util/mathUtil.hpp", + "include/okapi/api/filter/averageFilter.hpp", + "include/okapi/api/control/iterative/iterativeVelocityController.hpp", + "include/okapi/api/odometry/point.hpp", + "include/okapi/api/control/async/asyncController.hpp", + "include/okapi/impl/control/async/asyncMotionProfileControllerBuilder.hpp", + "include/okapi/api/coreProsAPI.hpp", + "include/okapi/api/units/QSpeed.hpp", + "include/okapi/impl/control/util/pidTunerFactory.hpp", + "include/okapi/api/units/QAngle.hpp", + "include/okapi/api/control/async/asyncVelocityController.hpp", + "include/okapi/api/odometry/threeEncoderOdometry.hpp", + "include/okapi/api/filter/velMath.hpp", + "include/okapi/api/control/async/asyncPosIntegratedController.hpp", + "include/okapi/squiggles/constraints.hpp", + "include/okapi/api/filter/filteredControllerInput.hpp", + "include/okapi/api/chassis/controller/chassisControllerPid.hpp", + "include/okapi/api/control/iterative/iterativePositionController.hpp", + "include/okapi/api/control/offsettableControllerInput.hpp", + "include/okapi/squiggles/squiggles.hpp", + "include/okapi/api/units/QAngularSpeed.hpp", + "include/okapi/api/control/iterative/iterativePosPidController.hpp", + "include/okapi/squiggles/physicalmodel/tankmodel.hpp", + "include/okapi/impl/util/rate.hpp", + "include/okapi/api/filter/medianFilter.hpp", + "include/okapi/impl/device/rotarysensor/potentiometer.hpp", + "include/okapi/api/control/iterative/iterativeVelPidController.hpp", + "include/okapi/squiggles/geometry/profilepoint.hpp", + "include/okapi/impl/device/button/adiButton.hpp", + "include/okapi/impl/control/async/asyncVelControllerBuilder.hpp", + "include/okapi/api/filter/demaFilter.hpp", + "include/okapi/api/units/RQuantityName.hpp", + "include/okapi/api/control/util/pathfinderUtil.hpp", + "include/okapi/api/util/abstractTimer.hpp", + "include/okapi/api.hpp", + "include/okapi/impl/control/async/asyncPosControllerBuilder.hpp", + "include/okapi/api/chassis/controller/chassisScales.hpp", + "include/okapi/api/units/QMass.hpp", + "include/okapi/impl/device/rotarysensor/adiGyro.hpp", + "include/okapi/impl/util/configurableTimeUtilFactory.hpp", + "include/okapi/api/control/util/settledUtil.hpp", + "include/okapi/impl/control/iterative/iterativeControllerFactory.hpp", + "include/okapi/impl/util/timer.hpp", + "include/okapi/api/chassis/controller/defaultOdomChassisController.hpp", + "include/okapi/impl/device/motor/motorGroup.hpp", + "include/okapi/api/control/async/asyncWrapper.hpp", + "include/okapi/squiggles/io.hpp", + "include/okapi/api/filter/ekfFilter.hpp", + "include/okapi/api/control/async/asyncMotionProfileController.hpp", + "include/okapi/squiggles/geometry/controlvector.hpp", + "include/okapi/impl/device/distanceSensor.hpp", + "include/okapi/api/control/controllerOutput.hpp", + "include/okapi/api/units/QVolume.hpp", + "include/okapi/squiggles/spline.hpp", + "include/okapi/api/units/QJerk.hpp", + "include/okapi/api/chassis/controller/chassisController.hpp", + "include/okapi/squiggles/physicalmodel/passthroughmodel.hpp", + "include/okapi/api/units/QAngularAcceleration.hpp", + "include/okapi/api/chassis/controller/chassisControllerIntegrated.hpp", + "include/okapi/impl/device/adiUltrasonic.hpp", + "include/okapi/impl/device/opticalSensor.hpp", + "include/okapi/api/units/QForce.hpp", + "include/okapi/api/util/supplier.hpp", + "include/okapi/api/chassis/controller/odomChassisController.hpp", + "include/okapi/impl/filter/velMathFactory.hpp", + "include/okapi/api/control/iterative/iterativeMotorVelocityController.hpp", + "include/okapi/api/control/async/asyncVelPidController.hpp", + "include/okapi/api/odometry/odomState.hpp", + "include/okapi/api/chassis/model/chassisModel.hpp", + "include/okapi/api/units/QFrequency.hpp", + "include/okapi/impl/device/rotarysensor/rotationSensor.hpp", + "include/okapi/api/util/abstractRate.hpp", + "include/okapi/impl/device/motor/adiMotor.hpp", + "include/okapi/api/units/QAcceleration.hpp", + "include/okapi/api/chassis/model/skidSteerModel.hpp", + "firmware/okapilib.a" + ], + "target": "v5", + "user_files": [], + "version": "4.8.0" + } }, - "name": "okapilib", - "py/object": "pros.conductor.templates.local_template.LocalTemplate", - "supported_kernels": "^3.3.1", - "system_files": [ - "include/okapi/api/odometry/odomMath.hpp", - "include/okapi/squiggles/physicalmodel/physicalmodel.hpp", - "include/okapi/api/chassis/model/threeEncoderXDriveModel.hpp", - "include/okapi/api/chassis/model/hDriveModel.hpp", - "include/okapi/api/chassis/model/readOnlyChassisModel.hpp", - "include/okapi/api/device/button/buttonBase.hpp", - "include/okapi/api/units/QAngularJerk.hpp", - "include/okapi/api/control/iterative/iterativeController.hpp", - "include/okapi/api/control/controllerInput.hpp", - "include/okapi/squiggles/math/quinticpolynomial.hpp", - "include/okapi/api/device/rotarysensor/continuousRotarySensor.hpp", - "include/okapi/api/control/async/asyncPositionController.hpp", - "include/okapi/api/filter/passthroughFilter.hpp", - "include/okapi/api/device/rotarysensor/rotarySensor.hpp", - "include/okapi/api/odometry/stateMode.hpp", - "include/okapi/impl/device/controller.hpp", - "include/okapi/api/units/QTime.hpp", - "include/okapi/api/control/util/controllerRunner.hpp", - "include/okapi/api/units/QTorque.hpp", - "include/okapi/impl/device/rotarysensor/IMU.hpp", - "include/okapi/api/control/util/pidTuner.hpp", - "include/okapi/impl/util/timeUtilFactory.hpp", - "include/okapi/api/device/motor/abstractMotor.hpp", - "include/okapi/impl/device/button/controllerButton.hpp", - "include/okapi/impl/device/rotarysensor/integratedEncoder.hpp", - "include/okapi/impl/device/rotarysensor/adiEncoder.hpp", - "include/okapi/api/filter/composableFilter.hpp", - "include/okapi/api/chassis/model/xDriveModel.hpp", - "include/okapi/squiggles/geometry/pose.hpp", - "include/okapi/api/odometry/twoEncoderOdometry.hpp", - "include/okapi/api/util/timeUtil.hpp", - "firmware/squiggles.mk", - "include/okapi/api/control/async/asyncPosPidController.hpp", - "include/okapi/impl/control/util/controllerRunnerFactory.hpp", - "include/okapi/impl/chassis/controller/chassisControllerBuilder.hpp", - "include/okapi/api/control/closedLoopController.hpp", - "include/okapi/squiggles/math/utils.hpp", - "include/okapi/api/control/async/asyncVelIntegratedController.hpp", - "include/okapi/api/units/QLength.hpp", - "include/okapi/impl/device/motor/motor.hpp", - "include/okapi/api/odometry/odometry.hpp", - "include/okapi/api/units/RQuantity.hpp", - "include/okapi/api/units/QArea.hpp", - "include/okapi/api/filter/filter.hpp", - "include/okapi/api/device/button/abstractButton.hpp", - "include/okapi/api/units/QPressure.hpp", - "include/okapi/api/control/async/asyncLinearMotionProfileController.hpp", - "include/okapi/api/control/util/flywheelSimulator.hpp", - "include/okapi/api/util/logging.hpp", - "include/okapi/api/chassis/model/threeEncoderSkidSteerModel.hpp", - "include/okapi/api/filter/emaFilter.hpp", - "include/okapi/impl/device/controllerUtil.hpp", - "include/okapi/api/util/mathUtil.hpp", - "include/okapi/api/filter/averageFilter.hpp", - "include/okapi/api/control/iterative/iterativeVelocityController.hpp", - "include/okapi/api/odometry/point.hpp", - "include/okapi/api/control/async/asyncController.hpp", - "include/okapi/impl/control/async/asyncMotionProfileControllerBuilder.hpp", - "include/okapi/api/coreProsAPI.hpp", - "include/okapi/api/units/QSpeed.hpp", - "include/okapi/impl/control/util/pidTunerFactory.hpp", - "include/okapi/api/units/QAngle.hpp", - "include/okapi/api/control/async/asyncVelocityController.hpp", - "include/okapi/api/odometry/threeEncoderOdometry.hpp", - "include/okapi/api/filter/velMath.hpp", - "include/okapi/api/control/async/asyncPosIntegratedController.hpp", - "include/okapi/squiggles/constraints.hpp", - "include/okapi/api/filter/filteredControllerInput.hpp", - "include/okapi/api/chassis/controller/chassisControllerPid.hpp", - "include/okapi/api/control/iterative/iterativePositionController.hpp", - "include/okapi/api/control/offsettableControllerInput.hpp", - "include/okapi/squiggles/squiggles.hpp", - "include/okapi/api/units/QAngularSpeed.hpp", - "include/okapi/api/control/iterative/iterativePosPidController.hpp", - "include/okapi/squiggles/physicalmodel/tankmodel.hpp", - "include/okapi/impl/util/rate.hpp", - "include/okapi/api/filter/medianFilter.hpp", - "include/okapi/impl/device/rotarysensor/potentiometer.hpp", - "include/okapi/api/control/iterative/iterativeVelPidController.hpp", - "include/okapi/squiggles/geometry/profilepoint.hpp", - "include/okapi/impl/device/button/adiButton.hpp", - "include/okapi/impl/control/async/asyncVelControllerBuilder.hpp", - "include/okapi/api/filter/demaFilter.hpp", - "include/okapi/api/units/RQuantityName.hpp", - "include/okapi/api/control/util/pathfinderUtil.hpp", - "include/okapi/api/util/abstractTimer.hpp", - "include/okapi/api.hpp", - "include/okapi/impl/control/async/asyncPosControllerBuilder.hpp", - "include/okapi/api/chassis/controller/chassisScales.hpp", - "include/okapi/api/units/QMass.hpp", - "include/okapi/impl/device/rotarysensor/adiGyro.hpp", - "include/okapi/impl/util/configurableTimeUtilFactory.hpp", - "include/okapi/api/control/util/settledUtil.hpp", - "include/okapi/impl/control/iterative/iterativeControllerFactory.hpp", - "include/okapi/impl/util/timer.hpp", - "include/okapi/api/chassis/controller/defaultOdomChassisController.hpp", - "include/okapi/impl/device/motor/motorGroup.hpp", - "include/okapi/api/control/async/asyncWrapper.hpp", - "include/okapi/squiggles/io.hpp", - "include/okapi/api/filter/ekfFilter.hpp", - "include/okapi/api/control/async/asyncMotionProfileController.hpp", - "include/okapi/squiggles/geometry/controlvector.hpp", - "include/okapi/impl/device/distanceSensor.hpp", - "include/okapi/api/control/controllerOutput.hpp", - "include/okapi/api/units/QVolume.hpp", - "include/okapi/squiggles/spline.hpp", - "include/okapi/api/units/QJerk.hpp", - "include/okapi/api/chassis/controller/chassisController.hpp", - "include/okapi/squiggles/physicalmodel/passthroughmodel.hpp", - "include/okapi/api/units/QAngularAcceleration.hpp", - "include/okapi/api/chassis/controller/chassisControllerIntegrated.hpp", - "include/okapi/impl/device/adiUltrasonic.hpp", - "include/okapi/impl/device/opticalSensor.hpp", - "include/okapi/api/units/QForce.hpp", - "include/okapi/api/util/supplier.hpp", - "include/okapi/api/chassis/controller/odomChassisController.hpp", - "include/okapi/impl/filter/velMathFactory.hpp", - "include/okapi/api/control/iterative/iterativeMotorVelocityController.hpp", - "include/okapi/api/control/async/asyncVelPidController.hpp", - "include/okapi/api/odometry/odomState.hpp", - "include/okapi/api/chassis/model/chassisModel.hpp", - "include/okapi/api/units/QFrequency.hpp", - "include/okapi/impl/device/rotarysensor/rotationSensor.hpp", - "include/okapi/api/util/abstractRate.hpp", - "include/okapi/impl/device/motor/adiMotor.hpp", - "include/okapi/api/units/QAcceleration.hpp", - "include/okapi/api/chassis/model/skidSteerModel.hpp", - "firmware/okapilib.a" - ], - "target": "v5", - "user_files": [], - "version": "4.8.0" - } - }, - "upload_options": { - "description": "fuhtiggle bang tookah tang", - "icon": "planet" + "upload_options": { + "description": "fuhtiggle bang tookah tang", + "icon": "planet" + } } - } } \ No newline at end of file diff --git a/RELENTLESS/src/main.cpp b/RELENTLESS/src/main.cpp index c2fbbf5..e5cce7a 100644 --- a/RELENTLESS/src/main.cpp +++ b/RELENTLESS/src/main.cpp @@ -1,4 +1,5 @@ #include "main.h" +#include "lemlib/api.hpp" /** * A callback function for LLEMU's center button.