

Table of Contents
Table of Contents 2
Analysis 3
Kickoff 3
Autonomous Period 4
Teleoperated Period 4
Endgame 4
Priority List 5
Design 6
Chassis 7
Intake 8
The Gut 9
Shooter 10
Climber 11
Buddy Climb 12
Shifting Gearbox 13
Programming 14
Kotlin Programming Language 14
Autonomous 15
Teleoperated 16
State Space Vendor Dependency -- WPILibStateSpace 17
Vision 18
Analysis
Kickoff

During kickoff, the whole team worked together to determine the strategy for the season. After reading through the game manual and taking a Kahoot rules quiz, the team split up into smaller groups and discussed different strategies and analyzed point values, then decided on the following priorities for the coming season.
The team’s 2020 kickoff strove to involve as many students as possible in determining the strategy for the season. After learning the rules of the game by means of a group read-through of the game manual and a Kahoot quiz, the team split up into small groups — balanced by subteam and grade — to conduct point analysis and discuss potential season strategies. The following season priorities were then decided by a consensus of the team:
- Climber
- Trench travel capability
- Power cell capacity
- Accurate shooter
- Control wheel mechanism

Autonomous
Obi Non’s minimum autonomous period goal was to score at least three preloaded power cells and move off the line. However, through extensive effort and tuning, the team has achieved a eight-cell routine.
Teleoperated
In the teleoperated period, running fast cycles and reliably scoring power cells in the inner/outer power port was the decided to be most important, which influenced the team’s decision to pursue a swerve drivetrain. In addition, a swerve drivetrain allows for better defense avoidance, another major priority. The control panel was made a low priority due to the difficulty of the associated ranking point and large quantity of power cells required.
Endgame
Due in part to the team’s underestimation of the importance of endgame points in the 2019 game, a high priority was put on climbing in the 2020 season. Analysis suggested that almost half of all scoring could occur during the endgame. Additionally, the endgame ranking point appeared to be the most achievable. On top of earning the alliance a ranking point, a double level climb would also greatly increase points scored, improving the probability of a win. This inspired the team to invest in a buddy climber capable of leveling the generator switch.

Priority List
- Climbing
Climbing with a buddy was chosen as the first priority due to the massive amount of points scored in the endgame as well as the potential ranking point.
- Fitting under the trench
Under-trench motion was a priority to enable rapid cross-field motion.
- Scoring power cells in the high goal
Reliable scoring in the high (inner and outer) goal is the most efficient method to collect points outside of the endgame period.
- Carrying as many power cells as possible
A large carry capacity maximizes points-per-second and decreases the need for cross-field travel.
- Intaking from the floor
A floor intake expedites power cell collection and allows cells to be collected in the opposing alliance’s sector, minimizing driving time between cycles.
- Manipulating the control panel
Control panel manipulation occurs a maximum of twice per match, and relies heavily on power cell scoring. For this reason, the team elected to not allocate resources to such a manipulator until climbing and power cell scoring mechanisms had been completed.
Design

Chassis

A swerve drive’s high maneuverability and modularity outweighed the potential risk of attempting a relatively new drive train. The team started testing out a swerve drive in the 2019 offseason, and by the 2020 season was comfortable enough with its programming and controls to utilize it in competition.
Drivetrain
- Four MK2 swerve modules
- High traction blue nitrile tread
- Powered by eight full sized NEOs
- Increased maneuverability to counter defense
- Removes long chain runs
- High traction and torque
- Easy aiming without a turret
Wide Base
- 32.5’’ x 27’’
- Easy to turn
- Minimized risk of collision when driving through the trench
Intake

Obi Non’s intake aims to follow the design philosophy of “touch it, own it”. After experimenting with many designs, we found an effective design which optimized efficiency and reliability.
- Two pivots to allow storage within frame perimeter
- No bumper cutout in order to maximize intake area
- Powered by a single full sized NEO at 1.5:1
- Three full length 1.25” rollers with grip tape
- Manufactured from ¼” polycarbonate and pocketed for weight reduction
The Gut

Using a combination of belts, kickwheels, and gravity, the gut stores 5 power cells and funnels them to the shooter. After testing long belt run designs, an open top gravity assisted hopper indexed power cells more reliably and with reduced degrees of freedom.
- Two belt runs and a kick wheel powered off a NEO 550
- 15 degree angle to encourage power cells and prevent jams
- Second kick wheel powered off of shooter gearbox with 24:36 upduction
Shooter

The shooter is designed to maintain consistent accuracy from anywhere on the near side of the field. We achieved this using an adjustable rack and pinion hood and a livecam for computer aided vision.
Rack and Pinion Hood
- 3D printed rack driven by a NEO 550
- 80 degrees of motion
- Allows for more adjustability and rigidity than pistons
Dual Flywheels
- Power goes to two 4’’ wheels on the bottom and through a 10:7 gear reduction to two 2’’ wheels on the top
- Increases flywheel linear velocity while preserving enough backspin to prevent balls from bouncing out of the goal
- Additional kick wheel powered off of bottom flywheel to increase the speed of the power cell before engaging with the dual flywheels
Climber

Mounted high and on the edge of the robot, the arm allows for balanced buddy or single climbs. In order to fit under the trench, space had to be optimized. A 3-stage telescoping arm with raised superstructure allowed the buddy climber to fit below while still remaining within the design constraints.
Telescoping Arm
- Inspired by FRC 610
- Three stages
- Rigged continuously with Dyneema
- Single gas spring for extending the arm
- Single hook for simplicity
Bistable over center linkage
- Redirects force through a hardstop instead of piston
- Reduces pendulum affect by keeping arm rigid
- Made with ¼’’ aluminum and 0.2’’ bar widths to reduce weight
- Powered by two ½’’ bore 2.5’’ stroke pistons
Buddy Climb

