Mini-Project 4: A Pivoting Roller Intake
The goal
Section titled “The goal”A pivoting intake that deploys over the bumper, spins compliant rollers to grab a game piece, and retracts. Two motions: a pivot (position) and a roller (raw speed).
Step 1 — The pivot
Section titled “Step 1 — The pivot”The pivot only needs to fight the intake’s own weight (light, ~3-4 lb at a short moment arm), so a NEO 550 (REV-21-1651) or a single NEO through a MAXPlanetary 9:1 + a small chain reduction is plenty. Because the arm is light, you can often skip a full ProfiledPIDController and use a simple position loop with a kG term, but profiling still gives gentler deploys that don’t bounce game pieces out.
Mount a hard stop at the deployed position so the mechanism rests on metal, not on motor torque. Use an absolute Through Bore Encoder V2 (REV-11-3174) on the pivot axle for reliable startup angle.
Step 2 — The rollers
Section titled “Step 2 — The rollers”Rollers want speed and grip, not precision. Run 2 in compliant wheels on a 1/2 in hex shaft, driven by a NEO 550 or a brushed motor through a light reduction (e.g. 3:1 to 4:1) so surface speed stays high. Set a modest current limit (20-30 A) so a jammed game piece doesn’t cook the motor.
Step 3 — Command-based sequencing
Section titled “Step 3 — Command-based sequencing”The magic is the sequence: deploy, then spin, then sense, then retract. In WPILib command-based:
public Command intakeSequence() { return Commands.sequence( pivot.setGoalCommand(DEPLOYED_RAD), Commands.waitUntil(pivot::atGoal), rollers.runCommand(0.8) // duty cycle .until(this::hasGamePiece), Commands.parallel( rollers.stopCommand(), pivot.setGoalCommand(STOWED_RAD)));}Step 4 — Sensing the catch
Section titled “Step 4 — Sensing the catch”A cheap, reliable game-piece detector is a beam-break sensor or a current spike on the roller motor (current rises when a piece loads the rollers). Either feeds hasGamePiece(). Avoid relying solely on driver timing; an automatic stop prevents intake jams and double-loads.
Step 5 — Mechanical robustness (lessons from real teams)
Section titled “Step 5 — Mechanical robustness (lessons from real teams)”- Use compliant/squishy wheels so misaligned game pieces still funnel in; rigid wheels reject anything off-center.
- Polycarbonate side guides funnel the piece into the rollers.
- Route the roller motor power and the encoder cable through the pivot with a service loop so repeated deploy/retract cycles don’t fatigue the wire. Pivoting intakes are a top source of broken wires mid-event.
Key takeaways
Section titled “Key takeaways”- An intake has two control modes: a light position-controlled pivot and a speed-controlled roller; treat them separately.
- Sequence deploy -> spin -> sense -> retract as a command, and stop automatically on a beam-break or roller current spike.
- Add a hard stop at deploy, use compliant wheels with poly funnels, and route cabling with a service loop to survive repeated pivots.
This lesson was adapted from learnfrc.com.
