gridlock
Jusnoor Dhillon / (634 Words, 4 Minutes)
The Game
The 2023 FRC game, called Charged Up, was a pick-and-place game with cones and cubes. Essentially, robots grab game pieces from one part of the field, and place them on the other side of the field. For context, the field is about the size of a basketball court, and the robots are generally about 3x3x4ft. and 150lbs.
Specifically:
- The game pieces: yellow rigid plastic cones and purple inflatable cubes.
- Matches began with a 15-second autonomous period, where robots operated without driver input and could score pieces on the grid, and balance on the charge station.
- Then 2 minutes 15 seconds of driver-controlled teleop, in which game-piece scoring and endgame docking or engagement (or balancing) were the focus.
- Scoring on the grid: each alliance had a “grid” in their side of the field, three rows (bottom, middle, top). Points depended on which row and which piece was scored.
- The charge station: at endgame robots could dock (drive onto) or engage (balance) on their alliance’s charge station to earn bonus points.
The Project
Our team, FRC Team 862 took on this challenge with the 2023 robot named Gridlock.
Design strategy
We opted for a 3-degree-of-freedom manipulator: an elevator (vertical carriage), an arm (pivoting or rotating link), and a wrist (orientation of the end-effector) plus a collector for the game piece. The goal was to reliably pick up cones and cubes (from one of three positions) and place them at three levels of the grid. The elevator gave height and distance, the arm gave more reach and clearance, and the wrist orientated the collector for placement.
This architecture gives significant flexibility: you can change height (via elevator), then rotate or extend to the desired node (via arm), and finally orient the collector to match the geometry of cone vs. cube (via wrist). The collector mechanism picks and holds the piece, then releases when placed.
Programming and system integration
Since the manipulator required coordination of multiple axes (elevator + arm + wrist), it demanded significant software work: motion profiling or position control of each axis, state machines for positions/presets (e.g., “stow”, “low grid”, “mid grid”, “high grid”), safety interlocks to avoid collisions (elevator carriage vs. arm or wrist), and handling of different game-piece shapes (cone vs. cube) which might have different orientations or release behaviours.
Integration with driver controls meant the drive team needed intuitive input to choose a scoring node, with the software moving the manipulator through a predefined motion rather than manual fiddling (to reduce cycle time and driver cognitive load). Given the game’s emphasis on quick cycles, this programming work is critical.
Execution
During the season, Gridlock successfully competed as part of our regional campaign. (Team 862’s event list shows participation, and they earned the Innovation in Control Award at the FIRST in Michigan State Championship. ([FRC Events][4])) The manipulator design allowed consistent node scoring across levels, helping our alliance strategy of rapid scoring + reliable endgame.
We also needed to tune the system: elevator carriage dynamics (mass, center-of-gravity), arm inertia, wrist responsiveness, backlash, and coordinate motion so that the combined manipulator didn’t overshoot or drift. In programming terms, that meant tuning PID or feed-forward gains, likely establishing motion profiles (jerk, acceleration limits) to avoid oscillation or overshoot, and ensuring end-effector orientation and release were reliable under competitive conditions (bumps, variance in game-piece geometry, robot motion).
My Contribution
My primary contribution on Gridlock was programming and tuning the arm subsystem (arm + wrist + elevator coordination). Specifically:
- I developed the code module for the arm pivot and wrist orientation, including mapping driver inputs (or automated preset selections) to motion states (e.g., “intake floor”, “score low”, “score mid”, “score high”).
- I tuned the control loops for the arm and wrist: establishing feed-forward and feedback gains to handle inertia, minimize backlash or overshoot, and ensure repeatability of movement to the target position.
- I wrote safety checks in software so that the system would not attempt an arm motion that would collide with the elevator carriage or drivebase, effectively adding interlocks and motion-coordination logic.
- I collaborated on calibration routines: gathering data on actual versus commanded positions, quantifying errors (e.g., encoder offsets, hysteresis), and iterating gains or motion-profiles so that we could reliably hit scoring nodes.
- I supported integration with the collector: detecting game-piece pickup/hold, triggering the manipulator to go to scoring preset, releasing the piece, and retracting safely. This required tuning of timing, motion sequences, and handling variation in how the cones vs. cubes sat in the collector.
- In driver practice sessions I logged cycle-times and errors, then iterated software so that driver-selected presets completed as fast as possible without sacrificing accuracy — a key competitive advantage in a scoring-race game like CHARGED UP.
Together, these efforts helped make our manipulator subsystem more reliable, faster, and more repeatable — which helped facilitate consistent autons, and high-scoring driver matches.