Designed to be compact and reliable, the buddy climber makes use of a ratchet strap attached to a second robot to apply leverage and lift an alliance partner.
- Inspired by FRC 148
- 7’’ wide platform
- Hook and loop tape roller powered by a NEO 550 and dual stage VersaPlanetary gearbox
- Overall reduction of 100:1
- Four sheets of ⅛’’ aluminum to provide leverage and stability
Shifting Gearbox

To power all of Obi Non’s mechanisms without exceeding the PDP slot limit, the team opted to use a shifting gearbox to power the climber and the shooter. Designed for speed, compactness and versatility, the shifting gearbox provides the power to spin the flywheel at over 5000rpm and lift over 300lbs.
- Gear shifting achieved with WCP Dog Shifter
- Manufactured from 0.25” plate with 0.15” bar width to minimize weight
- High gear: overall 0.81:1 reduction to increase speed
- Low gear: overall 42:1 reduction
- Servo-driven pawl both holds robot up while climbing and holds arm retracted against gas spring while stowed
- 1.5” OD drum with spiral dyneema guide
Programming
Kotlin Programming Language

- Concise and intuitive syntax accelerates development pase and lowers bar to entry
- Extension function based unit library prevents unit-related bugs and easy conversion between units (such as meters, feet and inches)
- Motors utilize “NativeUnitModels” to automatically convert between native sensor readings from SparkMAXes to real-world units such as distance and angles.
Autonomous

- Utilize new WPILib swerve odometry and kinematics classes
- Field-relative robot position estimate constantly updated by numerical integration of least-squares chassis velocity
- Odometry also used for vision target tracking
- Paths generated using WPILib’s TrajectoryGenerator
- Takes into account intrinsic robot parameters to ensure all paths are traversable
- Mix of Quintic Hermite and Clamped Cubic splines optimize traversal time
- Cascaded control path following allows for real time correction
- Field-relative linear reference created using trajectory velocity vector feedforward combined with PID feedback on translation error
- Angular velocity reference created based on PID feedback controlling robot heading
- Heading reference utilizes functional interfaces to vary desired heading through trajectory
- Wheel voltages generated with feedforward that accounts for system dynamics with basic DC motor model combined with PID feedback on SparkMAX
Teleoperated

- Field-oriented swerve drive control utilizes NavX IMU and WPILib ChassisSpeeds classes
- Hood motion controlled by combining absolute MA3 encoder and integrated NEO550 encoder
- Absolute encoder ensures constant knowledge of hood position
- Trapezoidal motion profile limits current and acceleration experienced by hood and prevents belt skipping
- Spark MAX integrated PID used to accurately hold position while not moving
- Flywheel controlled with state-space controller
- Model created from characterization data modeling the physical properties of the system
- Measured velocity from Rev through-bore encoder combined with voltage measurements in Kalman Filter to reduce noise
- Voltage commands generated with Linear Quadratic Regulator, which combines model-based feedforward and feedback
State Space Vendor Dependency -- WPILibStateSpace

- Collaboration with 3512 controls mentor Tyler Veness
- State space (modern control theory): focus on modeling a physical system and its reaction to inputs such as voltage
- Allows controllers and filters to be tuned offline, even without a physical robot
- Vendor dependency format allows teams in Java and C++ to simply add vendor JSON to robot project
- Includes all major state space classes
- LinearSystem represents a mechanism or system — from drivetrain or shooter hood to a flywheel
- Enables modeling and tuning on flywheels, arms, elevators or drivetrains with knowledge only of motors, gearing and mass
- Effectively integrates with WPILib’s new Robot Characterization tools to model systems from kV and kA
- LinearQuadraticRegulator: optimally combines feedback and feedforward to minimize error and control effort over infinite time horizon
- KalmanFilter and ExtendedKalmanFilter fuses external measurements with system model to eliminate noise
- Utilized to filter noise on shooter without adding significant phase lag to the controller and minimize recovery time
- Centers around MIT’s DRAKE controls library and the included Discrete Algebraic Riccati Equation solver
- Used WPILib’s Vendor Dependency structure to allow DRAKE’s C++ code to be accessible in both C++ and Java
- Allowed gains to be computed on the RoboRIO rather than by Python ahead of time on an external processor
Vision

- Co-developed Chameleon Vision, an open-source Java-based end-to-end vision solution for FRC teams with features competitive to the Limelight at 0 cost
- Over 1,500 downloads
- Helps reduce “pay-to-win”
- Use Lifecam HD 300 at 864p for increased accuracy
- Target "Pose2d” (X/Y position and rotation) computed using pitch and yaw, and robot gyro angle
- Latency between camera and RoboRIO compensated for to increase accuracy
- Field-relative target pose estimate computed by transforming drivetrain position at image capture by offset from robot’s center to camera center and camera center to target
- Estimates averaged using WPILib’s new Moving Median filter
- Outlier samples rejected based on deviation from average of preexisting samples
- Old samples are removed from sample list after 2 seconds
- Allows aiming at a target obscured by flying power cells or defenders
- Knowledge of target's and robot’s field-relative pose allows accurate aiming at inner port
- Distance between robot and target pose used to determine flywheel speed and hood angle by linear interpolation between known-good samples