Mini-Project 4: A Pivoting Roller Intake
Design a deploy-and-retract intake: size a small pivot motor, pick a roller motor and compliant wheels, and sequence deploy + spin with command-based code.
Sign in to track progress, earn XP, and save lessons.
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
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
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
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
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)
- 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
- 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.
Go deeper
Lesson quiz
RequiredAnswer all 3 questions correctly to complete this lesson.
1.How does the pivoting roller intake split its two motions in control terms?
2.What command-based sequence does the lesson use for an intake cycle?
3.Which sensing methods does the lesson recommend for automatically detecting a captured game piece?
Answer every question to submit.