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.
the part worth keeping
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.
Mechanical, Build & PneumaticsWorked Examples & Mini-Projectslesson 4 of 5
Keep going
Take the quiz+10 XP with an accountMore in Worked Examples & Mini-Projects
where this came from
Sources and corrections
This lesson is AI-assisted: drafted from primary sources, then reviewed and edited by hand. Errors still get through. When one is reported we fix it and write down what changed, in public, in the corrections log.
sources and further reading
- docs.wpilib.orgWPILib Command-Based Programming
- frcdesign.orgFRCDesign Mechanism Examples (Intakes)
- docs.revrobotics.comREV Motor Comparison (NEO / NEO 550)
clipped to this lesson
Articles that go further on this
The lesson gets you through the topic. These go wider on it, and they read in one sitting.
- 15 min readHow to Design an FRC Intake: Rollers, Compression, and MotorsA primary-source FRC intake design guide: over-the-bumper vs under-bumper, roller vs wheel, compliance and durometer, compression and wrap, and motor selection./blogread it
- 13 min readFRC Code Structure Best Practices: Command-Based Project ArchitectureHow to structure an FRC command-based robot project the right way — subsystems, commands, RobotContainer, and Constants — verified against official WPILib docs./blogread it
- 9 min readFRC Command-Based Programming: Subsystems, Commands, and the SchedulerA beginner-friendly guide to WPILib command-based programming in Java: subsystems, commands, the CommandScheduler, triggers, and composing commands./blogread it
answer sheet
Lesson quiz
All 3 right completes the lesson. Miss one and only that question comes back, anything you already answered correctly stays banked.
0 of 3 answered
01How does the pivoting roller intake split its two motions in control terms?
02What command-based sequence handles an intake cycle?
03Which sensing methods are recommended for automatically detecting a captured game piece?
Answer every question to submit.
All 47 lessons in Mechanical, Build & Pneumaticsopenclose
01 / prerequisites
02 / drivetrains
03 / power-transmission
04 / structure-materials-fasteners
05 / mechanisms-fabrication-assembly
06 / pneumatics-fundamentals
07 / pneumatic-components
08 / build-wire-program
09 / safety-rules-testing
10 / worked-examples-mini-projects
- Not read yet:Mini-Project 1: A Single-Jointed Arm From Math to Motion
- Not read yet:Mini-Project 2: A Two-Stage Cascade Elevator
- Not read yet:Mini-Project 3: A Velocity-Controlled Flywheel Shooter
- Not read yet:Mini-Project 4: A Pivoting Roller Intake
- Not read yet:Mini-Project 5: Integrating a COTS Swerve Module
11 / common-mistakes-troubleshooting
- Not read yet:Pneumatics Won't Fire: A Full Diagnostic Tree
- Not read yet:The Robot Won't Drive Straight (and Other Drivetrain Sins)
- Not read yet:Gearboxes That Grenade and Fasteners That Vibrate Loose
- Not read yet:Closed-Loop Mechanisms That Oscillate, Sag, or Stall
- Not read yet:Field-Ready Reliability: Inspection, Spares, and the Pit Checklist
12 / advanced-techniques-case-studies
- Not read yet:Characterizing Any Mechanism with SysId
- Not read yet:Simulation-Driven Design with WPILib Physics Models
- Not read yet:Motion Profiling and Superstructure Coordination
- Not read yet:Designing for Weight, Stiffness, and Manufacturability
- Not read yet:Case Studies: Learning From Open Alliance Robots