Loading...
Loading...
Loading...
Loading...
Loading...
This chapter will go over items related to organizing and maintaining a team.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This page will include information on modifying a battery-powered car to be used as a mobility device.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This page will breakdown the Woodie Flowers award and give examples of past submissions.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This chapter will explain how to wire a robot and use pneumatics.
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This chapter will cover the basics of maintaining files and a complete revision history
Loading...
Loading...
Loading...
Loading...
This page will explain how to use git's command line interface to perform actions with the tool.
Loading...
This chapter will cover the basics of HTML, CSS, and JavaScript so that people can update the team website. It will also discuss Node.js, Express, and SQL databases so that people can develop the scou
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This chapter will go over important business topics such as how to interact with companies, how to raise money, how to do meaningful outreach, how to coordinate Junior Bots summer camps, how to write.
The preseason lasts from September through December. During this time, teams recruit new members, develop technical skills, and raise money to fund the rest of the season. This part of the year normally involves a couple meetings per week, but it is much more relaxed than the build season and the competition season.
The build season runs from January through April. This is the time of year when teams actually work on a robot for competition.
Immediately after kickoff, teams work to prioritize what challenges in the game they want to address. Then, they begin designing, prototyping, building, wiring, programming, and testing. This part of the season requires a large time commitment. Our team often meets five days each week at the beginning of the build season. By the end, we sometimes have to meet every day to get ready for competitions in time.
The competition season goes from early March to late April. This overlaps with the end of the build season, so after a competition, a team can improve its robot to better prepare for the next competition.
There are six weeks of official competition prior to the world championship every year. These run from early March to early April. Most years, our team competes in two regional competitions. These competitions normally involve traveling on Wednesday, practicing on Thursday, and competing on Friday and Saturday. We return Saturday or Sunday depending on how long it takes to drive home. Some common destinations for our regional competitions are Cedar Falls, La Crosse, and Duluth.
Teams that win certain awards at regional competitions (such as winning the event or winning the Chairman's award) qualify for the FIRST Championship. There are actually two championship events that take place in different weeks at the end of April: one in Houston and one in Detroit. The championship a team attends depends on where the regional at which they qualify is located. Our regionals almost always qualify us for the championship in Detroit.
Worlds is slightly longer event than a regional competition. We normally travel on Tuesday, practice on Wednesday, and compete on Thursday, Friday, and Saturday.
*Some places don't have regional competitions. Instead, they have district competitions, which are shorter. Then, teams advance to the district championship based on a complicated point system. The best teams at the district championship advance to worlds. One place that uses this model is Michigan, but since Iowa does not, it is not directly relevant to our team.
After the stress of the competition season, the offseason is much more lax. This part of the season takes place from May to August. Our team meets once a week, and we use the time to raise money, organize outreach events in the community, and plan summer camps.
In addition, we sometimes attend offseason competitions. These events are unofficial, and they are shorter and cheaper than regional competitions. They give us a chance to train new drivers and keep people engaged over the summer.
Welcome to the FRC 167 Documentation! In writing these docs, our team has two main motivations:
With each graduating class, it seems like we lose lots of collective knowledge. This limits the success of the team in the future since members spend time relearning concepts and repeating mistakes of the past. The COVID-19 pandemic has exacerbated this effect by limiting the time veteran members have to train new members and robbing everyone of experience. Preventing this from happening will help our team become more competitive.
In addition, certain subteams on our team regularly have trouble effectively teaching new team members. For instance, the programming subteam struggles to teach new members how to code when lots of people come in with absolutely zero experience. This causes many new members to quit the team because they struggle to find a role for themselves. Fixing this will promote the long-term health of the team.
To solve these issues, we've created these docs. They are an ever-expanding record of how different parts of our team operate and what people need to know to succeed. The goal is to teach new members how to be useful on the team and to prevent knowledge from being lost when old members graduate.
Since this is primarily intended for internal use by team 167, there might be some sections that do not apply to other teams. Nevertheless, the vast majority of the content should be applicable to most FRC teams. So, if you'd like to use this as a resource for your team, feel free.
This section will discuss what FRC is and how it fits into FIRST's set of programs and goals.
FIRST (For the Inspiration and Recognition of Science and Technology) is a global nonprofit organization headquartered in Manchester, NH. According to its website:
FIRST inspires young people to be science and technology leaders and innovators by engaging them in exciting mentor-based programs that build science, engineering, and technology skills, that inspire innovation, and that foster well-rounded life capabilities including self-confidence, communication, and leadership.
In summary, FIRST promotes STEM education by organizing robotics programs for students of all ages. Their three programs are FIRST LEGO League, FIRST Tech Challenge, and FIRST Robotics Competition.
FIRST LEGO League (FLL) is a program for kids from preschool to eighth grade. It is subdivided into three programs: FLL Discover (Pre-K - Grade 1), FLL Explore (Grades 2 - 4), and FLL Challenge (Grades 4 - 8). The first two divisions are simply research and exploration challenges for young students. FLL Challenge is a competition where teams work with LEGO MINDSTORMS kits and block programming to complete various tasks on a tabletop.
FIRST Tech Challenge (FTC) is a robotics competition for students from grades 7 to 12. Teams consist of up to 15 students. Originally, the program was designed to offer a cheaper alternative to FRC for schools that wanted a robotics program but couldn't afford FRC. However, it has since established itself as a strong and independent program. FTC students design robots to fit in an 18" cube and program their robots with block programming or Java. Then, they compete against other teams in a 2v2 format. Teams also work to raise money, do outreach events at local schools, and create an engineering notebook.
FIRST Robotics Competition (FRC) is FIRST's flagship robotics program. It is for students from grades 9 to 12, and adults (e.g. teachers, engineers, etc.) work with the students. Team sizes vary—in fact, some teams have nearly 100 students—but most teams have around 30 students. Each team designs and builds a 125 lb robot and programs in Java, C++, or LabVIEW. Then, teams compete in a 3v3 format. FIRST's website reads:
We call FIRST Robotics Competition the ultimate Sport for the Mind. High-school student participants call it "the hardest fun you’ll ever have." It's as close to real-world engineering as a student can get.
In addition to engineering, FRC teams work year-round to raise funds, do outreach events, and develop a team brand.
Since FLL doesn't have any overlap with FRC by age range, we will focus on the differences between FRC and FTC. In general, FRC is like FTC but bigger: FRC robots are heavier and more powerful, FRC teams and events are larger, FRC budgets are more expensive, etc. In our school district, there is one FTC team at each high school and one FRC team shared by all the high schools.
Below is a table comparing the FTC and FRC programs in our school district.
Students Per Team
Up to 15
30+
Meeting Location
At school
Kirkwood Regional Center
Competition Season
September - February
January - April
Robot Dimensions
18" x 18" x 18"
30" x 30" x 84"
Robot Weight
30 lbs (roughly)
125 lbs
Programming Language
Java
Java
Field Dimensions
12' x 12'
27' x 54'
Event Locations
School gyms and hotels
Arenas and convention centers
Team Budget
$4,000
$40,000
The build season begins with kickoff on a Saturday in early January. At kickoff, FIRST livestreams the year's game animation, which gives a brief overview of the challenge for robots that year. FIRST also releases the game manual, which is a long document (normally around 135 pages) that explains the game in great detail. As an example, is the 2020 game animation, and is the 2020 game manual.
Whenever possible, chapters in these docs are self-contained. For instance, the chapter doesn't rely on knowledge from any other chapters. In fact, it could be used by someone learning Java outside of an FRC context. However, a few chapters rely heavily on others. For example, knowledge of Java and the FRC control system is necessary for understanding the chapter on . When it is the case that one chapter relies on another, it will be noted in the chapter overview.
We hope you find this resource useful! If you'd like to contribute, it is open-source. Check out the section on for more information.
For more information about FIRST, go to .
We maintain a master spreadsheet of all companies that we have previously reached out to as sponsors in the tenure of our team. This sheet includes the company name, sponsor status, contact information, application type, deadline, last year sponsored, and notes. Below are the sponsor statuses and application types that we track in our master spreadsheet.
To help balance out the fundraising effort, students pick 1-2 companies to reach out to during the fall. They can choose if they want to email/call/go in person, but once they pick their companies it is up to them. This has been fairly successful over the past few years and now 60% of our sponsors are acquired through this method. Students use the master spreadsheet to keep track of who has been reached out to and what follow-up information is needed.
Our sponsorship packet includes a letter to the potential sponsor, a brochure that gives a quick glance of our team, and a business plan. In the letter we give an overview of our team and thank them for previous years of support. This is a great opportunity to make a personal connection or reflect on past events with the sponsor.
The sponsorship brochure is intended to be a quick overview of FIRST, our team, and the need for sponsors. We include this information in emails and packets taken to companies, but they can also be brought to certain outreach events or farmer's markets. This document doesn't change much from year to year so it easy to place on bulletin boards at coffee shops or other places where it may hang for long periods of time.
The business plan is a comprehensive overview of our team and financial state. This is a required document for many grants or corporate giving applications, but can also be used for general sponsor inquiries. Below are the major components that we include in our business plan.
Mission statement
Team history and growth
Organization structure
Board of director information for our non-profit
Student team leads and leadership structure
Sustainability plan
Risk analysis
Action/implementation plan
Financials
Sponsor tiers
Annual budget
Recognizing sponsors is an important part of the season. We reevaluate our sponsor tiers annually to make sure we are finding as many ways to show our appreciation and get involved with our sponsors as possible. Below are some ideas that can be included in your sponsor benefits.
Company name or logo on team apparel, pit banner, or website
Quarterly newsletters and photos showing team progress
Lunch & learn with the company to demonstrate the robot
Social media recognition
Customized plaque with team number of FRC season
The FIRST Fundraising Toolkit provides more information on how sponsorship packets and presentations can boost your team. Learn more .
This chapter includes information about hosting outreach events, finding opportunities in your community, and methods for tracking outreach hours throughout the season.
Fundraising is a critical part of the FRC season, but can be the hardest part for many teams. Our team is fortunate enough to have incredible sponsors that have helped boost our program over the past 20 years; however, they alone cannot cover our team expenses. This section highlights how our team gets sponsors, recognizes them, writes grants, and raises funds.
For many grants, and company corporate giving applications, the questions asked stay the same from year to year. We save copies of these applications to reference later. This makes it easier for new members to understand the tone and style of writing a grant and can help generate ideas for future application answers. Additionally, we have learned that companies appreciate when you have a specific goal in mind for their grant. At the beginning of the year we often create a wishlist and order it by priority so that we can provide these details to potential sponsors.
We love our sponsors, but being self-sustaining is a great goal for all FRC teams. To help with this mission we host our Junior Bot summer camps as a major fundraiser and partner with local businesses to provide additional opportunities for our students.
When deciding to host your own event or camp, it is important to set a price point that is good for the community and good for the team. With our Junior Bots camps we work to reduce or cost by reusing materials, finding free locations, and using word of mouth publicity to help us keep costs low. This makes it easier on our campers paying registration fees but allows us to make the money needed to pay for competition registration.
In addition to Junior Bots, we also have worked concessions at the University of Iowa, hosted fundraiser nights at Pizza Ranch, and sold light bulbs to raise money. Many fast food restaurants have their own fundraiser night system to help raise money for your team. In the future we would like to create a fan merch store for friends and family to purchase cheap 167 t-shirts as a passive fundraiser.
Outreach events are all about getting involved in your community and spreading the message of FIRST; however, they can come with fundraising opportunities. We have a QR code on one of our team poster boards that individuals can use to donate to our team through PayPal. This is not a major money maker for our team, but can add up to a big impact over the year. Most donations through this method are alumni, family friends, or others who recognize us from previous events.
Outreach events are also a major way to advertise your team. This can include getting new sponsors, mentors, or students. Having a sponsorship brochure on hand is always a good idea.
Hosting a full week-long event can be difficult to coordinate and find volunteers for. Below are some shortened timelines that can be used for smaller events at libraries, schools, or on a weekend. Any LEGO challenge from the Junior Bots curriculum can be used for Mini Bots, but we prefer to do LEGO Sumo. More information about the challenge is listed below.
To streamline our Mini Bots camps, we coordinate with public libraries and programs, such as Girl Scouts, to provide a location and timeframe. This reduces the planning and publicity overhead; however, the same publicity tips and tricks for Junior Bots work for Mini Bots.
The following engineering process is used as the base for Mini Bots.
In Junior Bots, the Sumo challenge is a combination of everything that students learned throughout the week. They combine sensors, programming, and gear ratios to build the strongest robot possible. This is a great activity because it does not require an in-depth understanding of the EV3 bots to be successful, but can easily be modified for more advanced students.
The objective of LEGO Sumo is to either push your opponent out of the ring or disabled them by tipping the robot over. Students are encouraged to build flippers, claws, or other attachments to help their robot win. Additionally, some may choose to add wheels or additional motors.
For 1-hour camps our team pre-programs the robots to drive straight ahead. This cuts down on the time needed for the activity and allows students to focus on building. In the 3-hour camp, teams are provided a program that goes straight ahead but can practice block coding skills to add eyes, sounds, or other effects. However, for the full day camp teams are expected to program the robot themselves and use the color sensor.
Objectives: Plan, Create, Test
0:00
Intro to the camp and explanation of FIRST/FRC
5:00
Students are given their robot task and a base robot. They have to design an attachment that will complete the challenge.
15:00
Students build attachments in teams using an EV3 kit.
35:00
Students are given time to practice running the challenge and making last minute tweaks. When all teams are ready, the competition begins.
50:00
Students are given paper feedback forms to fill out about their experience and the robots are cleaned up. Often we do not have time to fully break down the robots and bring them back to our lab to finish inventorying.
Objectives: Plan, Create, Test, and Improve
In the 3-hour camp, students are given the opportunity to build the base robot themselves and design an attachement for the challenge. Typically, students are in groups of 2-3 and take turns building the robot or designing attachments.
0:00
Intro to the camp and explanation of FIRST/FRC
10:00
Students build the base robot using an EV3 kit.
50:00
Students are given a task for their robot. They have to design an attachment that will complete the challenge.
1:05:00
Students build attachments in teams using an EV3 kit.
1:20:00
Students learn how to program the robot using block code.
1:30:00
Students are given time to practice running the challenge and making last minute tweaks. When all teams are ready, the competition begins.
1:50:00
Students are given time to redesign and rebuild their attachments.
2:15:00
Students compete in a second round of competition with the nearly updated robots.
2:40:00
Students are given paper feedback forms to fill out about their experience and the robots are cleaned up. Often we do not have time to fully break down the robots and bring them back to our lab to finish inventoring.
Objectives: Research, Plan, Create, Test, Improve
0:00
Intro to the camp and explanation of FIRST/FRC
10:00
Students build the base robot using an EV3 kit.
50:00
Leaders demonstrate how to use block coding and show different types of blocks
1:00:00
Students are tasked with navigating their robot through a maze taped on the ground
2:00:00
Lunch Break
2:30:00
Recess - This is a great time to get outside and do an activity or fill in other non-LEGO STEM related activities.
3:00
Leaders demonstrate how to use color sensors
3:10:00
Students are tasked with a line-follower challenge using the color sensor
3:55:00
Students are given a task for their robot. They have to design an attachment that will complete the challenge.
4:10:00
Students build attachments in teams using an EV3 kit.
4:25:00
Students learn how to program the robot using block code.
4:35:00
Students are given time to practice running the challenge and making last minute tweaks. When all teams are ready, the competition begins.
4:55:00
Students are given time to redesign and rebuild their attachments.
5:20:00
Students compete in a second round of competition with the nearly updated robots.
5:40:00
Students are given paper feedback forms to fill out about their experience and the robots are cleaned up. Often we do not have time to fully break down the robots and bring them back to our lab to finish inventoring.
Junior Bots camps are a major fundraiser for our team and a great way to get involved with our community over the summer. This section includes basic information on how to plan a camp, find campers, and host a successful event.
February-March: Determine location, dates, and create promotional materials
April: Post camp information, share on social media, start taking registrations
Some towns host a Summer Camp Expo around this time of year; this is a great opportunity to get the word out about your event
May (before summer break): Confirm location/summer contact information if hosting camp at a school, send out volunteer sign up and training materials
45 Days Before Camp: Last day to register, this will make it easier to do final planning
1 Month Before Camp: Review curriculums and make adjustments, send out another push on social media, order t-shirts
1 Week Before Camp: Purchase snacks/supplies, inventory camp materials, confirm volunteers, send out a reminder to registered campers
Day Before Camp: Charge devices, review materials, confirm signups and camp payments
Day of Camp: Get there an hour early to setup, have fun!
1 Day After Camp: Send out feedback forms, photo galleries, and information about future events
This is key to having a successful camp. Get the word out as early as possible!
Use the power of social media! Post every couple weeks to increase your chances of catching campers, it can also be helpful to DM local libraries, schools, or STEM programs to repost your flyers
Ask local elementary and middle schools to share your information with their families. Many schools have a virtual event board or other method for sharing out events
Email past participants of your team, other events you've hosted, or sponsors to spread the word
Post flyers on coffee shop or grocery store bulletin boards
We typically host 2 camps throughout the summer that are 4-days long and roughly 6 hours long (including a lunch break). Additionally, we offered daycare hours before and after our camps to make it easier for parents work schedules. This flexibility makes it easier for campers with busy schedules to participate. During our early start and late stay periods we watch movies, play board games, or do non-LEGO related STEM activities.
When considering the length of camp, keep in mind the number of volunteers that will be needed and the level of commitment required. Longer camps can be harder to find locations for and busy high school schedules can interfere with camp times.
Research the camps in your city to determine where your event can have the most impact. In some cases this may be building LEGO robots, learning to program, or more science related experiments. For our Junior Bot camps we offer 2 curriculums using EV3 robots (beginner and advanced) and a Python Programming camp. At the end of Junior Bots we try to pair up our student with FIRST LEGO League teams in the area so they can continue building their skills.
In addition to the curriculum we write, we also invite sponsors or local partners to participate in our camps as guest presenters. For the 2023 Junior Bot sessions we had the Iowa Children's Museum bring a variety of STEM toys for our students to spend an afternoon experimenting with and also had several FTC teams bring their robot to demonstrate. This is a fun way to strengthen relationships with groups in your area and offers campers unique learning opportunities.
Below is an example of our camp schedule. The blue squares are the across all of our camps. These are times when all ages are able to do activities together and friends across camps can hang out. Junior Bots and Junior Bots Challenge also both participate in the final Robot Sumo project together.
Each white square in the schedule has presentation associated to it. These are written by our FRC team and are updated annually based on student feedback.
Research local camps in your area to help establish pricing that is fair, but competitive
Camps with younger students can be harder on volunteers, make sure to account for this in your volunteer numbers
Team up with other robotics teams in your area to strengthen your volunteer base so you can have more campers - this is a great networking opportunity and can make hosting a camp significantly less daunting
Other teams may have additional LEGO kits or supplies to cover additional campers as well
If you choose to share responsibilities with other FIRST teams document who is in charge of each task to make future event judgings easier
If you choose to design t-shirts for your event, keep them generic so leftover shirts can be used for future camps. In the past we have rotated shirt colors so repeat campers don't end up with the same shirt twice or allowed students to tie-dye their shirts on the first day of camp
FIRST works with many companies to create grant opportunities for teams each year. These start mid-summer and many close by mid-October. More information can be found about them .
For the 1-hour camp, our team focuses on having students design and test attachments for a specific challenge. Often we will build the prior to the event and have a program already deployed to the EV3.
Early Start
7:30 AM - 9:00 AM
LEGO Explore Camp
9:00 AM - 1:00 PM
Junior Bots/JB: Challenge/Python Camp
9:00 AM - 3:00 PM
Late Stay
1:00 PM - 5:30 PM
Badge requirements that are specific to a troop level are explained in the tab-divided section. The remaining elements are listed below.
*This is a requirement only for the Junior badge; however, it fits well with the flow for introducing the EV3 challenge. We use this step to explain to scouts what their Mini Bots challenge will be and give them examples of robots that may work to complete this.
For the LEGO Sumo challenge, scouts must determine what kind of robot they want. Examples may include a pusher, flipper, or jouster. These should not be a specific design, but rather a general approach to solving the challenge.
Students may want to work together to help them brainstorm and share ideas about their designs. Encourage them to use the robot vocabulary outlined in the badge guide.
Once the troop feels good about their design - the fun begins. Scouts are given time to make their plans a reality using an EV3 kit. Depending on the timeline of the activity, it may make more sense to build the base robot prior to the meeting.
We allow troops to take home the EV3 kits to do this step. The thought being that scouts can work with their families to share what they are learning and increase excitement in STEM. Prior to starting the second badge requirements, we make sure all take home robots are completed up to the base level.
3-2-1 Sumo! After designing, building, and naming the robots, the scouts compete in a round-robin tournament against one another.
Based on the results of each match, scouts should take notes on ways that their robot performed well and places for improvement. This feedback can then be used for a second round of building. We ran the tournament twice to demonstrate the reiterative part of the engineering process.
To start this section, we play videos about robots that use biomimicry in their design. This doesn't have to be a long part of the presentation, but is a good introduction into robots in day-to-day life.
Bio-Inspired Crawler Robot:
During this step we brainstormed how a robot could be inspired by a bumblebee. Ideas could include how they collect pollen, create honey, or manage a hive.
Similar to parts of the human body, components of the robot have a specific purpose toward fulfilling a goal. This step is about recognizing the role that each component of the robot plays. The badge guide recommends breaking down the ways that robot arms are similar to human ones.
Similar to the Brownie badge, this section focuses on understanding biomimicry in robotics. Discuss examples of robots that do not meet the tradition vision of what a robot looks like, and why they are different.
Looking toward the future, artificial intelligence will play a prominent role in robotics. Discuss how these changes may look and why they could be positive or negative.
Future of Robotics:
Based on the expertise chosen, scouts are given paper and markers to draw out their robot designs. Using the pieces in the base EV3 kit provided, they are given time to plan out attachements to the base driving robot. For more information about the LEGO Sumo challenge, visit the page of this project.
There are three robotics badges in the Robotics Journey for Brownie and Junior troops. This section covers an example curriculum that can be used to help troops get these badges with FIRST.
Our team chose to breakdown the badge requirements over 3 meetings to maximize the amount of time that troops could work on each activity. Each meeting focused on a different badge and built on the previous one.
To earn the Robotics Journey, there are 3 badges that troops must work through: Programming Robots, Designing Robots, and Showcasing Robots. This section breaks down the requirements for each badge. For the complete guides for these journeys please reference the following: , .
Programming Robots
Create a simple machine
Test your robot senses
Learn about programming
Try simple programming
Code a robot
Learn how robots work
Discover the robot brain
Learn about programming
Try simple programming
Code a robot
Designing Robots
Explore how robots imitate nature
Learn about the parts of a robot
Plan your robot
Create a prototype
Get feedback on your robot
Discover the future of robots
Determine your robot's expertise
Plan your robot
Create a prototype
Get feedback on your robot
Showcasing Robots
Create a presentation to share how you designed your robot
Tell others how you designed your robot
Learn more about robotics competitions
Learn about robotics teams
See robots in action
Create a presentation to share how you designed your robot
Tell others how you designed your robot
Learn about robotics competitions
Learn about robotics teams
See robots in action
Badge requirements with different names for varying troop levels are noted with a slash, but activities meet criteria listed for both.
Prior to programming the robot, it is a simple machine. Allow troops time to explore the components of the LEGO kit and learn more about the gears, axels, and other pieces available to them. Encourage scouts to make their own simple machines or identify ones that are created through the base drive robot.
Robots use sensors to collect information about where they are and what is happening around them. This can help them complete a challenge faster or take on a harder task. In this step, have the scouts discuss the different types of sensors in the EV3 kit and the type of data they provide. Can they give use cases for each sensor? Is there one that seems more helpful than others?
If time allows, provide an example of sensors in action. This may require some prep work to build an EV3 robot or bringing a competition bot that utilizes sensor input.
Talk about how programming is used to instruct a robot through a task. From there, introduce the different types of code blocks for the EV3. Have scouts work together to write out a potential program on paper. This can be a simple challenge like how to make the robot drive in a square.
This is also a good time to break down the terminology in the badge guide.
Once troops have a general understanding of how the blocks work, it's time to test the programs they'd previously written out. Try converting the paper programs into EV3 code and test it with the robot. As time allows, have scouts change their code until they can complete the challenge.
If possible, give troops time to play around with different coding options. Some fun ways to do this would include adding sounds to the robot, dancing at the end of the challenge, or adding eyes to the EV3.
Now that the troop is familiar with creating and deploying code to the robot, it's time for a real challenge. Create a maze that the robot can be hardcoded to go through. Scouts may want to work in teams to get their base robot from one end to the other.
First year costs include a LEGO Education SPIKE Prime kit, older EV3 or LEGO Mindstorm kits can also be purchased on eBay to reduce cost
Engineering notebooks are optional and can easily be created in a regular notebook
Many grants are available to teams through the FIRST website
After the first year, FLL Challenge cost is roughly $350 per season
Other costs to consider include t-shirts, snacks, and travel (should be minimal)
Recommend a minimum of 2 hours per week from August until competition, many teams add practices the week or two prior to competition
Not all students need to be at every practice - breaking the group into sub-teams can help efficiency and work around scheduling conflicts
Local competition will be a half day event, typically on a Saturday from 8 am - 1 pm
State competition is a full weekend day in January at Iowa State University
Every team is required to have at least 2 coaches, no engineering or STEM experience required
Find experts to help mentor or with research project by emailing community members, businesses, field “experts”, local HS student, etc
This can also be a good source for sponsorship to help offset costs
All badge requirements for this part of the journey are the same between the two troop levels.
This requirement is focused on understanding the design and prototype process that was used to create a robot. Troops can create formal presentations such as videos, poster boards, or do a show-and-tell about the robots. For our curriculum we chose to have the girls draw their plans out on paper.
After the presentations are created, share them with the rest of your troop, families, or other STEM professionals. This is an opportunity to talk about their robot. Students may find it fun to give the robot a name or personality.
This requirement can be met by attending a competition, talking with someone who has competed, or watching videos online. Prior to coming to visit our lab, we show troops videos of our competition robot from previous regionals and videos about FIRST in general. Due to space constraints, we do not have a full field setup to demonstrate the game in-person. However, in place of this we offer a tour of our lab and demonstrated the different movements of the robot.
Similar to the previous requirement, this can be achieved by being on a team, talking to someone on one, or learning more online. Through the process of working with troops, we take opportunities to reflect on our program and how the badge skills translate to our competition team. In addition, we provide resources on creating a FIRST LEGO League team through Girl Scouts. Getting parents involved in the process has also helped spark interest in robotics teams after the badge journey is completed.
We finish the badge journey with a meeting in our workspace. This gives the troop a chance to visit an operational makerspace and learn more about the tools that go into creating our robot. Additionally, we invite troops to a regional or outreach event where they can see the robot again. We recommend reaching out to troops to remind them about these opportunities as competition season gets closer.
FLL Discover is for ages 4-6 (Grades PreK - 1) and is a guided education opportunity for children to learn basic STEM skills with hands-on activities in the classroom utilizing LEGO DUPLO bricks. Students meet roughly 10 times to learn about STEM through DUPLO building and finish their season with a celebration event showcasing their learning.
FLL Explore is for kids ages 6-10 (Grades 2-4) and teaches students the basics of Engineering by having students study real world science concepts, and build a model using LEGO Bricks and program the model using LEGO Education Tools. Teams showcase the following work and share what they have learned with others:
Model: Teams create a LEGO model with a moving/electronic component
Project: Teams research a topic and create a poster board about their findings
FLL Challenge is for kids ages 9-16 (Grades 4-8) and has several parts. This division challenges students to do research, problem solving, engineering, and coding. There are 3 main parts to the division:
Robot Game: Teams design, build, and program a LEGO robot to navigate the game field and do tasks for points in a competition against other teams
Project: Teams research a real world problem and come up with solutions, design, implement, and revise the project during the season; finally sharing the project with the community
Judging: Teams present and answer questions during a 30 minute time slot with a judging panel
Set Up (2 Minutes): Teams set up their robot and presentation
Project Presentation (5 Minutes): Teams present their projects to judges
Project Questions (5 Minutes): Judges ask team members about their projects
Robot Questions (5 Minutes): Judges ask about a teams robot, the designs, and the engineering process
Core Values Questions (3 Minutes): Judges ask teams about how they embody the FIRST Core Values in their team and their day-to-day lives
Feedback (5 Minutes): Judges provide feedback about the questions, including what they liked, and what to improve on. There will also be more in depth written feedback available after the competition.
Awards in this Category:
Engineering Inspiration Award
Recognizes a team that celebrates advancing respect and appreciation for engineering in their community. Teams show a continued effort to recruit members, focus on STEM education, and foster partnerships within their engineering community.
This closely matches the Rookie Inspiration Award criteria
Gracious Professionalism Award
Recognizes a team that embodies gracious professionalism both on the field and off. Teams show a positive attitude, distribute work fairly, value communication, and understand the importance of teamwork.
Imagery Award in honor of Jack Kamen
Recognizes a team that celebrates the visual aesthetic of both the robot and team appearance. Teams show an integrated theme between components and have clear reasoning behind their design decisions.
Judges Award
Recognizes a team that the judging panel wants to recognize, but may not fit into a traditional award critera. Teams are recognized for a positive team aspect, unique happening or feature, or merit recognition for another reason.
Rookie All-Star Award
Recognizes a team that is on the right track to becoming a FIRST Impact Award team. Teams demonstrate a true understanding of FIRST, are building a strong foundation with their school/organziation and sponsors, and competed in the robot game.
For the 2025 Season a rookie team is considered any team with a number of 10000 or higher
Rookie Inspiration Award
Recognizes a rookie team that is inspiring their community through their respect and appreciation for engineering. Teams show effectiveness at recruiting members, outreaching to the community, and are committed to science and technology education.
For the 2025 Season a rookie team is considered any team with a number of 10000 or higher
Team Spirit Award
Recognizes enthusiam and spirit within a team while furthering the message of FIRST. Teams show a unified display in their attitude, appearance, and spirit. They are proud of their team and demonstrate this in their schools, communities, and more.
Team Sustainability Award
Recognizes a team that has developed sustainable practices to make a lasting impact on their community. Teams must be able to explain their recruiting methods, risk management, action plan, and team revenue.
FIRST Lego League has 3 programs: Discover, Explore, and Challenge. Resources for all three divisions can be found .
These awards recognize the accomplishments teams have made in developing partnerships with their community, members, sponsors, and oher outreach efforts. Official FIRST definitions can be found .
Awards in this Category:
Autonomous Award sponsored by Ford
Recognizes the robot performance during the autonomous period at the start of every match. Teams must be able to explain how the robot understands/navigates its surroundings, factors that could impact the program, and the design/testing that was done.
Creativity Award sponsored by Rockwell Automation
Recognizes a creative or unique feature that has a traceable story through its design. Teams must also be able to explain how they analyzed risks related to the approach and how it is practical/contributes to the robot's success.
Excellence in Engineering Award
Recognizes a team for their professional approach to the design process through doocumentation, reflections, and an elegant/effective robot. Teams must explain how their design is functional, practical, and solves a specific problem.
Industrial Design Award sponsored by General Motors
Recognizes a robot design that utilizes industrial design principles to create an overall look that is functional, eye-pleasing, and effective. This award looks at the entire robot, not just a single part, and the team must be able to describe their design.
This award differs from the Excellence in Engineering award because it focuses on the end result of the design rather than the process.
Innovation in Control Award
Recognizes an innovative control system or control components. The team must be able to identify and describe the components and trace their design process. Additionally, the system should be innovative in concept or execution to connect the machine, human players, strategy, etc.
Quality Award
Recognizes the workmanship of the robot in terms of robustness, risk mitigation, and match success. Teams must be able to explain their quality plan and how their design ensures functionality throughout the competition.
These awards recognize the technical accomplishments of teams including the planning, designing, construction, and operation of the robot. Official FIRST definitions can be found .
The Impact Essay is a 10,000-character submission where teams describe their outreach efforts and initiatives for the season. Teams must submit their essay through STIMS before the due date provided by FIRST, typically the third Thursday in February.
The essay should provide a detailed account of your team's outreach activities, including:
Planning and execution of outreach events
Impact on the community your team serves
Quantifiable metrics, such as the number of hours contributed and people reached
Breaking the essay into clear sections for each outreach initiative makes it easier for judges to understand your team's efforts.
A corn themed team from Iowa - how ironic! While the name Children of the Corn may bring to mind the eerie 1984 horror classic, these “corn kids” debuted at the 1998 National Championship as a University of Iowa sponsored FRC team. Over our 28-year tenure, Team 167 has transformed into an independent 501c(3) non-profit called Iowa City Robotics that supports over 1,000 greater-Iowa City area students annually. With 7 mentors, 5 sub-teams, and 29 members we are the oldest FRC team in the state. Our mission is to make robotics education accessible and engaging for all students through creating STEM summer camps, supporting other FIRST teams, and helping our community.
Enhancing STEM Experiences with Junior Bots Camps
The Junior Bots camps introduce 3rd-8th graders to the world of robotics. Founded in 2016, these camps have grown exponentially. During 2020-21, these camps were reworked to be more sustainable by moving to a larger location and doubling the number of LEGO kits owned. Since 2022, there has been a fivefold increase in membership with 22% being repeat campers. Engaging campers year-over-year has also led to an increase in participation in our FRC recruiting efforts and other events such as How-To Tuesdays, our Children's Museum presentations and FIRST LEGO League teams. The amount of camp counselors has also grown over the years, as we’ve partnered with other local FIRST teams to provide support. What started as a fundraiser for Team 167 now funds the registration fees of 5 FTC teams, helping to sustain their programs as well. With FTC’s help we are now able to host 80 Junior Bots campers annually.
We’ve designed 3 curricula for Junior Bots: Intro to LEGO Robotics, LEGO Robotics Challenge, and Python Programming. We are currently redesigning the Python camp based on 2024 feedback; we look forward to debuting the new curriculum in 2026. In Intro to Robotics, students learn about the different types of motors and sensors, then build their own robot. This builds in Challenge camp where teams work together to complete a mini FLL season. In each of these programs, students not only gain knowledge, but they also get to apply what they learned in fun competitions, learning the core values of FIRST. These values are reinforced through FTC and FRC presentations throughout camp. Additionally, we use Junior Bots to showcase others in the STEM community. We have invited special guests, such as the Iowa Children’s Museum, to bring their Finch robots and Cubelets to share. During one 2024 session, a camper wrote that Junior Bots taught him “there are people out there who care about me even in a new environment” on his feedback form, showing the meaningful connections these students are making throughout camp.
Making a Lasting Impact with FIRST LEGO League (FLL)
Event feedback revealed a strong demand for community-based FLL teams in Iowa City. To create a sustainable solution, we partnered with the Iowa City Public Library to start 2 teams: 68596 The Corn Poppers and 66188 The Kernel Coders, along with a mini team, The Jr Corn Poppers. This mini team is composed of students not old enough for FLL Challenge but felt ready to advance from FLL Discover. 9 FLL students and all 4 coaches came from past Junior Bots families, while many others joined after participating in our library events like Mini Bots and How-To Tuesdays. To support both teams and other nearby rookie teams, we hosted 2 coaches’ clinics, equipping 5 mentors with the skills and resources needed to guide their teams toward success. Our teams had a strong start after securing RTX grants to fund their first year and we covered the remaining costs with Junior Bots funds, making FLL completely free for both the library and the community. To further support accessibility, a local company donated materials for an FLL table, and we invited teams to build alongside our FRC students. This hands-on experience not only prepared them for the season but also connected them with the FIRST community. Students were excited and eagerly built their table, drove our FRC robot, and learned about the importance of Gracious Professionalism and Coopertition.
In November, we held an FLL scrimmage to help new teams test run a competition. It consisted of 5 table rounds and a practice judging session, all scored and led by FRC students. In addition to our program, we invited 4 local rookie teams to participate and opened the event for spectators. This scrimmage provided smiles to teams that had been working so hard throughout the season and acted as the celebration of achievement for The Jr Corn Poppers. As a result we had 4 families reach out and ask how they could get involved after seeing the teams demonstrate their skills.
The Docs Project: A Community-Driven Knowledge Hub
The Docs Project started in 2020 to retain the vast amounts of knowledge seniors acquire over their tenures on FRC teams. This project allows for team veterans to document and share what they’ve learned before they graduate. While initially designed for our use, The Docs Project gained international traction that led to a 2023 redesign to support external contributing, accessibility, and translation. Partnering with GitBook we created a new site, transforming our static project into an interactive community. Now The Docs Project averages 100 daily users from 9 different countries during the build season.
Other teams beginning to utilize the project led to many great collaborations. In 2023, we began meeting with team 5576 monthly to help them train new mentors after their head coach retired. We documented all these meetings through The Docs Project by expanding sections with answers to common questions. Similarly, we’ve met with team 967 after they reached out wanting more resources on specific chapters of our project, showing that even well historied teams can benefit from community. In early 2024, we met with teams 3928 and 3100 over Zoom to walk through how to run a summer camp and provided our curriculums and planning documents. With this, Team 3928 was able to launch their first camps this past summer and 3100 hopes to launch theirs in 2025.
This project isn’t only a virtual experience, in 2023 we created PopBot Swerve, a simple drive base to help us make the switch from tank drive. After combing through published resources to learn how to build and program the base, we created a Docs Project chapter and repository dedicated to what we discovered. Since then, PopBot has been traveling to Iowa teams helping them get started. So far it has traveled 674 miles and is back for a brief tune-up before heading out on its next adventure. Along the way we have continued to document and learn from other teams’ experiences to improve our project.
The Docs Project reaches beyond FIRST teams. It also highlights curricula for scouting badges relating to robotics and K-12 science experiments. After using it for his robotics merit badge, a Boy Scout from Ohio compiled a list of additional websites and tools he hoped would encourage future scouts to get their badges. The Docs Project now proudly displays a resource section recognizing the contributions provided by Boy Scout Eric P.
Building Freedom with GoBabyGo
In 2024, Connie Moore, a physical therapist from Iowa City, reached out for help in developing a way for Simon, an 18-month-old born with muscular dystrophy, to move independently. The GoBabyGo project creates motorized vehicles for children with disabilities utilizing a toy ride-on in place of a traditional wheelchair with added extra support. The vehicle is made of a PVC skeleton with pool noodles for cushioning, a kickboard for back support and a potentiometer to easily adjust the speed. To keep costs low for the family, we secured community funding and resources. Procter & Gamble funded the car, we repurposed pool noodles and floats provided by Iowa City Parks & Rec, and the University of Iowa College of Education Makerspace created custom vinyls and 3D printed parts. The project was such a success that it caught the attention of the local news, and our team’s interview reached approximately 30,000 nightly viewers.
As word spread about Simon’s car, GoBabyGo Indy referred another family to us—a mother and her 6-year-old son, Maverick, who had just relocated to Iowa after a sudden loss in their family. In July of 2024 we met Maverick, a Hawkeye fan with severe movement limitations and a love for car keys. Over the course of 2 months we worked closely with his family, who visited our lab on several occasions, and GoBabyGo Indy to understand his specific needs. Maverick loves his younger sister, so we made custom removable pieces to allow her to ride with him along with 3D printed keys for them both. Beyond Maverick and Simon, Team 167 has rewired an existing car for a 3rd family and is gearing up to build another GoBabyGo vehicle this summer.
Conclusion
This is only a snippet of what Team 167 has accomplished in the past 3 years. We have used the post-Covid era to reset our processes and evaluate how we are working toward our mission to educate the next generation of innovators and problem-solvers. We’ve recognized past struggles with securing recruitment and labspace year-to-year and have created pipelines toward sustainability for the future. Our Junior Bots and FLL programs get students exposed to FIRST younger and build their interest as they grow. Moreover, camps have provided crucial funding to propel our team forward as we work toward a space to permanently call home. Our hard work culminates in The Docs Project, where we publish free resources to help teams grow through similar challenges. Finally, our collaboration with GoBabyGo has opened us up to new ways to support families in our area. We, The Children of the Corn, have had an a-maize-ing past 3 years reaching 36,941 individuals with over 1,161 volunteer hours at 62 events.
This chapter focuses on the awards available in FRC. The primary focus of this chapter is to provide resources for putting together the submitted awards; however, there are also brief overviews for the machine/creativity and team attribute awards. For more information on these please visit the FIRST Award Workbook .
The Impact Award is the most prestigious award in FIRST Robotics Competition (FRC). It is presented to the team that best embodies FIRST’s core values and serves as a model for other teams.
Any team in its second season or beyond is eligible to submit for this award.
To compete for the Impact Award, teams must:
Submit a 10,000-character essay
Complete a set of executive summaries (500-character responses to FIRST-provided questions)
Adhere to submission deadlines set by FIRST
Your essay and executive summaries should highlight key aspects of your team, including:
Team structure
Outreach efforts
Initiatives your team has planned, attended, or executed
At the competition, teams will participate in a judged Impact interview, which includes:
7-minute team presentation
5-minute Q&A session with judges
During your presentation, you may bring supplemental materials such as posters, slideshows, and other visual aids. It is also recommended to compile a binder documenting the events and initiatives mentioned in your essay, summaries, and presentation.
This award is a significant opportunity to showcase your team’s impact on the FIRST community and beyond. Good luck!
Executive Summaries are a series of short-answer questions provided by FIRST, focusing on team demographics and outreach initiatives. These summaries must be submitted alongside the Impact Essay.
The questions change each year, but the topics remain consistent.
Each response is limited to 500 characters, requiring concise yet detailed answers.
It is essential to mention outreach events not covered in the Impact Essay.
To maximize coverage, avoid repeating the same event or project across multiple answers.
Describe the impact of the FIRST program on team participants within the last 3 years. Think about percentages of those graduating high school, attending college, in STEM careers, leadership skills, and serving as mentors/sponsors in FIRST programs.
We unite students in the greater Iowa City area, representing 6 cities, 7 high schools, and 5 districts. A recent 167 alum and software mentor joined the 57% of our mentors who are FIRST alumni. In the past 3 years, 100% of our seniors are pursuing STEM majors. As another alum put it, "FIRST helped develop my love for STEM. It provided me with the experience, support, and community that helped promote my scientific growth and those experiences have helped me with my future career in STEM."
Describe your community along with its unique opportunities and circumstances. Think about your geographic region, diversity of town/school, language barriers, socioeconomic barriers, and cultural expectations.
While visiting the Neighborhood Centers of Johnson County (NCJC), we gained insight into our community’s diversity. At 11 events, we engaged with over 400 students, 98% from Black or minority families. Many parents relied on their children for translation, so we collaborated with staff to translate our posters into Spanish and Arabic. To further support pre-reading students, we developed picture-based instructions for our Mini Bots series.
At a NCJC Lunch & Learn, a STEM non-profit, NewBoCo noticed the students’ excitement around our robot and invited us to their CoderDojo. Since then, they have visited our lab, added robot demos to their schedule, and asked us to judge their Future City Competition for Eastern Iowa Middle Schoolers (a DiscoverE national competition.) We judged their students' essays about building a better world and in return they acted as mock judges for our team and attended our inaugural Robot Reveal Night.
In 2021 we made recruiting a primary goal of ours after having only 6 competition team members. We identified 16 member roles that would make up our ideal minimum team. By joining a local homecoming parade, putting up flyers in businesses, attending club fairs, and reaching out to parent groups we have reached 29 active members. Second, we recognized a need for more devices for team and outreach events. Our business team applied for and received a grant from Bayer for 12 tablets and 15 laptops.
What impact has your team seen from your efforts described in the above question? How does your team measure impact?
More members and sufficient access to more technology our team has allowed us to accomplish tasks more efficiently and impactfully. Many of our events have limited registration due to device shortages, increasing these has led to a huge increase in participant capacity. Over the past 3 years we have had 1,161 hrs of outreach, reached 36,941 people, and had 97 summer campers. These measures and student feedback help us identify areas of impact. 22% of summer campers have returned for 1+ years.
Please provide specific examples of how your team and team members act as role models for the FIRST community with emphasis on the past 3 years. How do you share these best practices with other teams?
Our PopBot Swerve initiative helps transition teams from tank drive without the upfront financial burden. The drive base has traveled to 4 different teams since 2023 along with an introductory program we have created. This allows teams to learn and test before they fully commit. To further help balance the FRC experience, we created a summer camp crash course to provide teams with another funding path. Our goal is to provide equal opportunity through knowledge and resources to all teams.
Describe your team’s initiatives to Assist, Mentor, and/or Start other FIRST teams with emphasis on activities within the past 3 years.
Beyond our FLL and mentoring initiatives mentioned in the essay, we’ve built strong relationships with local FTC teams. Liberty Robotics has assisted at Jr Bots and joined us for outreach events. Together, we packed meals for families during Back-to-School Night. We also hosted a robot review and mock judging to help their new coach learn about FTC. Team 9925 supports our camps and recently joined us for a STEAM night with sponsor BAE Systems.
What other initiatives have you created, grown, sustained, or participated in (FIRST or otherwise) to help inspire young people to be science and technology leaders and innovators? What outcomes have you seen from your efforts in the past 3 years?
From demoing for 350+ kids to an initial workshop of 20 students, we made a splash in our 2 years at the Iowa City Public Library. We have created and grown multiple library events including 2 How-To Tuesdays, 3 Mini Bots workshops, 3 Arts Festival ABC Days, and our 2.5 FLL teams. Our How-To Tuesday labs and school break Mini Bots camps now hold 100+ students each. Mini Bots is a free 1-day condensed version of our LEGO EV3 camp. On ABC Day we teach isometric drawings using LEGO mini figures.
Describe the partnerships and relationships that you've created with other organizations (teams, sponsors, educational institutions, government, philanthropic entities, etc.) and what you have accomplished together, with emphasis on the past 3 years.
Since joining our lab in 2023, we formed a close bond with the University of Iowa College of Education Makerspace. With them, we co-hosted an open house and teamed up on various projects (see GoBabyGo). As a community team, we met with district leaders to establish why FRC should count with new Iowa attendance laws. BAE Systems is also one of many sponsors we work with. We have presented at their open house, toured their facility, attended a STEAM night, and planned a soldering clinic with them.
During our 2023 season, we wanted to find a way to make Junior Bots more affordable without compromising necessary team funding. We partnered with the Johnson County United Way chapter for their Summership program to send 5 students to camp for free annually. So far 6 campers, half of whom are Hispanic, have used this program to grow their STEM knowledge. Summerships specifically benefit those on free or reduced lunch, making Junior Bots more inclusive to a wider range of participants.
Explain how you ensure your team and the initiatives you have created will be sustainable.
We’ve focused on building a robotics community that is bigger than just FRC to ensure our future. Close ties with K-12 families, sponsors, and local STEM experts propel us forward through brand recognition and networking. Our quarterly newsletters are one example of this. They were originally meant for sponsors, but now include over 70 subscribers one year after opening to the community. Newsletters provide updates about FRC progress, recap recent events, and highlight ways to get involved.
Highlight one area in which your team needs to improve and describe the steps actively being taken to make those improvements.
Recruitment has been a major concern and while we’ve grown a lot in 2024-25, we want to ensure team sustainability. Using community feedback, we identified a need for PreK-2nd STEM camps and workshops. We hosted 6 preschool visits at NCJC & La Petite Academy to test doing hands-free robot demos, utilizing pre-built EV3 robots and science experiments. We also have 4 second grade campers registered for a Junior Bots pilot to gain feedback on how to approach a camp for students in grades K-2.
Briefly describe other matters of interest to the FIRST Judges, including items that may not fit into the above topics. The judges are interested in learning about aspects of your team that may be unique, particularly noteworthy or had a large impact.
We have 2 members on the Iowa FIRST Student Leadership Board to expand the mission of FIRST while serving as a voice for their peers. Additionally, we assisted in cleanup after an EF-2 tornado hit Hills, Iowa. We also hosted the Celebration of the Wild Robot in North English, IA. After the school read the Wild Robot, our team led an evening assembly for families to teach them about our robot, compete in robot relays, and learn about FIRST. Afterward, we hosted an FLL clinic for their district.
Please use this space to ask 1 question to your FIRST Impact Award Judges which will be answered after each event with feedback from the judges.
Which metrics best demonstrate a team’s impact on their community, and are there any we should be tracking that we aren’t?
Awards in this Category:
FIRST Impact Award
Formerly known as the Chairman's Award
Digital Animation Award sponsored by AutomationDirect.com
FIRST Dean's List Award
Submitted by a coach or mentor
Safety Animation Award sponsored by UL Solutions
Woodie Flowers Finalist Award
Describe the team’s methods, with emphasis on the past 3 years, for spreading the in ways that are effective, scalable, sustainable, and creative.
Describe your team’s goals and the progress you have made towards them to fulfill .
Describe your team's efforts in the past 3 years to promote within your team, FIRST, and your communities.
These awards must be submitted by the team prior to the district/regional. Deadlines for these vary year-to-year; however, they typically open in November. Official FIRST definitions can be found .
The FRC community is full of wonderful resources made available for free. These include workshops, forums, tutorials, and more. Many teams create their own resources for everyone to use, and there are also lots of resources maintained by the community collaboratively. Taking advantage of these resources is one of the best ways to improve as a team. Below are some great resources from the community that cover all sorts of topics. Resources specific to certain topics such as programming will be included in the relevant chapters.
If you don't want to look at all these resources, the most important ones to check out are the official resources, Chief Delphi, and The Blue Alliance.
The Impact Binder is an optional supplemental resource that teams may provide to judges during their Impact interview. It serves as a way to categorize, organize, and provide evidence of your outreach efforts. Since FIRST emphasizes evidence-based outreach, the binder helps validate and showcase your team’s impact.
1. Table of Contents
FIRST provides official documentation forms to help structure your binder. Each event should include:
Event Name
Location
Date
FIRST’s Official Definition of the event type
Type of Documentation (e.g., photos, emails, thank-you cards)
Each outreach event should have its own page or section that includes:
Description of the event
Goals and impact
Evidence (photos, testimonials, emails, media coverage, etc.)
FIRST uses specific definitions to categorize outreach efforts. Your team should accurately classify each initiative using the terms below:
Started – Your team has started another FIRST team if you have done at least one of the following:
Funded at least 50% of the team’s registration fee
Introduced them to FIRST and helped them register
Mentored – Your team has mentored another FIRST team if you:
Provided consistent communication (in-person, virtual, email, etc.)
Helped with technical or non-technical FIRST program challenges
The mentored team confirms that your team mentored them
Assisted – Your team has assisted another team if you:
Provided some form of communication or support (technical or non-technical)
Provided funding and/or supplies
The assisted team confirms your team helped them
Provided Published Resources – Your team has created and shared educational materials to support other teams. These must be:
Published online, in print, or through presentations
Designed to help with technical or non-technical FIRST challenges
Ran an Event – Your team has planned and executed an event if:
Team members were responsible for the majority of the planning
Team members executed or supervised volunteers throughout the event
Hosted an Event – Your team has hosted an event if:
It took place at a team facility or a venue arranged by the team
Supported an Event – Your team has supported an event if:
Multiple members participated in planning or executing the event
Multiple members volunteered for the entire duration of the event
Reached – Your team has reached someone if they have interacted with or observed your team in some capacity, either digitally or in person.
Advocated – Your team has engaged in advocacy if you have:
Met with government officials, community leaders, school administrators, or business leaders to promote STEM/FIRST
Developed relationships with these groups to support public policy changes that promote STEM/FIRST
Served as a resource for officials and leaders as they create public policy changes related to STEM/FIRST
Stay organized – Judges will appreciate a clear, well-structured binder.
Use visuals – Photos, charts, and testimonials help showcase your impact.
Cross-reference with your essay – Ensure consistency between your essay, executive summaries, and binder.
Bring extra copies – If possible, provide a digital version or printed summary pages for judges.
This glossary of general robotics terms offers a great launching off point for STEM activities or introductory research. (contribution made by Boy Scout Eric P.)
The FRC Blog contains official announcements from FIRST about FRC.
The Student Team Information Member System (STIMS) is the official student dashboard for FRC. To attend an official FRC competition, you must create an account, join a team, and have a parent or guardian complete a consent form.
The season materials page has all the official documentation for the current season. This includes the game manual, the rule Q&A system, season logos, and more.
Chief Delphi (CD) is a forum for all things related to FRC. It is among the most useful resources listed here. During the build season, CD is full of ideas, prototypes, code samples, etc. to help with robot design. Throughout the year, it contains interesting discussions about robotics, fundraising, STEM, and more.
The Blue Alliance (TBA) provides detailed statistics about FRC teams and events (including offseason events). It has match schedules, live scoring, award history, robot pictures, and match videos.
First Updates Now (, ) First Updates Now (FUN) produces content about FRC (and FTC). They host lots of workshops, interviews, and giveaways. They also do behind-the-scenes videos of different teams' robots.
The Compass Alliance is a group of experienced teams that provides resources in all subjects for beginner teams. The pathways section of their website in particular has lots of good tutorials.
The (unofficial) FRC Discord server is a great way to engage with other people in FRC. Lots of students, alumni, and mentors frequent the server, and there are channels for technical discussions, business discussions, and socializing. The community is quite friendly, and it is a good place to ask questions in a less formal setting than Chief Delphi.
The FRC subreddit is mostly just memes, but there is the occasional serious discussion.
The Citrus Circuits are an elite FRC team from Davis, California. Their website contains dozens of helpful workshops on topics like CAD, programming, strategy, scouting, fundraising, and outreach.
The Cheesy Poofs are a hall of fame team from San José, California. They are typically regarded as the best team in the world. Their website has many resources—especially about software and CAD.
Simbotics is an FRC hall of fame team from Ontario, Canada. Their website has lots of useful resources on a variety of topics.
For more details, visit .
The judging interview is the final stage of the Impact Award process and the only portion evaluated at the competition.
Duration: 10-15 minutes
7-minute presentation
5-8 minutes for Q&A
Presenters: Only three students may participate, so it is crucial to select individuals who can confidently and clearly convey the team’s story.
Create an engaging and well-structured presentation that highlights:
Key outreach initiatives
Long-term impact on the community
Alignment with FIRST Core Values
Use supplemental materials to reinforce key points, such as:
Poster boards
Slideshows
Handouts
Judges will ask follow-up questions about your team's work and impact.
Practicing responses to common Q&A questions (found on the next page) will help your team be prepared and confident.
For this award, coaches submit answers to the following questions. These are limited to 800 characters each and must be submitted to the FIRST portal prior to the deadline. For the 2024 season this deadline is February 8th.
Explain how the student embodies the philosophies of Gracious Professionalism and Coopertition through the FIRST Core Values: Discovery, Innovation, Impact, Inclusion, Teamwork and Fun. Please provide examples.
How has the student increased the awareness of FIRST? Describe the student’s interests and/or plans to continue to engage with FIRST beyond high school. Please provide examples.
How does the student's individual contribution to the team benefit the whole? Please provide examples.
Describe the students' experience in areas of STEM. This could include but is not limited to skills in engineering, software, CAD, fabrication, etc. Please provide examples.
Explain the student’s leadership to their fellow team members. How do they motivate others? What is their leadership style? Please provide examples.
The following question is new for the 2024 season and has a 500 character limit.
Please share anything else you would like us to know about the student, including academic performance, specialized skills, or additional extracurricular activities.
This is a submitted award that is done by a coach or mentor of the team. It recognizes two 10th or 11th grade students that demonstrate leadership and dedication within their team. The specific criteria for this award can be found .
The Impact Award presentation includes 5 minutes of Q&A after the team is finished presenting. By then the judges will have all written submissions and the presentation to base their questions around.
How has FIRST changed you? Your team? Your school?
What team accomplishment makes you most proud?
Outside of your team, who has given you the most help this year? How?
Who have you helped this season?
What have been the top priorities for your team this year?
How did you establish them?
What has your team focused on improving this year?
How has your team spread the FIRST Core Values in your school? In the community?
Tell us how your team has demonstrated Gracious Professionalism® and/or Coopertition®.
Has your team done any community outreach?
Does your team have any involvement with FIRST® Tech Challenge or FIRST® LEGO® League?
How does your team support FIRST core values?
How does your team integrate imagery and branding?
How does your team find and “Thank” your sponsors/supporters?
How does your team keep students, mentors, and sponsors actively engaged?
How does your team celebrate success and document lessons learned to prevent repeating mistakes?
Describe what your team does related to environmental sustainability.
How does your team budget for the season?
How does your team ensure there’s funds/resources available for future seasons?
Do you have a succession plan? Can you describe it?
Did your team discuss potential risks for the season? Describe your contingency plan.
How do you ensure that your team is following correct safety practices?
The following are questions that Team 167 has been asked in judging. They may not pertain to all teams, but offer insight into the kinds of questions judges may come up with during Q&A.
How do you recruit from FTC? Are they a sister program?
Why should you win the Impact Award?
What does the curriculum for Junior Bots look like?
How do you collect data on graduating seniors/college plans?
What is a veteran member?
Have you considered sharing resources for your fundraising or sponsor forms in your docs project?
What program are you using for inclusivity training? Are you reaching out to a certified program?
What role specifically did you play in the advocacy project with other FIRST teams?
How do you collect analytics on docs project and do other teams use it?
What makes your team unique?
What is the success rate of the sponsorship project at the beginning of the season?
What is our team’s biggest impact?
Any other things you’d like us to know?
Can you tell me about your STEM nights and what does that involve?
What is a challenge the team as a whole has faced this year?
Can you tell us more about the Celebration of the Wild Robot? Was this a book?
Did you travel to Kansas City to work with the GoBabyGo actual organization or was everything handled from Iowa City?
If you could do the whole season again, what would you change?
When you walk out of here there is going to be something you wish you said to us. What is it?
You have a lot of reach in different communities, what has been your biggest struggle in maintaining them and how do you keep events organized?
What feedback did you receive about your Python camp and what did you do with it?
What is a challenge you overcame this season & how did you do it?
What challenges have you faced from the rapid growth your team has experienced?
Has your recent team growth made you feel better about your year-over-year progress and how do you think it will impact your experience in coming years?
You mentioned the West High Story, is that a newspaper or magazine?
What year did you create your FLL teams? Was that this year or last year?
Elaborate on the PopBot Swerve Initiative. How was this a cost saving measure for other teams?
Tell us about The Docs Project as a sustainability initiative.
What has been the impact beyond our team?
What struggles have you faced?
How do you handle the administrative burden of such a large project?
In order for others to benefit it must be searchable. Do you have stats on what information people are looking for?
How did you collaborate with education professionals in the creation of your preschool visit curriculum?
Team #3928 Neutrino
Describe your team in three words
What makes you different from every other team?
If you were given $5000 right now what would you do with it?
Where do you see your team 5 years from now?
What do you want your impact on FIRST in your community to be 20 years from now?
Where do you plan for your team to be in five years?
What's something new for your team this year?
What is your team's greatest accomplishment?
Anything else you want to share with the judges?
Tell me about your efforts to promote FIRST and STEM.
How does your outreach impact your community? Team members?
Tell us more about your outreach program.
Tell us more about your efforts to expand FRC in general.
How has your outreach expanded over the past five years?
How are you connecting with your community in a way that is different from other teams?
How are you expanding FRC in your state?
Who are your sponsors and how do they help you?
What is one important outreach event your teams participated in?
What is the most important outreach event your team participates in?
How do you work with other FRC teams?
If you could only pick one event to continue, what would you pick and why?
Why is having relationships with your community, sponsors, etc important?
How do you motivate your team to participate in outreach?
How have you mentored other FIRST teams?
How have you positively impacted the "FIRST community?
How are your FLL programs sustainable?
How many FLL teams have you mentored this past season?
How do you design your mentoring programs to run? What are your roles?
How do you work with sponsors? How do you connect with them and work with them to further your relationships with them?
How do you fundraise?
What is your budget? How is that decided on?
Describe your relationship with your sponsors.
What are your alumni doing now? How did FIRST help them?
Tell us more about your website and your published resources.
Tell me about your team's sustainability plans.
Tell me about your business plan.
How have you improved from last year?
How did you overcome challenges and what were those challenges?
How has your team grown since last year?
What will your team do differently next year?
How do you recruit new members?
How is your team expanding?
How is FIRST helping current team members?
What are you planning to do after high school? After college?
How has this team impacted you specifically?
What have you learned from FIRST?
What will you carry with you from your time in FIRST?
What does FIRST mean to you?
What does Gracious Professionalism mean to you?
What did you do on the team this year?
How did the FIRST program impact you directly?
Why did you join robotics?
What is the mission of FIRST to you?
What are your roles on the team?
How is your team structured?
How many students are on your team? What is the break up between grades?
Where do you see your team going in the future?
What do your mentors do on the team?
What did your robot do this year?
Give an example of when you embodied gracious professionalism.
Why did your team pick your name?
What is your mission statement?
What has your team done to encourage underrepresented students to get involved in robotics?
What advice would you give rookie teams or teams in their first few years?
What is your relationship with your school?
What is one last thing you want to tell us?
What is the most important piece of paper you gave me?
This subchapter will identify lots of useful resources for learning CAD (computer-aided design). Firstly, it will cover using Onshape (our team's CAD system of choice). This includes making parts, versioning documents, and collaborating. Then, it will discuss FRC-specific CAD such as designing a drivetrain or an intake.
For many of you, this will be your first time working in CAD (at least since eighth grade). Accordingly, the chapter is designed for absolute beginners. If you have significant experience with another CAD system (e.g. Inventor, Fusion 360, SOLIDWORKS, etc.) and/or Git, you will breeze through the Onshape tutorials. If you have prior Onshape experience, you can probably skip straight to the FRC-specific sections.
First, this chapter will go over CAD using Onshape. After that, it will discuss some important design principles. This includes general discussions of different subsystems as well as specific lessons learned from past mistakes.
You should watch the videos in order and follow along on your own computer. You will almost certainly have to pause and repeat parts of the videos frequently, but you will learn a lot about how to efficiently design robots in Onshape.
The Impact Video is an optional submission that will be played if your team wins the Impact Award at the competition. This video serves as a celebratory showcase of your team’s accomplishments and the outreach efforts that earned you the award.
Highlight your key outreach initiatives – Showcase the programs, events, and activities that had the greatest impact.
Tell your team’s story – Show how your efforts align with FIRST’s values and mission.
Make it engaging and fun – Use creative visuals, music, and storytelling to make your video exciting and memorable.
Keep it concise – The video should be short and impactful, ensuring it effectively captures your team’s achievements.
You can find examples of past winning teams’ videos on:
YouTube (search for “FIRST Impact Award Winning Videos”)
✔ Plan ahead – Even though the video is optional, it’s best to prepare early. ✔ Use high-quality footage – Clear visuals and audio make a big difference. ✔ Celebrate your team – The video should reflect your team’s unique spirit and achievements. ✔ Be creative – Make it exciting and inspiring for others!
After completing all of the Onshape tutorials, you are ready to start learning how to use Onshape for FRC. This section will take you through setting up Onshape for FRC by installing relevant part libraries and FeatureScripts.
MKCad is an FRC part library for Onshape. It contains all kinds of useful COTS (Commercial-Off-The-Shelf) parts such as electronics, gearboxes, bearings, etc. Since it is native to Onshape, you can avoid downloading and importing parts from other CAD systems. You can also be certain that colors and materials are set correctly. Most importantly, the library is actively maintained by team 1836 and the rest of the FRC community. Consequently, new products are added quickly.
In Onshape, you do not install a part library like MKCad. Instead, you give it a label to access it easily. To do this, navigate to the "Public" tab within the Onshape file explorer. Then, search for "MKCad - ". Select all the documents owned by "Milkenknights Test Account". Once all the documents are selected, click the label button in the top right corner and create a new label. Call the label "MKCad".
To insert a part from MKCad, click the "Insert" button in the top left corner inside your assembly. Then, choose the "Other documents" option. Clicking the "MKCad" label will reveal each document in the MKCad library. From there, you can locate and insert whatever you desire as you would any other part.
Instructions for using an MKCad part
FeatureScript is a programming language specifically for Onshape that allows users to define their own custom features and reuse them. Creating your own FeatureScripts is far beyond the scope of this chapter, but taking advantage of FeatureScripts created by others in the FRC community can save you lots of time.
Onshape provides hours of free tutorials through the Onshape Learning Center. These tutorials are self-guided, meaning there is no instructor or specific time to take the tutorials. Instead, you watch videos, take short quizzes, and complete practice projects. These projects are the most important part of the tutorials. They give you lots of chances to practice and apply your skills.
The following courses will cover all the essentials you need to be productive in Onshape. They are grouped into three sections, and you should complete them in order. You might notice some redundancies throughout courses; that is, some courses will repeat content from previous courses. This is generally good because it gets you extra practice.
While working on these courses, you will probably find things that are unclear. If this happens, do not worry. You will almost always be able to continue with a limited understanding, and a future course will better explain whatever you are struggling to understand.
This section will quickly introduce the basics of CAD and the steps involved in modeling in Onshape.
This section will take a much more in-depth look at the modeling skills covered in the previous section.
This section will discuss how to version documents and how to deal with other documents from within Onshape and from other CAD systems.
There are several reasons why our team uses Onshape instead of another CAD system such as Inventor, Fusion 360, or SOLIDWORKS:
Accessibility Like most CAD software, Onshape is free for FRC teams, but unlike other CAD systems, Onshape is cloud-based. You can think of it as the Google Docs of CAD. This means that documents are accessible on all your devices. It also means you don't need a powerful PC to run it. In fact, you can use it on almost any device with a web browser—including a Chromebook. In light of the COVID-19 pandemic, this is essential because many students only have access to a school-issued Chromebook.
Collaboration In other CAD software, collaborating with others involves manually making copies of files, keeping track of several different versions, and manually combining the files into the final design. Onshape lets multiple people work on a single document simultaneously. In addition, saving is automatic, and versioning doesn't ever require duplicating files.
Support Onshape has terrific community support. Onshape itself has lots of useful tutorials for getting started. Additionally, the FRC community provides well-maintained part libraries for COTS (Commercial-Off-The-Shelf) parts and FRC-specific tutorials.
Almost any computer can run Onshape. The most important thing is that you have a fast, stable internet connection.
Although Onshape runs in the cloud, rendering still takes place on your computer. If you have your own computer, it will probably run Onshape better than a school-issued Chromebook.
Onshape's rendering process uses a technology called WebGL. You must enable this technology for Onshape to work properly. Making sure WebGL is enabled is simple. If you are using Google Chrome, follow these directions:
Note that you might not find the settings explained below on a school-issued Chromebook. If this is the case, you should be fine because WebGL is already enabled.
Launch Chrome settings by going to chrome://settings
Click "System" under the "Advanced" dropdown
Ensure "Use hardware acceleration when available" is enabled
Relaunch Chrome so any changes take effect
You will find that Onshape is easiest to use with a mouse. A trackpad will work, but if you have access to a mouse, it will make your experience a lot nicer. Even a cheap mouse will do just fine.
Many people in the FRC community provide fantastic tutorials about designing robot subsystems with Onshape. In particular, by Nick Aarestad of team 2220 showcases how to design a drivetrain and an intake.
The FIRST website ()
The most common FRC FeatureScripts are all contained in one document. To install them, click . Then, click the "Custom features" button in the toolbar. Select every item in the list except "Unit Tests". At this point, you will find all the FeatureScripts on the right side of your toolbar whenever you open a part studio.
This course will test your spatial reasoning ability, explore the Onshape interface, and discuss how Onshape documents are structured.
In this course, you will practice creating parts using sketches and features. One thing you should know before beginning this course (that the videos fail to mention) is that "normal" is a fancy word for perpendicular.
You will learn how to assemble parts and how to allow or restrict motion between parts in this course.
This course will explain how to use the Onshape interface and how to efficiently navigate models.
In this course, you will get more practice creating sketches and learn some more advanced sketching techniques.
This course will showcase lots of different features you can use to customize your parts. You will get lots of practice creating parts by completing several projects.
In this course, you will learn how to create multiple parts in one part studio. This is one of Onshape's defining features.
You will get more practice creating assemblies and learn a few other assembly techniques in this course.
In this course, you will learn best practices for staying organized in Onshape.
In this course, you will learn the basics of creating versions of a document.
This course will discuss Onshape's collaboration features.
You will learn how to create multiple workspaces, which allows multiple users to edit a document without interfering with each other's work, in this course.
In this course, you will learn how to use parts from other people's documents (such as part libraries).
This course will explain how to import/export data from/to other CAD systems.
To create a free Onshape education account, navigate and click the button that says "Sign Up Now". Fill out the form following the on-screen instructions. You can use your personal email even though you're creating an education account. When it asks what you're using Onshape for, simply put "FIRST Robotics Competition".
Check if WebGL is enabled
If you are using another browser, or if WebGL remains disabled, follow the instructions .
If you have both integrated and discrete graphics, then you should make sure Onshape uses discrete graphics. Specific instructions for this depend on your graphics card, but general instructions are available .
This chapter will focus on safety at your shop it will cover things such as machine tools, general robot handling safety, building safety, and storage.
The tool that is likely most often to be used in your shop is a drill. These are extremely useful tools for building a robot. However, as with all power tools, they can be dangerous. A few things to keep in mind are: 1) Know what you are drilling into. For Example, if you drill into a part of the robot and you drill into a pneumatic piston, you have now damaged the piston and need a new one.
2) Always drill away from you. If you are drilling into something, make sure that it is always away from yourself so that you cannot accidently drill into one of your body parts.
3) Always secure what you are drilling. This is to say make sure it doesn't move during the drilling process, as this creates danger for you and others, and can make the hole drilled less accurate. Furthermore, don't just use your hand to secure it, as that is additionally unsafe, use a clamp or some other method of securing the object before drilling
4) Keep the safety on when not in use. Drills have a button you can switch to turn it from drilling in to drilling out, however if you leave it between these two settings this acts as a safety, preventing the drill from turning on without turning the safety off.
This chapter will cover safety topics such as shop safety, tool safety, event safety, and COVID-19 safety.
This chapter will focus on tools that you might be using in your shop and how to safely use them.
There are several general rules of safety that apply to all contexts with FRC. However, one is the most prevailing: Wear Safety Glasses. All future chapters will assume this rule is to be kept in mind, but the first step for safety is always wear safety glasses
At all times you should be wearing safety glasses, even though it might seem unnecessary, you will much rather wear safety glasses unnecessarily than lose an eye. Even if you wear glasses this is not enough, glasses don't offer enough protection to be able to protect your eyes from something coming in from the side. For those with glasses there are a couple options:
In this lesson, we will go over how to set up Repl.it and use it to write and execute Java programs.
Repl.it is an online Java editor (it works with other programming languages too, but we're just using it for Java). As such, it lets you write and run Java programs from any computer. Think of it as Google Docs but for programming in Java. If you read What is Java? (which you should have), then you know that to write and run Java code, you need a JDK installed. Repl.it comes with a JDK built-in, so compiling and executing a Java program is as simple as clicking a button. These features are great for learning because they make getting started incredibly simple. This is why we will use Repl.it in these lessons.
However, rarely do professionals use Repl.it for writing their code. There are a few reasons for this. The first is that Repl.it is slow. When learning, it doesn't feel overly slow, but when writing large applications with lots of files, it slows down, and the small delays add up. Another reason that few professionals use Repl.it is it stores your code on the cloud. This poses a potential security issue for people working on private software or dealing with classified information. The final (and most significant) reason that Repl.it doesn't work for professionals is that it doesn't offer enough flexibility. Professionals need to be able to have complete control over the computers they write their code on. Without going into too much detail, certain types of programming are difficult or impossible using Repl.it. For instance, developing robot code for FRC is not really possible using Repl.it (the chapter on FRC programming explains how to set up another editor).
Each project on Repl.it is called a repl. You will create a new repl for each of the projects in this chapter. Once your account is created, click the button that says "+ new repl" in the top right corner. You should see a few options for your repl. For the language, pick "Java". Be careful as there are several other options with Java in the name including "JavaScript", "Java Swing", and "Java Processing using Processing.js". These options are all incorrect. For the project name, pick whatever makes sense to you. It is important to give your projects meaningful names to keep your code organized in case you need to look back at it. I suggest you name this project "HelloWorld". Assuming you are on the free plan for Repl.it, you must leave your repl accessible to the public, but that won't be a problem.
A new Java repl called HelloWorld
Once your repl is created, you should see a screen something like this. There are a few important parts of this interface that you should know about.
At the top is the menu bar. The left of the menu bar lets you navigate back to your profile so you can see all your other repls. The large button in the center labeled "run" compiles and executes your code. Finally, the buttons on the right side of the menu bar let you share your repl with other people or create a new repl.
Looking to the left side of the screen, there is a thin, vertical strip with four icons. The topmost icon shows/hides the files in your repl. The only file that should exist if you just created the repl is Main.java
. The next two icons are unimportant for this chapter. The last icon contains project settings. You should probably leave them alone except for light/dark mode and font size depending on your personal preferences.
On the left side of the screen after the list of files (which may be hidden), there is a large pane called the editor. This is where you write your code. A new Java repl should start with a little bit of code in Main.java
. It should look something like this:
On the right side of the screen is a large pane called the console. This is where the results of your program will appear. It is also where you can input data to your program if necessary (e.g. if your program asks for your username, you can type it in the console). If you haven't run a program yet, the console should begin with something like OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
. If you have run a program, you can refresh the page, and the console should reset to that text. Taking a look at the text, OpenJDK
is the type of JDK that is compiling and running your code. The version of Java is 11.0.6 (it might be a higher version for you). As of June 2020, FRC uses Java 11, so everything you learn using Repl.it should be valid FRC code.
When you are ready, you can run the program by clicking the "run" button on the menu bar. After a few seconds, you should see the text Hello world!
appear in the console (note that there might be a few lines of gibberish before it). Congratulations on running your first bit of Java code! At this point, you can confirm Repl.it is working properly. As a general rule, problems caused by Repl.it can be fixed by refreshing the page.
Take a few minutes to explore the Repl.it interface. Make sure you're comfortable with creating projects, locating existing projects, and running your code. Once you feel ready, you can move on to the next lesson. There, you'll start learning to actually write code!
To get started, go to on your computer and click the button in the top right corner to create an account. You can sign in with Google or use your email address.
Band saws are tools often used to cut pieces to a specific size. Here are some safety guidelines with these.
1) Keep your hand away from the blade. This is obvious but make sure to always keep your hand a safe distance as you need to guide the piece through the saw blade.
2) Make sure to keep your face a safe distance from the blade. Now, because you need to guide a piece through the saw blade, you need to be able to see what you are doing. However, this doesn't mean to be unsafe with where you keep your face.
3) Make sure you don't have a dull saw blade. This is dangerous because dull blades can slip and cause an injury.
4) Keep the machine off and unplugged when not in use.
This chapter will introduce the fundamentals of the Java programming language. For many of you, this will be your first time coding, so the chapter is designed for someone with absolutely no prior experience. However, if you have experience in another language—or even if you have Java experience but need a refresher—these lessons will still be helpful to you too.
The concepts introduced in these lessons will cover roughly the same content as the AP Computer Science A curriculum. If you have yet to take that class, these tutorials will prepare you well. If you are currently enrolled, you will find that these tutorials complement your coursework nicely. If you have already taken the class and remember most of it, then you probably don't need these tutorials, but it wouldn't hurt to scan them and see if there are any unfamiliar concepts.
The first couple of lessons in this chapter will cover some general programming concepts, what makes Java different than other programming languages, and how to set up your computer to begin writing code. After those, the remaining lessons will follow a simple pattern of one lesson followed by one programming exercise. This way, after learning new concepts, you can practice them by writing actual code to complete projects.
Although this documentation is intended for FRC teams, this chapter can be used for learning Java outside of an FRC context. Only a few passing references are made to FRC, and they are unnecessary for understanding the content of the chapter.
Before writing any code, it is good to have a general idea of what computer programming is in the first place. This lesson will go over what programming languages do and how they interact with computers. In addition, it will explain what sets Java apart from other languages and why it is useful. Finally, this lesson will discuss how Java is used in the real world and in FRC.
Even though modern computers may seem to be incredibly powerful and intelligent machines, they are really quite stupid. Computers take instructions from a computer program and interpret them literally. To illustrate this, think about the following sentence:
I saw a person on a hill with a telescope.
What does this sentence mean? Assuming you have a working knowledge of the English language, the sentence probably makes sense to you. However, different people may come to different conclusions about its meaning because it is totally ambiguous. A few possible meanings of the sentence include:
I saw the person. The person was on the hill. I was using a telescope.
I saw the person. I was on the hill. I was using a telescope.
I saw the person. The person was on the hill. The hill had a telescope.
I saw the person. I was on the hill. The hill had a telescope.
I saw the person. The person was on the hill. The person was using a telescope.
Indeed, the message conveyed by the sentence depends on the person reading it and the context of the sentence. We take advantage of this when speaking English, but computers don't have such a luxury: they cannot use context when interpreting programs, so programs must be unambiguous. Computers have to interpret programs exactly the same way every single time. One could only imagine the consequences if the computers controlling air traffic or nuclear weapons behaved unpredictably due to differences in context.
The result of this is that computer programs are very specific sets of instructions. Computers interpret programs literally so that they execute precisely the same way every single time. The part of the computer responsible for interpreting and executing computer programs is known as the central processing unit (CPU).
A CPU takes takes computer programs in the form of machine code and sends electrical signals to execute the programs. Machine code is written in binary (0s and 1s), so it is totally incomprehensible to humans. As a result, we have developed what are known as higher-level programming languages. The higher-level a programming language is, the easier it is for humans to read and write.
Systems programming languages like C and C++ tend to be the lowest-level languages that humans work with frequently. They are readable by humans, but they are still fairly complicated. They tend to be used in situations where performance (execution speed) is important such graphic-intensive games or database software.
Above low-level languages like C and C++ are high-level languages like Java, Python, and Ruby. These languages are easier to read and write than low-level languages, but they are normally slower. In addition, they give the programmer far less direct control over the computer. There are some things that you simply cannot do in a high-level language like Java that you can in C++.
If C and C++ are readable by humans and faster than Java, why would anyone use Java? There are a couple of reasons why people frequently use high-level languages like Java. Firstly, as mentioned already, even though humans can read and write C and C++, it is easier to read and write Java since Java is higher-level. Besides this, in many cases, the difference in speed between C or C++ and Java is unimportant. The final reason that Java is so popular is its philosophy of "write once, run anywhere".
To understand this principle, you first must understand how programs written in low-level languages are executed. To run a C program, one must compile it. A compiler translates code in a language like C to machine code that the CPU can execute directly.
Now, think about all the different computers you have. If you have a laptop and a smartphone, they almost certainly have different CPUs inside. Your laptop almost certainly has a CPU made by Intel or AMD, and your phone probably has a CPU made by Apple, Qualcomm, or Samsung. Although it may seem like it, none of these CPUs functions in exactly the same way. Different CPUs have different types of machine code because they have different sets of instructions they can execute. Desktop/laptop CPUs normally have large instruction sets (x86) to maximize performance while mobile CPUs often have small instruction sets (ARM) to improve battery life.
Since different CPUs have different types of machine code, a program compiled from C on one computer might not run correctly on another computer (if it runs at all). Even though the C code is the same, the compiled machine code is different. This means that a program compiled from C cannot easily be shared with other people; their computers might not execute it the same way.
The Java philosophy of "write once, run anywhere" means that after writing and compiling Java code, the same compiled program can run on any computer. The way Java does this is with an intermediate language called Java bytecode. When you compile a Java program, it gets translated into Java bytecode—not machine code. Then, the Java bytecode can be distributed to any computer with a Java Virtual Machine (JVM) installed. The JVM executes Java bytecode by converting it into machine code for the specific CPU. This means that the only people who have to worry about the differences between different CPUs are the people who create the JVM.
One limitation you might think of to this process is that to run a Java bytecode program, a computer must have a JVM installed. However, Java is so ubiquitous that most computers have it. Indeed, lots of computers come with it preinstalled.
There are two main software packages that contain a JVM. The Java Runtime Environment (JRE) is intended for consumers. It contains a JVM and several other libraries required to run Java bytecode. The other package is the Java Development Kit (JDK), which is intended for programmers. The JDK includes the JRE and a compiler to translate Java into Java bytecode.
Java is not the only language to abide by the "write once, run anywhere" principle. There are other programming languages that are compiled into Java bytecode and executed on the JVM. This includes languages like Scala, Kotlin, and Clojure. Each of these languages is newer than Java and improves on some of its flaws.
Despite the existence of these newer languages, Java still haas a large presence in technology throughout the world. In fact, according to the TIOBE index (a measure of programming language popularity), Java is the second most-used programming language in the world (as of May 2020). The only language more popular is C. Lots of older code is written in Java and needs to be maintained; it would be too expensive to completely rewrite it in another language. In addition, new applications are written in Java all the time. Fields in which Java is common include web development, Android apps, and business applications.
For the FIRST Robotics Competition, teams can use Java, C++, or LabVIEW. Our team uses Java for a plethora of reasons. LabVIEW is a graphical programming language developed by National Instruments (the company that makes the roboRIO), and it is meant to be easy for rookie teams to use, but its graphical syntax makes it cumbersome for experienced teams like us. C++ is a very powerful and popular language, but it is needlessly complicated for our team. In addition, its extra speed compared to Java is unnecessary for FRC. Most importantly, the AP Computer Science classes in our school district teach Java, so we have far more people with experience in it than in C++.
A drill press is very similar to a drill in function, but because it is a press, has some different safety guidlines.
1) Never put your hand near the drill bit.
2) Make sure to keep the piece secure.
3) Keep your face out of the way of the drill. This is to avoid debris from hitting you
4) Keep unplugged and turned off when not in use.
To begin, this lesson will take a look at the Hello world!
program you created in the previous lesson. We will cover important points about the structure of that program. Then, we will discuss how you can print whatever text you want to the console. Finally, we will talk about commenting your code.
Go ahead and create a new Java Repl. I suggest you call it PrintingAndCommenting
. Just like in the last lesson, there should be a little bit of autogenerated code:
To a beginner, this program looks very intimidating. Don't worry though—you don't have to understand any of it yet. We won't even cover what some parts of it do until several lessons later. With that in mind, there are a few things that are important for you to take note of. One important idea is syntax highlighting. Practically all editors, including Repl, make different parts of your code appear in different colors. This is to help you identify sections of code and easily diagnose errors.
Another important thing to notice is the indentation. Inside each set of curly braces ({
and }
), the level of indentation increases by one unit. In this case, one unit is equal to two spaces since that is the default setting for Repl.it. The specific amount of indentation is unimportant (programmers often disagree about one tab, two spaces, three spaces, four spaces, or eight spaces), but it is critical that within a program, you are consistent. Properly indenting your code makes it much easier to read.
All Java programs begin with a main
method. The main
method starts on the second line where it says public static void main(String[] args) {
. Everything after the {
but before the }
is inside the main
method. This means that the only thing currently inside the main
method is the third line which reads System.out.println("Hello world!");
.
The third line is an example of a statement. Statements in Java are specific instructions. You can think of them as commands to the computer. For instance, the statement on the third line tells Java to put the text from inside the quotes in the console. In this case, the text is Hello world!
, so Hello world!
gets printed in the console.
All statements inside the main
method are executed in order. Currently, there is only one statement inside the main
method, so it gets executed first, but if there were another statement before it, then that would be executed first.
Statements always end in a semicolon (;
). If you try removing the semicolon at the end of the third line and running the program, it will not compile. Repl.it will print an error message in the console instead:
This error is fairly simple, but reading error messages is an important skill. The first line of the error message is the most important. It says that there is an error in the file Main.java
on line 3. The compiler expects a semicolon there, but there isn't one. Then, the error message points to where a semicolon should be at the end of the line. Next, the compiler says there was 1 error in total. If we had multiple errors in our code, that number would be higher. Finally, it says the compiler exited with status code 1. Status codes indicate whether or not the program finished running. If a program exits with status code 0, that means it finished as expected. If a program exits with any nonzero status code, there was an error somewhere that prevented it from finishing properly. Because we are missing a semicolon at the end of line 3, the compiler exited with status code 1.
If you put the semicolon back where the error message tells you, the program will run again, printing Hello world!
to the console.
Now that you have a general idea about how Java programs execute, you can start printing other text to the console. As discussed in the previous section, statements in the main
method are executed sequentially. If we want to print Hello world!
to the console twice, we just need to duplicate the statement that prints it, and the two statements will be executed one after another. The following program prints Hello world!
to the console twice:
The statement System.out.println("Hello world!");
prints whatever is inside the quotation marks to the console. Then, it jumps to the next line. This is why the output of the program looks like this:
A statement similar to println
exists which prints the text inside the quotation marks but does not jump to the next line after that. To print just the text inside the quotes, you can write System.out.print("Hello world!");
. If we modify our program from above, changing println
to print
, we get the following output:
This output makes sense because there are no newlines involved in the print
statement.
As you have probably figured out by now, we can print other text to the console by simply changing what is inside the quotes. Try to figure out what the following program would print to the console (make sure to take whitespace and newlines into account):
Take a look at the following program. Can you guess what it prints to the console?
The syntax highlighting shows us that something is wrong. We can confirm this by trying to compile the program. The compiler complains about several errors (if you try compiling it yourself, notice that the compiler incorrectly identifies what the error is, so you need to identify and fix it yourself). In this case, the error is that we used a "
in the text we were trying to print. The compiler thought that the "
at the beginning of MLK's quote signified the end of the text we wanted to print. Then, it encountered a bunch of unknown words outside of quotations marks. It didn't know what to do, so it said there were several errors.
We can get around this error by using escape sequences. These allow us to use special characters in text. The backslash character (\
) indicates that we want to start an escape sequence. For instance, we can use \"
in our text to print the "
character. This means that the correct program to print MLK's quote looks like this:
If we want to manually insert a newline in a string of text, we can do so using the escape sequence. For instance, consider the following program:
The output of the program looks like this:
Using the escape sequence, you can mimic the behavior of the println
statement using print
. System.out.println("This is some text.");
and System.out.print("This is some text.\n");
are equivalent. However, the println
statement is preferred because it is more readable.
To print the backslash character itself, you need to escape the backslash with another backslash. This means that to print \
, you must use \\
inside your quotes.
Comments allow us to write notes to ourselves in our code. We can use them to explain what code does or why we made a particular decision to do something in a certain way. In small programs like those you are writing right now, they often seem pointless, but in large applications, they are super important for figuring out what is going on. If you ever come back to code you wrote six months ago or if you have to use code someone else wrote, comments help you figure out what the code is doing.
There are three types of comments in Java. The first type is a single-line comment. Single-line comments begin with //
. After that, you can write anything you want for the rest of the line, and the compiler will ignore it. For instance, the following program contains a comment explaining what the print
statement is doing:
The second type of comment is a multi-line comment. Multi-line comments are enclosed in /*
and */
. Anything between will be ignored by the compiler. This program showcases a multi-line comment:
The final type of comment is a special type of multi-line comment called JavaDoc. We won't discuss this now because it requires learning about objects and methods first.
There are several other escape sequences in Java. You have learned the most important ones, but if you're curious, you can check out this to learn the others.
This project will test your skills creating variables, using arithmetic operators, and casting.
The goal of this project is to write a Java program that converts Celsius temperatures to Fahrenheit and Kelvin temperatures.
Recall that the Fahrenheit temperature \( F(c) \) given a Celsius temperature \( c \) is defined as: \[ F(c) = \frac{9}{5}c + 32 \] Additionally, the Kelvin temperature \( K(c) \) given a Celsius temperature \( c \) is defined as: \[ K(c) = c + 273.15 \]
To begin, create a Repl called TemperatureConverter
. Copy the following line into the main
method:
This line asks the user for a Celsius temperature as an integer. When the user is done typing the value, they can press the enter key. The integer value is stored inside the variable celsiusTemp
.
After that line, create a variable to store the Fahrenheit temperature and another variable to store the Kelvin temperature. Make sure to use the correct data types for these variables, keeping in mind that an integral input in Celsius might lead to a decimal output in Fahrenheit or Kelvin. Use the arithmetic operators you learned and the above formulas to give these variables their values.
Next, print the Fahrenheit and Kelvin temperatures to the console.
If the user enters anything other than an integer as the Celsius temperature, the program will crash. You do not have to worry about this. You can assume that the user input is valid.
This embedded Repl illustrates how your program should work. It also shows the exact format that the output should be in.
If you are stuck, you can look at the reference implementation below to see how to write this program.
This project will test your skills using Repl, printing text to the console, and commenting your code. Since it is the first project of the chapter, it will be fairly brief.
The goal of this project is to print the following image and caption to the console:
To begin, create a Repl called FacePrinting
. Find a way to print the text to the console. Even though it is not actually necessary, make use of a mix of println
and print
statements to get practice with both. You will have to use a few escape sequences in this project. Also, be mindful of the whitespace in the text. For example, there is a blank line between the image and the caption.
Add a multi-line comment at the beginning of your code that contains your name and grade in school. Then, use single-line comments to explain what part of the body is printed by each println
and print
statement.
This embedded Repl illustrates what your program should print to the console once it works correctly. However, keep in mind that comments are part of this assignment too, so you might not be quite done just because your output looks like this.
There are an infinite number of ways to implement this program. However, if you are stuck, you can look at the reference implementation below to see one way of doing it.
This is a test page. This page will explain the basics of object-oriented programming.
This lesson will focus on variables. We will begin by looking at what variables are and how to create them. We will then talk about important data types and how to perform arithmetic operations on numerical data types. We will also look at constants and where they should be used.
Fundamentally, every computer program manipulates some sort of input to produce some sort of output. For instance, a video game takes signals from the keyboard and mouse and uses them to determine movement and other actions to be performed. Likewise, a robot program takes signals from a controller and readings from various sensors. It converts these to many outputs such as motor speeds. To manipulate inputs and determine outputs, programs need to store data.
In Java, we can store data using variables. Every variable has a type, a name, and a value. For example, imagine a program wanted to store a user's age. The data type of the variable would be an integer (a number without a decimal) because ages are represented as integers. The name of the variable might be something like userAge
. The value of the variable would be 42 (or however old the user is).
For the sake of brevity, from here on out, you can assume that all code samples are inside the
main
method unless otherwise specified.
You can express the scenario about a user's age in Java with the following code:
Let's consider another scenario: a program wants to store a user's bank account balance in a variable. The variable's data type would be a double (a number with a decimal). The name would be something like balance
or accountBalance
. Finally, the value would be any amount of money such as $1.67.
We can express this situation in Java like this:
When we create a variable and give it an initial value, we are said to have initialized the variable. In general, to initialize a variable in Java, you write:
int
A number without a decimal
0
, 42
, -3
double
A number with a decimal
3.14
, -2.718
, 1.0
boolean
True or false
true
, false
char
One character in single quotes
'a'
, 'B'
, '_'
, '7'
String
A sequence of text in double quotes
"This is a string"
, ""
One important thing to take note of is that int
, double
, boolean
, and char
all start with a lowercase letter. This is because they are primitive types. In contrast, String
starts with an uppercase letter because it is an object type. We will discuss what that means in a later lesson, but for now, just know that a bit of text is a String
—not a string
.
Variable names can contain letters, numbers, and the underscore character (_
). They cannot start with a number, and they are case sensitive, so accountBalance
and aCcOuNtBaLaNcE
are different. Variable names should describe the data stored in the variable. For instance, a variable containing an account balance should be called accountBalance
instead of x
.
In Java, variable names are normally written in camelCase
. This means that the first word is lower case, and each word thereafter begins with a capital letter. There are no spaces since spaces are not allowed in variable names. userPassword
, studentGrade
, and name
are examples of camelCase
names.
You might occasionally see variable names in snake_case
, where every letter is lower case and words are separated by underscores. However, camelCase
is more common in Java. Most people who use snake_case
used it in another programming language and kept using it when they learned Java.
After creating a variable, its value can be accessed by simply writing the variable name. For instance, the following program prints the value of the variable answer
, which is 42
:
Notice that answer
is not in double quotes. If you write System.out.println("answer");
, it literally prints the word answer
to the console instead of the value of the variable answer
.
If you want to combine text (using the String
type) and variable values, you can use the +
operator. Consider the following program:
This program prints The answer is 42.
to the console. We will discuss other uses of the +
operator and other operators later in the section.
After initializing a variable, you can change its value using a similar syntax but without the data type. For instance, the following program initializes an integer variable called grade
to the value 87
. Then, it updates the variable's value to 93
and prints 93
to the console.
The reason that you don't need to use the data type when updating a variable value is that the data type cannot change. Therefore, the compiler already knows the data type. Consider the following program:
If we try to compile this program, we get the following error:
Java knows that the variable gradeLevel
is an integer, so it requires that the new value of gradeLevel
also be an integer. Since it cannot find a way to convert the string "sophomore"
to an integer, it fails to compile and gives an error.
You just learned that variables can be initialized with the type name = value;
syntax. However, it is also possible to create variables without a value. This is called declaring a variable:
This code sample creates a variable named favoriteColor
with a type of String
. It does not have an initial value. We can give it a value with the same name = value;
syntax we used to update variables. Giving a variable a value or updating its value is called assigning a value to a variable. In fact, initializing a variable is simply a way to declare the variable and assign it a value in one line.
Trying to access the value of an uninitialized variable is an error. Consider the following program:
This code results in the following compilation error:
This error makes sense because if there isn't a price
for an item, we can't print what the price is. The Java compiler catches this mistake for us so we can fix our code instead of showing users a missing price.
You already learned that the +
operator can be used to combine text with variable values. However, it can also be used to add two numbers together. Consider the following code sample:
This program prints There are 13 fruits.
. Similarly, the -
and *
operators can be used for subtraction and multiplication, respectively.
The /
operator is used for division. However, it doesn't behave exactly as you might expect. Consider the following program which divides a $70 bill among 4 friends:
You would expect the program to print Each person has to pay $17.5
since 70 divided by 4 is 17.5. Instead, it prints Each person has to pay $17.0
. Why might this be?
When dividing two integers, Java makes the quotient an integer by truncating everything after the decimal point. In effect, this means that Java rounds positive quotients down and negative quotients up. Since bill
and friends
are both integers, Java rounds the result (17.5) down to 17. Then, 17 is automatically converted to the double 17.0 since cost
is of type double
.
To avoid this behavior, we can make either bill
or friends
a double instead of an integer:
Alternatively, we can cast either bill
or friends
as a double. Casting is the process by which Java converts one data type to another. To cast a variable variable
as a new type type
, you write:
For instance, to cast bill
as a double inside the division, you can write:
Since bill
is cast as a double, Java is diving a double by an integer. When division involves a double, the result is a double. Therefore, the result of the division is 17.5 as expected. So, the program correctly prints Each person has to pay $17.5
.
There are a few more things about operators and arithmetic you should know before moving on.
Firstly, the modulo operator (%
) calculates the remainder in integer division. For example, the following code sample prints The remainder is 1
:
Secondly, arithmetic assignment operators make certain operations easier. To add 2 to the value of a variable sum
, you might write:
The above code sample prints 6
as desired. Arithmetic assignment operators simplify lines like this. Using an arithmetic assignment operator, you can write:
The +=
operator, which is called the addition assignment operator, tells Java to add 2 to the value of sum
and make that the new value of sum
.
Other arithmetic operators have assignment versions as well. The following code samples both print The answer is 1
:
Since the +
operator can combine strings, +=
appends content to the end of a string. Consider the following program:
This program prints Hello Tom! How are you?
to the console.
Thirdly, the increment and decrement operators (++
and --
) provide an even shorter way to add or subtract 1 from a variable. The following program initializes value
to 0. Then, it adds 1 to value
twice and subtracts 1 from value
once. Therefore, it prints 1
to the console:
Although the increment and decrement operators work on doubles, they are generally only used on integers.
Finally, you should be aware that Java follows PEMDAS for order of operations (we haven't discussed exponents yet). This means that you can use parentheses to specify the order of operations. In fact, it is often a good idea to do this even if it isn't strictly necessary. It makes your code easier to follow and protects it from changes which might inadvertently impact the order of operations.
As discussed earlier, variable values can be reassigned. Most of the time, this is the desired behavior, but sometimes, we want to store values that cannot change. To illustrate the reasoning behind this, think about designing a program that calculates the areas of several circles given their radii:
Recall that the formula for the area \( A \) of a circle with radius \( r \) is given by: \[ A = \pi r^2 \]
In this example, if we wanted to increase the precision of \( \pi \) from 3.14 to 3.14159, we'd have to update it in three different places. To solve this, we can create a variable called pi
that stores the value of \( \pi \). Then, we only have to update the value in one place whenever we adjust the precision:
Now, our code looks much better. We can change the precision of \( \pi \) in just one place, and it will update everywhere. There is one problem, however. The value of pi
can be changed at any time. For instance, the following program uses two different values of pi
, so the areas of the circles are calculated inconsistently:
The first circle's area is calculated with the more precise value of \( \pi \), and the second and third circles' areas are calculated with the less precise value of \( \pi \). To prevent a variable from being reassigned, you can use the final
keyword. The final
keyword creates a constant, which is a variable whose value cannot change. The following code sample illustrates how constants work:
In this example, the compiler gives us an error because we try to change the value of a final
variable. To make this code compile, we must remove the line that reassigns the value of PI
. Therefore, the following program will compile and run correctly:
This code sample solves our problem by preventing the value of PI
from changing in the middle of the program.
Note that constants have different naming conventions than mutable variables (variables whose values can change). Constants are often written in SCREAMING_SNAKE_CASE
. This means that every letter is capitalized, and underscores separate words. Another acceptable way to name constants is with regular camelCase
prefixed with a k
. For instance, the name of a constant that stores the maximum speed might be MAX_SPEED
or kMaxSpeed
. It is important to choose one convention and stick with it within a project.
This example is somewhat contrived, so it doesn't fully illustrate the importance of constants. When you begin to work on larger projects, it will become clearer how helpful it is to mark variables whose values shouldn't change as final
.
Before we go into more detail about what we can do with variables, we should discuss variable types and names. The data types in the following table are the most important ones to know. They will appear in almost every program. If you're curious about other Java data types, you can read about them .
This is a test page. This page will explain arrays and important collections including ArrayLists, Stacks, and Queues.
This is a test page. This page will explain visibility modifiers, the static keyword, and the singleton design pattern.
This is a test page. This page will explain relevant topics that don't fit into another page or provide resources for them. Some ideas for topics include variadic arguments, multithreading, generics, lambda functions, and initializer blocks.
This lesson will focus on conditionals. We will begin by looking at what conditionals are and the different types of conditional logic and statements.
Conditionals are code statements that allow a program to choose what code to run when encountering different situations. For example, a videogame may need to choose between opening a door when the player has a key and telling the player that they don’t have a key.
In Java, all conditional logic outputs booleans, and most conditional statements take booleans as inputs. Java has a variety of built-in conditional logic, mainly derived from mathematics:
A < B
Less than
Outputs true
if the value of A
is less than B
.
A > B
Greater than
Outputs true
if the value of A
is greater than B
.
A <= B
Less than or equal to
Outputs true
if the value of A
is less than or equal to B
.
A >= B
Greater than or equal to
Outputs true
if the value of A
is greater than or equal to B
.
A == B
Equal to
Outputs true
if A
is EXACTLY equal to B
.
A != B
Not equal to
Outputs true
if A
ISN’T exactly equal to B
.
A || B
Or
Outputs true
if EITHER the value of A
or B
is true
.
A && B
And
outputs true
if BOTH the value of A
and B
is true
.
A ^ B
Xor/Exclusive or
Outputs true
if either the value of A
or B
is true
but outputs false
if BOTH are true
.
!A
Not
Outputs whatever is the inverse of A
, such as false
if A
is true
, or true
if A
is false
.
Conditional logic can also be methods that return boolean values.
Likewise,
||
,&&
,^
, and!
can only be used on boolean values.
Java has a number of conditional statements that will choose between different code based on the input.
Syntax:
If statements, as their name implies, run code if the conditional is true
. Optionally, it can run else
statements if the conditional is false
.
You can chain if/else statements together by using else if statements, however, it is not recommended as it’s harder to read and usually worse-performing than switch statements.
Java does not have a statement that combines
else
andif
, such as Python’selif
.
Syntax:
A while loop continuously repeats code inside of it while the statement is true, checking once before running the code.
Another method of using while loops, although not recommended, is using a while true loop with a break statement. While true loops will keep running code inside it forever until the code inside calls a break statement, so if the break statement fails to run properly for whatever reason, it will stall the program.
Do while
Do while loops are, effectively, just normal while loops with different syntax.
Syntax:
Switch statements are a special type of conditional statement, not requiring a boolean input. Instead, it can take any data type as its input. It will look from the top to the bottom, checking to see if the input matches any of the cases, and if not, it will look for a default case, running the code inside the case that matched first.
The following if/else chain is functionally equivalent to a switch statement:
For example, x*y + z*y
is the exact same as y*(x+z)
. Likewise, !a && !b
and !(a && b)
both have the exact same output.
Some other examples would be:
a && b
!(a || b)
(a && b) && (a && c)
a && (b && c)
One of Java's little quirks is that it will skip evaluating the rest of a condition if it can assume the output. For example, it will not fully evaluate false && true
as Java sees false &&
and automatically assumes the statement to be false.
This can be avoided if you use &
or |
instead of &&
or ||
as they force Java to not short-circut.
Example code:
Example code: (No short-circut)
Eventually, no matter what, you'll find a problem you can't easily figure out yourself. Here are some tips to help you find solutions better and faster.
The XY problem, as it's commonly called, is a common problem where a user tries to make their own solution to a problem, gets stuck and looks for help on their attempted solution instead of the original solution, getting counterproductive answers.
Many software things in FRC have extensive documentation that will most likely have what you want. Poking around and clicking on things that seem relevant and/or typing in keywords into the docs page's search bar can often get you the thing you want.
Some links to the docs for popular things in FRC: (Non-exhaustive)
You can figure out a lot of things by typing in the issue into your browser's search bar. Google is surprisingly powerful when it comes to finding solutions to problems.
However, you need to be specific. Google is not omnipotent, it needs to know what you want. In addition, although this is less relevant in FRC, you may get articles that are completely useless/irrelevant and just want you to click on ads, so you need to make sure you're being specific to avoid the useless articles.
An example:
User X is having an issue where VS Code is telling them that the
TalonFX
class is deprecated.Things User X should not type into Google:
TalonFX
This is too broad, they will only get information related to TalonFX motors.
FRC Phoenix
This is not much better, it doesn't specify the thing they're having an issue with.
What they should type instead:
FRC TalonFX deprecated
This returns results on ChiefDelphi related to how the
TalonFX
class in Phoenix v5 is considered deprecated, and that the user should use Phoenix v6'sTalonFX
class.
There are two main forums for FRC:
An old-school internet forum, this the big discussion forum for FRC and occasionally FTC, where discussion posts and help posts are made.
A Discord server for FRC, this is the other big discussion places for FRC. You can find all sorts of discussions and help happening in here, in their relevant channels (IE #programming-discussion
)
However, just like Google as described in Step 2, the people helping you in those online forums are not omnipotent; You need to ask good, descriptive questions that lay out your problem in detail.
Resources on help forum etiquette:
Resources on asking good questions:
<
, >
, <=
, >=
, ==
, and !=
can only be used on number data types such as ints and doubles. They cannot be used to compare Strings. For comparing Strings, use .equals()
. See for more info.
state that boolean statements can be written in multiple ways and still have the same effect. To make a long story short, it's similar to multiplicative distribution in math.
An example from :
WPILib:
AdvantageKit:
AdvantageScope: (Also available in the app)
Phoenix 6:
REVLib:
PathPlanner:
Choreo:
PhotonVision:
LimelightVision:
ChiefDelphi:
Unofficial FRC Discord:
Don't Ask To Ask:
No Hello:
StackOverflow questions guidelines:
ProPublica: "How to Ask Programming Questions":
This is a test page. This page will explain while loops, do while loops, for loops, and recursion.
This is a test page. This page will explain what polymorphism is and how to use it including interfaces, inheritance, and abstract classes.
Google Drive is a great tool for storing files that all team members need access to; however, it can be challenge maintaining permissions as students enter and graduate the program. To make this process easier, our team has transitioned to using a Shared Drive. Below is a comparison of why a Shared Drive is easier to maintain than a shared folder or shared team account.
Making the change to a Shared Drive took a lot of up-front work, but the process of reorganizing and unifying the way that we store information has made it a lot easier for our team to build on previous knowledge rather than reinventing it. In addition to the season folders, we also created directories for our camp curriculums and team branding that are not year specific. Overall, we have eliminated many challenges we previously faced with information access lost due to students graduating and found many gems we have forgotten about.
To help with our future organization, we created a New Season Template that can be easily copied and renamed for each new season. This format now matches the previous years so new members are able to find resources with ease. In addition to the directories, we have made templates of important documents from year-to-year such as our master fundraising sheet, to-do list, and presentation template that are pre-saved into folders.
More information about Shared Drives available .
File Permissions
Manage permissions for all drive files from the shared drive settings
Each folder has individual permissions and will need to be shared with students seasonally
Students with access to login information will have access to all files
Account Access
Students can access from their own Google accounts, making it easy to see who made changes
Students can access from their own accounts, but may need things shared to multiple accounts for school/personal devices
Students must use the team account and may have to get a 2-factor auth code from a coach or another student
Access Previous Years
All season folders can be kept in the drive so students are given access to everything at once
Students looking for info from previous years will need to be added to each specific folder, making the flow of information slower
Students will have access to all seasons that are shared with or created by the team account
File Ownership
Files created by any account within a shared drive will remain property of the shared drive even if a student graduates
Files created by the team account will always be accessible, but files created by student accounts may lose access after graduation
Files created by the team account will always be accessible
Role Assignment
Members can be given different roles to help control drive organization (content manager, editor, viewer)
Member access is dependant on specific file permissions and may vary per document
Anyone with account access has full access to add, delete, or modify documents in the drive
This chapter will explain how to use Git and GitHub to track version history and collaborate with others. It will also introduce command line basics in the process.
Git is, by far, the most powerful tool in a programmer's arsenal. It is a command line tool that allows you to do a lot of things with your code, including but not limited to:
Track changes to code
Allow you to work on certain parts of the code without impacting known good code or messing with other people's work
Revert changes to code in case something breaks
Automatically merge different sets of changes so that you (mostly) don't have to do it yourself
This chapter will get you started on the basics of Git.
This page will explain what git is, and what it can do.
Git is a Version Control Software, (VCS) which, as the name implies, means it tracks versions of code. It does this through commits (individual changes to code) and branches. (offshoots of a code version that allow you to make commits without messing with known good code/other people's work) It has many tools involving those 2, and the following sections will cover those.
This page will explain how to use git.
Git, as its nature as a command line tool that has been around for years and years, is kinda hard for newcomers to use. There are 2 options: Type in the commands ourselves, or the option more suited towards beginners: Have some other program do it for us.
This page covers some of the basics of scouting
Scouting gives you data for alliance selection. If you are in the situation of picking a team for playoffs, you want to be able to know what teams have performed well and what teams haven't. Even if you aren't a captain, being able to assist your captain in selecting a team with your data is also helpful in alliance selection.
Outside of that, it helps you in qualification matches as you can get an idea of what your teammates and your opponents robots are capable of in the match, assisting in your strategy.
Finally, it gives you an idea of what teams were doing and how it worked or failed. This helps you get ideas on how to improve your robot. It also lets you know how you performed and what other teams might've perceived you in the event.
Teams scout in many different ways, some teams use paper and pencil, other teams just create a spreadsheet they edit from their computers, and some teams create their own scouting app that allows them to create a user interface for their scouts to use.
Which method of scouting you use is up to you and your team, there are reasons for all ways of scouting, and it's up to what works best for your team.
There are 2 main types of scouting: Pit Scouting and Match Scouting.
Pit Scouting mainly occurs in the first days of the event, and consists of scouts going around the pits and asking teams questions about their robot (drivetrain, autos, scoring, speed, etc). They than use this data to get an idea of what a robot is supposed to be capable of as well as knowing what a team plans.
Match Data occurs during qualification matches, and consists of scouts actually watching the matches and recording what a specific robot does. What is recorded changes from year to year and from team to team. What you choose to record comes down to what you think the most important data is to keep track of as a team. (Common fields are points scored in teleop, auto, etc).
This page will explain how to install and use GitHub Desktop.
GitHub Desktop is a piece of software that puts all the functionality of git in a nice graphical user interface, and does all the hard parts of typing in commands for us.
Projects in git are managed using what are called repository, (repos for short) and repos are where all the files and changes are tracked. You can get a repo from 2 ways:
Cloning an existing repo
Making a new repo
If your team already has an existing repo for your robot code, clone a repo. Click on File -> Clone Repository, and select the repo that you want. If you don't see it, ask to be added to your team's GitHub organization.
If you are making a new repo, click on File -> New Repository and select the folder in which you want to make the repo in.
The UI for GitHub Desktop looks something like this, once you clone a repository:
On a Windows, MacOS, or Linux computer, (Sorry but no Chromebooks) go to , and click on the big purple Download button. From there, open the installer and follow the installer's directions. Once you have it installed, log into your GitHub account.
This chapter will talk about designing and utilizing a scouting app effectively. It will also talk about competition roles and advancement to worlds.
Now that we've covered the basics of FRC, we will now cover what the actual competitions will be like and what to expect.
There are 2 types of competitions: Regional events and District Events. This chapter will discuss the regional style of competition.
Regionals will have teams from anywhere in the world competing together at the event.
Events will often take place over 3-5 days, depending on the regionals.
Some regionals have a preload day where teams can come in to set up their pits; during these days the pits will not be open and you cannot work on your robot, you can send in a small team to set up the pit and then leave the venue.
The first day will have teams coming in, setting up pits, getting checked in, getting inspected, and then participating in practice matches. There will be a shorter schedule of practice matches that don't impact your record, but allow you to get practice competing on the field. Some regionals will have further practice matches for teams after the scheduled matches have completed. This will be filled using the queue line, where teams can fill in during practice matches during scheduled matches. To join the queue line, a team must have an inspected robot.
The second day will be the beginning of the qualifaction matches. During these matches teams will participate in scheduled games to earn ranking points to move up in the rankings, as the top 8 teams will be allowed to be alliance captains for playoffs.
Ranking Points:
There are 2 ranking points given for winning a match.
There is 1 ranking point given to each team for a tie.
There are 0 ranking points given for losing a match.
There additional ranking points available based on the game, such as number of pieces scored.
This will often take 2 days, as the second day will have the last few qualification matches, and then alliance selection will occur.
Alliance selection occurs before the playoff matches. During this the top 8 alliances are chosen.
The captains of each alliance are chosen from the top 8 ranked teams from qualifications, they then choose an alliance from 1st alliance to 8th alliance. The 8th alliance then chooses a second partner and then alliances choose a second partner from 8th to 1st alliances.
During selection, a captain of an alliance will select a team, that team can then either reject or accept the invitation. If a team rejects an invitation, they can no longer be selected into another alliance. If they accept but are one of the alliance captains that have not yet chosen any partners, they can accept and their spot will be filled by the next highest ranked alliance until there are 8 captains to select teams.
After all alliances have 3 members, the next 8 highest ranked alliances will be asked to be ready to be a backup bot for any alliance that has a robot that is unable to compete, in which case the highest ranked backup bot will be chosen to be the backup bot for the alliance.
Playoff matches function under a double elimination bracket. Included below.
If an alliance loses twice during playoffs, they are eliminated from the bracket. Between rounds there will be short breaks in which some awards will be presented to teams.
Once 2 teams are left in the bracket, they compete in the finals. This functions under the best of 3 model. The first alliance to 2 victories will win the tournament.
We welcome any relevant contributions to these docs!
If you want to contribute, please email us at info@iowacityrobotics.org.