{🧊} Black Ice Path Follower - 5x Faster Deceleration
Black Ice (by FTC Team #18535, Frozen Code) is a reactive + predictive path follower that adapts in real-time along paths.
It drives at high speeds and then brakes up to 5× faster than other libraries.
Black Ice achieves this by using quadratic-damped PIDs, which model nonlinear friction and resistance. This lets it accurately predict stopping behavior at any speed, preventing the overshoot and undershoot common with aggressive PIDs that don’t account for friction while braking. This allows much faster, more accurate, and more responsive control by braking to a stop rather than coasting to a stop like other libraries such as Roadrunner or Pedro Path.
How much difference does the Quadratic Damping make?
Other libraries (e.g. Roadrunner, Pedro Path) rely on gentle PID + coasting:
- Coasting (~
-40 in/s²
) needs ~45in
to stop from60 in/s
With quadratic damping + back-EMF braking:
- ~
10 in
to stop from60 in/s
→ nearly 5× faster deceleration - Leaves more time to accelerate before braking
Pros
- Faster - more time accelerating, less time decelerating
- More accurate - higher proportional constant reduces steady-state error
- More responsive - reacts quickly without oscillation due to quadratic damping
Trade-offs
- Higher power usage - requires more voltage, applying reverse power to brake faster
- Sharper stops - can feel less smooth (minor shaking at final stop)
Features
- High-speed routines (made of BezierCurves, Lines, and Points) with optional smoother deceleration
- Command system using
.runAction()
in path routines - Modular customization of paths
- Less boilerplate for creating path routines
Requirements
- Odometry wheels (or other localization for pose + heading)
- Mecanum wheels (other drivetrains supported if you implement the Drivetrain interface)
- Java + Android Studio
Why Did We Develop Our Own Path Follower?
- We wanted to create a faster path follower that could brake as fast as
ZeroPowerBrakeMode
when needed and did not have to always coast to a stop.- This was because our goal for the 2024–2025 season was a five-specimen autonomous using only 312 RPM wheels and after scoring each specimen, the robot had to turn around. We had to solve this using software instead of hardware because we didn’t have enough time to completely redesign our robot.
- To achieve this, we needed our autonomous to be as fast as possible; something we couldn’t accomplish without having our deceleration as fast as
ZeroPowerBrakeMode
.
- We were interested in path following, and we wanted to intuitively learn, hands-on, how path following works.
- We wanted more customization, modularization, and less boilerplate when building paths and autonomous routines.
It was worth creating our own path follower because it gave us our five specimen autnomous and led us to add a quadratic-damping term to our translational PID. This made the system nearly five times faster at decelerating. We never would have discovered this approach without building our own follower from scratch with all the eariler prototype and iterations. Seeing the braking power of zero power brake mode in eariler interations inspired us to create a follower that took advantage of that braking speed.
What We Learned
- Java, the programming language
- Mathematics
- Vectors, dot products, and linear algebra
- Kinematics equations
- Calculus concepts of Derivative and Integral in the context of PIDs
- Clean code practices, including builders, factories, and abstraction, depency injection
- PIDs and PIDFs controllers
- Along with more empirical implementations such as predicting stopping distance
- How motors actually work
- Back-EMF braking
- Documentation
- How to build and maintain a documentation website
- Collaboration and teamwork
Credits
All code developed by Jacob Ophoven with help of Coach Andy and members of the FTC community. Thanks to Pedro Path developers, especially Havish from 12808 RevAmped Robotics, for supporting my project and wanting to implement it into Pedro Path (an advanced path follower used by teams at worlds).
We have also given back to Pedro Path. Our contributions to Pedro Path so far for v1.1.0 include:
- HeadingInterpolator interface
- Kinematics class
- BezierCurve.through that creates a beizer curve that goes through the given points
- Wrote the Docs for pedro’s deceleration algorithm
- Tested their new Bezier Curve class that uses Matrices
We are on the lead of deceleration for upcoming v1.2.0 Pedro Path and we plan to implement our quadratic-damped PIDs for the translational vector. In the mean time, we will create a separate fork of Pedro Path with our the Black Ice follower but with all of the access to Pedro’s localization and tuning.