1516X Push Back 1.0
1516X's robot code for the 2025-2026 VEX Robotics Competition
Loading...
Searching...
No Matches
autonFunctions.cpp
Go to the documentation of this file.
1#include "main.h"
2#include "globals.h"
3#include "pros/misc.h"
4#include "lemlib/api.hpp"
5#include "lemlib/util.hpp"
6#include "MCL.h"
7#include "pros/motors.h"
8#include "pros/rtos.hpp"
9#include <cmath>
10#include "colorSort.h"
11
12void intake(int power = 12000)
13{
14 intakeMotor.move_voltage(power);
15 topMotor.set_brake_mode(pros::E_MOTOR_BRAKE_HOLD);
16 topMotor.brake();
17}
18
19void outtake(int power = 12000)
20{
21 intakeMotor.move_voltage(-power);
22}
23
24void score_bottomgoal(int power = 12000)
25{
26 intakeMotor.move_voltage(-power);
27}
28
29void score_longgoal(int power = 12000, Color allianceColor = Color::RED)
30{
31 intake(power);
32 if(get_color() != allianceColor && get_color() != Color::NONE && color_sort_enable)
33 {
34 topMotor.move_voltage(-12000);
35 std::cout << "Color Rejected" << std::endl;
36 }
37 else
38 {
39 topMotor.move_voltage(power);
40 std::cout << "Color Accepted" << std::endl;
41 }
42 pros::delay(33);
43
44}
45
47{
48 intakeMotor.move_voltage(0);
49 topMotor.move_voltage(0);
50}
51
52void score_midgoal(int power = 12000)
53{
54 if(get_color() != allianceColor && get_color() != Color::NONE && color_sort_enable)
55 {
56 topMotor.move_voltage(-8000);
57 }
58 else {
59 topMotor.move_voltage(12000);
60 }
62 {
63 outtake(8000);
64 topMotor.move_voltage(-12000);
65 pros::delay(300);
66 midgoal_first = false;
67 }
68 intake(power);
69 topMotor.move_voltage(power);
70 if(!trapDoor.is_extended()) trapDoor.extend();
71}
72
73void score_longgoal_auton(int power = 12000, Color allianceColor = Color::RED)
74{
75 leftMotors.move(-20);
76 rightMotors.move(-20);
78}
79
81{
82 intake();
83 topMotor.move_voltage(-6000);
84}
85
86
87
88void resting_state(bool trapDoor_commanded = false)
89{
91 if(!trapDoor_commanded)
92 trapDoor.retract();
93 topMotor.set_brake_mode(pros::E_MOTOR_BRAKE_COAST);
94 descore.extend();
95}
96
97void matchload_state(bool state)
98{
99 if(state && !matchload.is_extended())
100 {
101 matchload.extend();
102 }
103 else if(matchload.is_extended())
104 {
105 matchload.retract();
106 }
107 else {
108 std::cout << "Matchload state unchanged\n" << std::endl;
109 }
110}
111
113{
114
115}
116
118{
119
120}
121
122void matchload_wiggle(int time = 1000, int speed = 100)
123{
124 u_int32_t start_time = pros::millis();
125 int sign = 1;
126 while(pros::millis() - start_time < time)
127 {
128 leftMotors.move_voltage(3000 * sign);
129 rightMotors.move_voltage(3000 * sign);
130 sign *= -1;
131 pros::delay(speed);
132 }
133 leftMotors.brake();
134 rightMotors.brake();
135}
136
137void MCL_reset(bool x = true, bool y = true)
138{
139 MCL::particle_mutex.take();
140 float X = x ? MCL::X : chassis.getPose().x;
141 float Y = y ? MCL::Y : chassis.getPose().y;
142 MCL::particle_mutex.give();
143 chassis.setPose(X, Y, chassis.getPose().theta);
144}
145
146pros::Task* fusionTask = nullptr;
147
148void fusion_loop_fn(void* ignore) {
149 const uint32_t LOOP_DELAY_MS = 10;
150 uint32_t start_time = pros::millis();
151
152 const float MCL_GAIN = 0.05f;
153
154 while (true) {
155 lemlib::Pose odomPose = chassis.getPose(true);
156
157 MCL::particle_mutex.take();
158 float target_x = MCL::X;
159 float target_y = MCL::Y;
160 MCL::particle_mutex.give();
161
162 float new_x = odomPose.x + (target_x - odomPose.x) * MCL_GAIN;
163 float new_y = odomPose.y + (target_y - odomPose.y) * MCL_GAIN;
164 chassis.setPose(new_x, new_y, odomPose.theta);
165
166 pros::Task::delay_until(&start_time, LOOP_DELAY_MS);
167 }
168}
169
170void enable_fused_odometry(bool enable) {
171 if (enable) {
172 if (fusionTask == nullptr) {
173 fusionTask = new pros::Task(fusion_loop_fn, NULL, "MCL_Fusion");
174 }
175 } else {
176 if (fusionTask != nullptr) {
177 fusionTask->remove();
178 delete fusionTask;
179 fusionTask = nullptr;
180 }
181 }
182}
183
184void relativeMotion(float expected_x, float expected_y, float expected_theta, float distance, int timeout_ms, bool forw = true, float earlyExit = 0)
185{
186 lemlib::Pose targetPose(
187 expected_x + distance * std::sin(lemlib::degToRad(expected_theta)),
188 expected_y + distance * std::cos(lemlib::degToRad(expected_theta)),
189 expected_theta
190 );
191
192 chassis.moveToPoint(targetPose.x, targetPose.y, timeout_ms, {.forwards = forw, .earlyExitRange = earlyExit});
193}
194
195void matchload_counter(int balls, int time_ms)
196{
197 pros::Task counter_task([=]() {
198 int count = 0;
199 uint32_t start_time = pros::millis();
200 while(pros::millis() - start_time < time_ms && count < balls)
201 {
202 start_time = pros::millis();
203 if(frontDistance.get_object_size() <= 70)
204 {
205 count++;
206 }
207 pros::Task::delay_until(&start_time, 10);
208 }
209 intake_stop();
210 pros::Task::current().remove();
211 });
212}
213
214
215
pros::Task * fusionTask
void outtake(int power=12000)
void intake(int power=12000)
void MCL_reset(bool x=true, bool y=true)
void score_longgoal_auton(int power=12000, Color allianceColor=Color::RED)
void longgoal_prep()
void intake_to_basket()
void matchload_wiggle(int time=1000, int speed=100)
void fusion_loop_fn(void *ignore)
void enable_fused_odometry(bool enable)
void score_longgoal(int power=12000, Color allianceColor=Color::RED)
void matchload_state(bool state)
void score_midgoal(int power=12000)
void reset_odometry()
void relativeMotion(float expected_x, float expected_y, float expected_theta, float distance, int timeout_ms, bool forw=true, float earlyExit=0)
void score_bottomgoal(int power=12000)
void matchload_counter(int balls, int time_ms)
void intake_stop()
void resting_state(bool trapDoor_commanded=false)
Color get_color()
Definition colorSort.cpp:5
pros::Motor topMotor(7, pros::v5::MotorGears::blue)
pros::adi::Pneumatics trapDoor('A', false)
pros::Motor intakeMotor(18, pros::v5::MotorGears::blue)
pros::Distance frontDistance(13)
bool color_sort_enable
Definition globals.cpp:94
pros::adi::Pneumatics descore('D', false)
Color allianceColor
Definition globals.cpp:93
bool midgoal_first
Definition globals.cpp:95
pros::adi::Pneumatics matchload('B', false)
pros::MotorGroup rightMotors
lemlib::Chassis chassis
pros::MotorGroup leftMotors
Definition globals.cpp:20
double Y
Definition MCL.cpp:10
double X
Definition MCL.cpp:10
pros::Mutex particle_mutex
Definition MCL.cpp:31