Skystone Season (2019-2020)

Competition Overview

In our first competition, we finished the round-robin in first place and picked fellow Lexington team Two Bits and a Byte (4029). With our partnership, our alliance was able to succeed and win in the finals. As the winning alliance captain, we earned a ticket to the Massachusetts state competition. 

At the second competition, we ended at first place after the qualification matches and picked the Newton team Newton’s Law of Mass (12897) as well as the Lexington team The Parity Bits (8379). We made it through the semi-finals but lost 2 games to 1 in the finals to Sense and Sound Robotics (14273) and their alliance partners.

At the Massachusetts state competition, we finished the round robin in 7th place. We made an alliance with the Brainstormers (8644) and IrRaTiONAl (14039) as the Brainstormers’ second pick. We managed to win the finals at the State competition. As the winning alliance second pick we earned a trip to Worlds. We were also the runner up to the Design award. However, that competition was canceled, and as such the Massachusetts State Competition was our last competition of the season.

Team Overview

In early September, our team attended the season’s kickoff at Needham High School. We were very excited for the new season, especially after seeing the game, which was not only strategically interesting but mechanically challenging. Our team spent many weeks brainstorming, before moving on to prototyping in October. In order to get the vertical height needed to build a tall tower, we decided to build a scissor lift, because it would be fast at higher levels, and we had experience building one driven by a linear actuator in the previous season. We also noticed that the foundation, in both the Autonomous phase and the TeleOp phase, was worth a lot of points, while not being very difficult. To pull the foundation, we decided to build two hooks on the back of our robot, each driven by a servo. The hooks were at first 3D printed, but the filament was not strong enough, so we machined them out of aluminum. These hooks remained intact for the entire season. Lastly, we built a claw to pick up the blocks. This claw could extend outside our robot, rotate on the vertical axis, and of course open and close. With a solid encoder-based basic autonomous, we were able to win the Revere Qualifier with Lexington High School’s team, Two Bits and a Byte.

After qualifying for states through our first qualifier at Revere High School, we improved and redesigned elements of our robot. For our redesign, we focused on our intake and placement mechanism. After a group brainstorming session, we agreed using an intake and internal gripping mechanism. For our intake, we used green rubber wheels. In the beginning, we experimented with having the blocks ingested all the way through the robot. However, we did not end up doing this. Instead, we created a guide for the blocks so that they would be sent straight into our gripper. During our redesign, we also rebuilt our frame so that it would be stronger. We did this because we noticed that our old frame was sagging inward due to an uneven weight distribution within the robot. After our first competition, we also switched out our mecanum wheels for the yellow ones from goBilda to deal with inconsistent strafing. Last but not least, we improved our gripper by using two pegs at the bottom instead of the rubber bands and designing a worm gear to strengthen the grip.

Our observations from a relatively relaxed 2nd qualifier determined our plan for the following 6 weeks, until the State Championship. The team decided to avoid complete rebuilds of any subsystems and focus on refining the existing design. Due to the 8 motor limit, the horizontal extension was driven by a continuous rotation servo. Even though a large spool was used, it was severely bottle-necking our cycle times. Additionally, the servo provided no position feedback and was constantly being back driven. To solve these problems, the intake, which used 2 motors originally, was modified to use just one by chaining both sides of it together. The free motor was placed on the horizontal extension. Every time we wanted to place the capstone in the second qualifier, we had to go to the depot for another cycle. To save time, we built an integrated capstone mechanism, as well as a smaller capstone, near the claw. Our autonomous at our second qualifier was poor, and it actually led to our defeat in the finals. Having read extensively about it on the FTC Discord for several months, a motion-profiling/path following library called RoadRunner was selected. Also, we used a path visualizer written by team 7236 to plan out the path for the first 30 seconds. Once the hardware was finished, we spent the last 3 weeks tuning the various parameters and gains for RoadRunner and making our chosen 3-stone path more consistent. This period was our first experience refining an already working robot, and we were able to learn a lot during this time. Going into the competition, we could not have been more confident.

The Robot

Physical Elements


We used Neverest 20 gear motors to drive our mecanum wheels. On the back, we had the two wheels directly mounted to the motor, and in the front, we had a 1:1 chain so we could mount the motor further back. We used a rollerblade bearing to cantilever the wheel off the frame. 


We used 20mm extrusion to create our frame. It was made in a u-shape with 4 t-joints connected through custom made braces. The frame had two main rails on the sides, and two connectors, one near the center of the robot, and the other towards the back. 


Using metal brackets, we were able to get the hooks at the correct height from the foundation. We used servos from servo city in order to be able to generate the torque we needed. We also added guards on the end of the frame to stop the foundation and allow the hooks to apply pressure. 


We used 35A durometer wheels in order to have a complaint intake. The intake was fixed to the frame using the gap between the side rails in order to correctly space the wheels. They were mounted with an inside spacing of around 3.8 inches to allow for the intake of minerals without applying too much force. We also added guards in front of the intake to prevent the ingestion of blocks at incorrect angles. The intake wheels were chain driven together so they spun always in opposite directions whether taking in or spitting out minerals. Last but not least there was a polycarbonate “block brace” inside the block cavity to ensure proper alignment and consistent pickup for our gripper. 


Our gripper was a culmination of many cycles of the experimental design process. Our journey led us to the modern design that consisted of a servo-driven worm gearbox that powered 2 polycarbonate side platings. Mounted to these side platings were 2 rubber end clamps. This allowed for compliance at the end of the grip as the clamp ends were able to be screwed further in or further out. The rubber on the end allowed for a friction grip while also applying force in a focused area which guaranteed a good grip. 

Cascading X Rails (CXR):

