← All projectsFTC team 18996Oct 2020 to Feb 2021
FTC ULTIMATE GOAL Robot
My first FTC season. I was the team's only programmer.
ULTIMATE GOAL was the 2020-21 FIRST Tech Challenge game: shoot orange foam rings at goals, and carry wobble goals around the field. It was my first FTC season, on team 18996, and I was the team's only programmer.
It was also the COVID season. Everything here happened on a homemade field, with a cardboard box for a goal. There is no CAD of this robot, so this page runs on our photos and phone videos: scroll, and they play.
The home field
In ULTIMATE GOAL, robots shoot orange foam rings at goals on the far wall, and carry wobble goals, poles with a black dome on top, into taped target zones.
Our practice field was homemade: plywood walls, gray foam floor tiles, red tape for the target zones and white tape for the lines. The goal was a cardboard box with an opening cut in the front.
The build, in twenty days of photos
Day 1: the agenda, and the options
Five lines on a whiteboard. Work faster got crossed out and fixed to work smarter, and the last two lines are the plan: an intake and a conveyor.
Then the options. The conveyor, split into two jobs: A, floor to vertical, and B, vertical to magazine. Then four numbered ideas: a fast beater, a slow beater or a vertical belt sandwich, a small shooter, and a belt with a tab. In the corner, a sketch of a ring's path up from the floor into a box.
Our photos, in the order they were taken, cropped to hands and hardware. Days are counted from the first photo in the album.
Day 10: cardboard tubes, and wires everywhere
Arcs cut from a cardboard concrete-form tube, the round kind used to pour concrete posts, next to a plywood plate with curved slots cut into it.
A laptop, a gamepad, and motors and servos wired up loose on the field floor, next to a plywood deck with a motor in each corner.
Day 11: two prototypes
A tube arc standing in a curved slot in plywood, with a ring held up to it. And a tall hardboard tower with timing belts running up its walls.
The ring shooter
The shooter is a tilted plywood plate standing on threaded rods above the drive base. On it: a black wheel lying flat, a white cup that holds a stack of three rings lying flat, a curved rail along the edge of the plate, and a small servo on a bracket beside the cup.
The close-up below shows how the stack feeds. Each shot takes the bottom ring: it slides out from under the cup and leaves between the wheel and the curved rail, fast enough to be an orange blur in a single frame. The rings above it drop down by one.



The run
The run from the top of the page, move by move. Ring times are the frames where each ring first shows in the air, measured on the 4K original.
- 0.4 s: the robot sits at the bottom left of the field, and ring one is in the air, headed for the cardboard box on the right.
- 1.7 s: ring two, 1.3 s after the first.
- 3.0 s: ring three, another 1.3 s later. Three rings out.
- Then it turns and heads up the field with the wobble goal, the black-domed pole, riding upright on its side.
- On the way back it rolls over a ring lying on the field, and half a second later there is a ring in the white cup.
- It ends the clip among the taped squares near the camera, the wobble goal still on board.
Calculation How fast does it empty the cup?
| Ring one in the air | 0.4 s | measured from our video, frame by frame |
|---|---|---|
| Ring two | 1.7 s | same video |
| Ring three | 3.0 s | same video |
- Between shots: 1.7 s - 0.4 s = 1.3 s, and 3.0 s - 1.7 s = 1.3 s
- First ring to last: 3.0 s - 0.4 s = 2.6 s for three rings
- While it fires: 60 s / 1.3 s = about 46 rings a minute
A full cup of three rings is gone 2.6 s after the first one leaves, one ring every 1.3 s.
From one run on video, to the nearest tenth of a second; not a timed test.
My part: the code
I was the team's only programmer. On the Driver Station phone, the list of autonomous programs is a stack of numbered test versions, from TestAutoV2 up to TestAutoV12, with a TurnLeft and a TurnRight version of V12.
The one in the clip is TestAutoV12TurnLeft. It is loaded, Mode: waiting, a tap on play, then Mode: running, and while it runs it prints all four drive encoder counts to the screen. They climb together. Then all four start over near zero, and this time they part ways: leftFront counts down, to -68, while rightFront counts up, to 108.
| Time in the clip | leftFront | rightFront | leftRear | rightRear |
|---|---|---|---|---|
| 2.3 s | 20 | 23 | 26 | 23 |
| 3.0 s | 407 | 411 | 412 | 411 |
| 4.0 s | 1,011 | 1,014 | 1,014 | 1,012 |
| 5.1 s | 1,619 | 1,621 | 1,620 | 1,619 |
| 5.6 s | 1,936 | 1,938 | 1,934 | 1,935 |
| 6.4 s | 2,395 | 2,395 | 2,392 | 2,395 |
Calculation Did the four wheels turn together?
| Counts at 3.0 s | 407, 411, 412, 411 | read off the Driver Station in our video |
|---|---|---|
| Counts at 6.4 s | 2,395, 2,395, 2,392, 2,395 | same video |
| Widest gap in any readable reading (16 of them) | 7 counts | same video (at 2.5 s and 3.3 s) |
- At 3.0 s: 412 - 407 = 5 counts apart, 5 / 411 = about 1.2 %
- At 6.4 s: 2,395 - 2,392 = 3 counts apart, 3 / 2,395 = about 0.1 %
- Count rate: (2,395 - 411) counts / (6.4 s - 3.0 s) = about 580 counts a second on each wheel
All four wheels stayed within 7 counts of each other, and the gap never grew as the counts climbed from 20 to 2,395: the four wheels turned together.
Counts are as the code printed them; the motors and their counts per turn are not known, so this is not converted to a speed.










