10703Z Change Up Reveal

Through the four seasons I’ve been in VEX, I’ve always wanted to do a reveal video, but I never got around to it. Well, now that I’m a senior, this is my last chance, so here it is!

I’m a one-girl team this season, and this is my first season building, so the design of my robot is fairly simple. My strongest areas are the Engineering Design Notebook and programming (hence the EDN and code you’ll see in the reveal). Hope you enjoy!

Robot Specs
  • 4 motor X-Drive, 200 rpm on 3.25 inch wheels
  • 2 motor intakes, 200 rpm back flex wheels / 400 rpm front flex wheels
  • 1 motor conveyor, 600 rpm (bottom three rubberband rollers)
  • 1 motor sorter, 600 rpm top back rubberband roller / 1200 rpm top front rubberband roller
Sensors (excluding the built-in motor encoders)
  • 4 distance sensors for ball positioning and scoring
  • 2 optical sensors for identifying the color of balls in the conveyor (allows for automatic sorting)
  • 1 inertial sensor for accurate turning and translation drift correction when accelerating and decelerating in autonomous
  • 2 line trackers to stop at the autonomous line
  • 2 potentiometers, which are not currently in use due to inconsistency caused by false positives (they do provide additional stability for my intakes, however)
Programming
  • functions for driving forward / backward and strafing left / right with parameters to pass in the percentage of acceleration and deceleration desired in each individual run, the distance to travel, and the max speed; these have built-in translational drift correction with the inertial sensor’s accelerometer (when accelerating or decelerating) and the built-in motor encoders (when driving at the constant max speed)
  • automatic sorting toggle between red, blue, and off
  • driver macros with automatic sorting for scoring one or two balls, collecting balls, simultaneously scoring and descoring, and disposing
  • trigonometry to accurately move from one goal to another based on the angle of the robot at the initial goal
  • 15-second autonomous routine options: corner goal cycle (left or right sides), corner goal cycle with scoring the center (left side only), two goal cycle on the home row (left or right sides), home row (right side only)
Shoutouts

There were many incredible teams at the 2021 TN State Championship this past weekend, and even though I won Excellence and Robot Skills Champion, things could easily have gone differently! Every team has good and bad days at competitions.
I’d like to give a shoutout to a few of my TN pals (although this is certainly not an exhaustive list; all of the teams I’ve had the opportunity to compete with have been fantastic!):

  • to 2775J (@2775Josh), who currently have the highest skills score in TN in the World Skills Standings and have helped me a lot this season;
  • to 98709C, who have the highest programming skills score in TN and came REALLY close to beating me in skills at State;
  • to 663B (@Zeta ), who have had an amazing season and been such strong competitors as well as great friends;
  • to 63303V (@Eli_63303 ), who have always been so encouraging - I’m sorry you were unable to come to State in-person!

Also, I was fortunate enough to receive some excellent feedback on my EDN last season, and that has helped me improve so much this season. A big thank you to the judge advisor who took the time to impart some of his expertise!

If anyone has any questions for me, regarding my robot, EDN, programming, what it’s like to be a solo team, etc., I’d love to hear from you!

40 Likes

Amazing!

Major props to you for a great robot (programming, build, and all) and incredible notebook!

5 Likes

Nice to see such good bots coming from TN! I was volunteering at IQ states, since my team didn’t make it, but I still plan to go back and rewatch some of the livestream.

2 Likes

The robot looks great, but that notebook though :heart_eyes: :heart_eyes:

12 Likes

I love how the reveal is not just about the robot, but the notebook and the code too. Wish we saw more reveals like that.

6 Likes

that’s an impressively well rounded operation you run there for just one person!

7 Likes

Good Job! I hope to be able to do that when im a senior!

1 Like

Awesome bot and even more impressive notebook! It was fun competing with you in Bluff City back in March!

4 Likes

your notebook and programming are very impressive to me.
Can you send engineer notebooks and programming after finish season or if you want now? Please?
I am two years at VEX VRC and still learn about notebook and programming.

1 Like

Awesome robot, notebook, and programming! You are amazing and it was so great to alliance with you so many times, we couldn’t have ever asked for a better alliance partner. Thank you for some of the best matches and competitions we’ve ever had!!

Team 63303V

5 Likes