Using a slightly modified cascading x-rail (CXR) set from servo city, we were able to give our robot linear motion. With the gripper being attached to this CXR, blocks were gripped on one side of the robot and transported through the robot and out the other side. The CXR was single-stringed and relied on surgical tubing for retraction. A neverest 20 motor mounted parallel powered the CXR via a pulley mounted at 45° that aligned the string.


For our scissors, we used two linear actuators chained together to power our scissors from the bottom. The linear actuators were parallel to the ground and were chained together to prevent the scissors from becoming desynced. The scissors had 14 links each for a total of 7 x-patterns. This gave them a lift of a little over 5 feet. The uppermost links were machined out into a I-beam pattern to reduce the load that was put onto the motors. At the top of the scissors, a custom piece that allowed for one side of the scissors to be fixed and the other side allowed for the scissors to lift the CXR and its contents while staying level and steady. 

Code Elements


For our autonomous code, we used the RoadRunner library as a well-tuned PIDF from Acme Robotics, utilizing encoders set on our wheels and the inbuilt IMU in the REV expansion hub to determine change in position. In addition to RoadRunner, we used the vision software OpenCV for detection of the skystone by looking at a few specific pixels on each of the three stones and choosing the stone most resembling black. By identifying which one was a skystone, we could run the path most efficient to get both skystones for 10 points each rather than picking up the wrong stone for a far lower reward. In total, our autonomous was a 3-stone path for 2 of the stones and a 2-stone path for the last, all of which included all picked up stones placed on the foundation as well as moving the foundation into the building site and parking under the allied skybridge.


For the driver controlled period, we used 3 different systems of macros, each suited to the role of our robot during any particular match. Those 3 robot modes are called Balanced, Stacking, and Stationary, representing full/solo shuttling and stacking, pure stacking with a shuttling alliance member, and stationary stacking in case our alliance member is able to deliver stones directly into our intake. These macros allow us to dynamically change how we play to best suit our alliance member, as well as ensure that driver 1 has the least complicated set of controls possible while driver 2 is still able to have contingency plans in the case that anything goes wrong. To facilitate that strategy, we have a set of backup commands in case mechanisms are not working, which include: dropping the capstone on the foundation, taking manual control of the scissor and/or extension, and regrabbing a block within the robot. 

In addition to that system, we used an array of values to indicate the tick position of each level of the tower, and automated our stacking process such that the robot will efficiently place blocks while remaining as precise as possible. In all, the result is that apart from steering, driver 1 has 1-3 button presses per stone depending on the macro system in use, and driver 2 only needs to intervene for backup scenarios or placing the capstone.

Full Changelist

This year, we made a lot of changes to our robot as we progressed through the season. At first, after looking at the challenge, we realized we need a robot with both vertical and horizontal movement. We were inspired by our scissor mechanism from the Rover Ruckus season. Thus, that is what we started off with. For our horizontal movement, we had a cascading x rail set that we built earlier in the year, and that seems perfect for this challenge. We also built 3-d printed a grabbing mechanism with rubber bands. For our robot during teleop phase, we envisioned a process like this : extend our cxr, open grabber, closer grabber with block inside, draw in the cxr, use our scissor lift once we were at the foundation, extend cxr, place block, then draw cxr back in. We did this in our first competition, and we ended up advancing to states as winning alliance captain. 

However, we also took recordings of our matches at competition 1. We took times of how long the robot took to do function, such as grabbing and placing. We then put the times into a pie chart, and found that extending and grabbing the block, as well as lining up the block and placing it on the foundation was where we lost the most time. Thus, we began to rethink and redesign. We agreed upon an ingestor design, where we begin by ingesting a stone into the robot, then grabbing the stone with our grabber. This allowed more freedom and quicker movement, as the ingestor was much more flexible in intaking a block. We also replaced our mecanum wheels with new, yellow GoBuilda wheels, because we saw that sideways movement was a large issue for our old wheels. At competition 2, we made it to the finals but sadly lost. 

After the state competition, we made some further changes. Originally, we had a servo driving our cxr, but that was way too slow and replaced it with a motor, by chain driving our ingestors together which allowed us to use an additional motor. We also saw that our scissor lift had trouble rising when it was completely in the resting state, thus we hollowed those out to make them lighter. 

Team Operations



Before the kickoff of the Skystone season, we reorganized the dynamics of our team. During a formal meeting with our mentors, we first identified general tasks that needed to be accomplished. Afterward, these tasks were grouped into build, code, outreach, marketing, operations. Chris, Jonathan, Vera, Jeffrey, and Sophia took responsibility for the tasks under each group respectively. As a member of the code team, Anthony took charge over the communication between the code team and the build team.



After the administrative changes, the marketing team got to work creating a website and various social media accounts. Through our website we have been able to spread the word about the FIRST program and gather support for our team. The website is continuously updated by the marketing team which consists of Jonathan and Jeffrey. After each season, each member is assigned a topic to write a brief blurb about and this is added to the season overview. In the future, we intend to update our social media accounts more frequently, that way we can reach out to a larger community. Besides the website, at the start of the Skystone season, the team also designed a new team logo and team merchandise.



The Skystone Season was our first year reaching out to our community for both individual and corporate sponsors. We were excited to find that we were mostly able to support our budget through sponsorships.

During the season, we stayed in touch with all of our sponsors by sending out Christmas Cards! In the upcoming season, we intend to continue to spread FIRST’s message by reaching out to local elementary and middle schools, taking part in local fairs,  and connecting with the local robotics community through tours and open houses. Due to the pandemic, we are unable to connect with the community in person. However, the team has also recently launched a tutoring service that will help to support our local educational community.