Team 604 Quixilver Presents: Our 2023 Robot and Code Release

Strategic Design

We determined from our game analysis that due to the nature of full-field cycles, competitive robots would score a similar number of game pieces. This meant that robot optimizations that could bring one extra cycle would decide the outcome of competitive matches. After brainstorming, we decided that intaking cones in any orientation from the ground would be an effective optimization for two main reasons—1) leveraging human player throwing game pieces from the single substation would reduce cycle distance by ~40% while reducing traffic in the loading zone, and 2) cleaning up pieces left on the ground after autonomous or dropped by other robots, while likely rare at the highest levels of play, could win a match the one time it comes in handy. Our game analysis also drove our decision to score at all levels. We found that the difference in points between scoring middle and high nodes was substantial enough to justify any added complexity.

Intake

After prototyping other roller intakes, we decided on a “pasta roller” intake design that grips the flange of the cone and pinches the cube. The pictures below show our prototype design.

IMG_4237

The intake forces the cone into one of two orientations: cone tip pointing towards the robot, and cone tip pointing outwards. Our design requirement of orienting the cone vertically to facilitate handoff to the scoring arm necessitated an extra degree of freedom that rotated the rollers—the “reorienter.” To protect the motors and reduce weight at the edge of our intake, we powered the rollers coaxially through the reorienter. The screenshot below shows the power transfer from the motor to the rollers.


Our other design requirement of bringing the cone to the center of the robot for a handoff necessitated a linear slider, which also helped the intake be compliant in head-on collisions for added robustness. The screenshot below shows the full intake in a deployed state.

Handoff and Scoring Arm

Before the handoff, the game piece lies in the center of the robot, but its position across the width of the roller intake is variable. We added a horizontal slider so our robot can hand off from anywhere on the intake. The horizontal slider is pictured below (note that the entire robot is mirrored in CAD vs. real life).


To determine the cone’s orientation, we first moved the slider and arm to a fixed location where we added a time-of-flight sensor. Depending on the cone’s orientation, the sensor would either read the maximum distance value (the other side of the robot) or an intermediate value. We used this sensor reading to rotate the reorienter and move the slider to the appropriate position. The orientation process is identical for cubes. Finding the position of the game piece involves the time-of-flight sensor again—it uses the distance reading to position the horizontal slider above the game piece. Once the horizontal slider reaches the position, the elevator drops onto the game piece while the intake expels to complete the handoff.

We investigated other methods of extending horizontally to reach the mid and high nodes, but we chose a non-parallel four-bar for its low weight and long extension. To further minimize the weight of the scoring arm, we used an everybot-style gripper that squeezes the tip of the cone but pinches the cube. The video below shows our full intake, handoff, and scoring sequence with all possible combinations of game piece orientations.

Code Release

Linked below is our 2023 repository, which includes code run on the robot and on the driverstation laptop. Additionally, it includes our 2023 code implemented with the beta release of 2024 WPILib and vendordeps in preparation for the upcoming season.

One unique aspect of our software was our driver-operator split. Initially, our driver had control over all aspects of the robot other than where to score, which was controlled by the operator with the driverstation keyboard shown below. Once the operator selected a desired scoring location, a single button press by the driver would automatically move the robot to score at that location. Eventually, our driver became faster and more consistent than the automated scoring sequence, and the operator’s role was reduced to simply selecting between cone/cube and top/middle/bottom.

We are happy to answer any questions you have!

29 Likes

Soft swerve

8 Likes

Thanks for sharing the details! bookmarked for future ref.

good job ethan