Awesome reveal! It looks like we’ll be reviewing those notebook leeks :rofl: :pensive: It’s been a great few seasons; congrats on skills and excellence and good luck in your post-high school endeavors. Thanks for the shoutout (and for carrying us at FRA!)
:v: :v: :v: :v:

8 Likes

@trontech569, @Sidoti, @Xenon27, and @Vexation-15486H : Thank you all for your kind words! It’s been a lot of hard work, but a great learning experience and very fun!

@VexTeamZ: I wholeheartedly agree with this. I’ve always thought EDNs could use a bit of attention!

@1691A Thank you so much! Yeah, that competition was a blast! Y’all are absolutely amazing, and it was great to work with y’all!

@Tiezzz03 I’ve actually gotten a number of requests to post a link to my full EDN and code. I’ll be working on both up until Worlds, but after that, I’d be glad to post the completed versions of these. And I’d be happy to answer any specific questions you have in the meantime. I hope this helps!

@Eli_63303 Thank you so much! It’s always wonderful to work with y’all! Best of luck in the coming seasons - I know you’ll put East TN on the map! :smile:

@2775Josh Thank you so much! I know y’all already have a great notebook, but since it sounds like you are trying to improve, let me know if there’s anything I can do to help :wink: And I wouldn’t say I carried y’all at FRA. That two-goal-and-center autonomous was killer. It was a good team effort either way, and definitely one of the highlights of the season for me!

12 Likes

Thanks for post it.
I wonder, know how you made the buttons on the brain’s LCD?
That is my struggle. I tried made it but it was fail. I read other message from forum. It not much help me understand fully. I hope you will a lots of help me.
Like choice the 4 autonomous by buttons on the Brain’s LCD mean will a lots of save on the 8 programming files.

@Tiezzz03: Yeah, the brain screen autonomous selector can be tricky, but it’s very useful once you get it figured out!

The exact code depends on how you want the selector to function. For example, you’d need to consider if you want two buttons to be able to both be selected at the same time. Or, instead, you might want a toggle that so that only one option can be selected at once (such as left side or right side).

Furthermore, you need to think about how user-friendly you want it to be. Personally, I’ve made mine so that I can toggle back and forth until I select “ready” (and I have a condition so that at least one button must be selected before “ready” is available to be selected). Once I select “ready”, whatever buttons I’ve selected, and the boolean flags that are assigned with each button, are locked in until the program is ended and started again.

A much simpler option would be to omit a “ready” button and just check for whatever button is pressed first, and go with that. Of course, if you select the wrong button, you would need to end the program and restart in order to change your selection, but that might not be a huge concern for you.

Here’s some general pseudocode of how I do it with the “ready” button. I’m sure that there are much shorter and more efficient methods of doing this, but this is the way I’ve found to be effective (@jpearman could most likely share some ways to improve this). Again, this code is pseudocode and will not work verbatim, but it should give you an idea of the concept.

Pseudocode
bool button1 = false, button2 = false, ready = false;

/* you'll also want to add constant integer values for the dimensions of each button 
(in pixels). these will be used to draw the shape of the button as well as to define 
the region of the brain screen which, when pressed, will change the boolean flag for 
that button to true. I've found it to be easier to use an array for the coordinates 
of each button (this pseudocode assumes you are using a rectangle for the button),
but you could easily just have individual constants for this */
int button1Coordinates[6] = {left x, right x, top y, bottom y, width, height};
int button2Coordinates[6] = {left x, right x, top y, bottom y, width, height};
int readyCoordinates[6] = {left x, right x, top y, bottom y, width, height};

/* now you would print what you want the initial brain screen to be prior to any selections. you can use Brain.Screen.setFont(), 
Brain.Screen.setFillColor(), Brain.Screen.setPenColor(), Brain.Screen.setPenWidth(), etc. to customize your brain screen exactly the way 
you want it to look. you can use the constants above (or reference the appropriate index, if you've used arrays) to draw the button */
Brain.Screen.drawRectangle(button1Coordinates[0], button1Coordinates[2], button1Coordinates[4], button1Coordinates[5]);
Brain.Screen.drawRectangle(button2Coordinates[0], button2Coordinates[2], button2Coordinates[4], button2Coordinates[5]);
Brain.Screen.drawRectangle(readyCoordinates[0], readyCoordinates[2], readyCoordinates[4], readyCoordinates[5]);

Brain.Screen.printAt(x coordinate where you want the text to start, y coordinate where you want the text to start, "button1 label");
Brain.Screen.printAt(x coordinate where you want the text to start, y coordinate where you want the text to start, "button2 label");
Brain.Screen.printAt(x coordinate where you want the text to start, y coordinate where you want the text to start, "ready");

while(ready == false) {
	/* here's where button1 is toggled on. use the coordinates from above to check the region defined as button1 */
	if(Brain.Screen.xPosition() > button1Coordinates[0] && Brain.Screen.xPosition() < button1Coordinates[1]
	&& Brain.Screen.yPosition() > button1Coordinates[2] && Brain.Screen.yPosition() < button1Coordinates[3]
	&& button1 == false) {
	
	  /* set the flags according to which button is pressed and if any other buttons need to be toggled off by button1 being pressed */
	  button1 = true;
	  button2 = false;
	  
	  /* here you would clear the screen and print what you want to screen to look like now that button1 has been pressed. you would use similar 
commands as above, specifically Brain.Screen.drawRectangle() and Brain.Screen.printAt() */
	}

	/* now, you'd do the same thing for button2 */
	else if(Brain.Screen.xPosition() > button2Coordinates[0] && Brain.Screen.xPosition() < button2Coordinates[1]
	&& Brain.Screen.yPosition() > button2Coordinates[2] && Brain.Screen.yPosition() < button2Coordinates[3]
	&& button2 == false) {
	  /* set the flags according to which button is pressed and if any other buttons need to be toggled off by button2 being pressed */
	  button2 = true;
	  button1 = false;
	  
	  /* again, here you would clear the screen and print what you want to screen to look like when that button2 has been pressed. */
	}

	/* and now for the ready button. I have an extra condition on this one. this code cannot run unless either button1 or button2 have been selected */
	else if(Brain.Screen.xPosition() > readyCoordinates[0] && Brain.Screen.xPosition() < readyCoordinates[1]
	&& Brain.Screen.yPosition() > readyCoordinates[2] && Brain.Screen.yPosition() < readyCoordinates[3]
	&& (button1 == true || button2 == true)) {
	  ready = true; /* this flag will end the while loop as soon as the current iteration finishes */
	  
	  /* again, here you would print what you would like see on the brain screen once ready is selected */
	}
}

This code goes at the beginning of the pre_auton void function that is built into the competition template. Immediately after this while loop, you would put anything else that you need to run during the pre_auton period (for example, I reset the motor encoders, calibrate my inertial sensor, and check the color of the preload for automatic sorting during driver control).

Keep in mind that because of the while loop, no other code (i.e. autonomous or usercontrol) will execute until “ready” is selected, even if enabled with a competition switch or a field control system!

Hopefully this will help. Let me know if any of this is unclear, or if you have any more questions!

8 Likes

Wow Just Wow, This is my first year and I was by myself as well and I wish I could have done this amazing. I hope if you did make it to worlds that you do amazing.

3 Likes

@ColtTheBolt08: Being a solo team is no easy feat! There’s no way I could have done it my first year. My advice to you would be keep at it and learn from other teams! I can’t tell you how much I learned from talking to other teams in my region, and one of the great things about VEX is that everyone is always super willing to help others. And, hey, let me know if there’s anything I can do to help as well!

By the way, I did qualify for Worlds as a one-person team, and with a LOT of hard work, I bet you can too!

4 Likes

BrainSTEM: “This is my first season building, so the design of my robot is fairly simple”

Also BrainSTEM: Creates bada$$ X-Drive, automated sorting conveyor, insane design notebook.

That is an awesome build and EDN, well done!

4 Likes

Wow! You have a very impressive robot, program, and notebook for just a one person team! I’ll definitely be studying those notebook shots to improve my own notebook haha. Really impressive and congrats on skills champion and excellence at states!

3 Likes

@9181X_Austin: Thank you!

@AA1353: Thank you so much! I hope it’s helpful for you; it’s always good to see teams improving their EDNs! Let me know if you have any questions.

2 Likes

I’ll be sure to! Thanks!

1 Like