Logan Brown


I have spent 5 years and hundreds of hours developing my FTC robot control software library Cuttlefish. As a way to give back, I made Cuttlefish open-source and donated it to the FTC community. It is now actively used by over 500 teams worldwide. It has been incredibly gratifying to directly support, communicate with, and mentor teams around the world using my software and their journey into programming, mathematics, and robotics.​​​​​​​​
Architecture: What is Cuttlefish
Being able to precisely locate, navigate and control robots in their operating environment is difficult. I’ve taken a long-term approach to this challenge by creating Cuttlefish, my open-source control software, from the math up. Named after a smart and agile cephalopod, Cuttlefish has taken hundreds of hours across 5 years to develop, and I continually extend and improve my software allowing me to learn and improve.
​
Cuttlefish has a vast array of features including all of the basics for using a mecanum chassis (deadwheel odometry, navigation, etc.), a scheduling system (task queue state machine), an improved device interface, and enables automatic use of bulk data. Designed to make both the robot programming process, and the resulting code simpler, better, and faster. My highly modular architecture can be easily extended and includes thorough documentation and examples to get started quickly. It solves 3 major challenges, localization, automation, and hardware optimization.
​
Navigation and Localization
Automation and Scheduling
Hardware Optimization
-
Deadwheel Localizer
-
Mecanum Control
-
Smooth Path Navigation
-
Motor Position Control
-
Motor Velocity Control
​
-
Task Queue (Modular Scheduling System)
-
Built in Tasks for Task Queue
-
Direct port access through LynxCommand API
-
Automated bulk polling of sensor data
-
Software bridge between Cuttlefish interfaces and FTC SDK
Cuttlefish Architecture and Testing
-
Makes use of numerous design patterns and uses object oriented design effectively.
-
Backend robot control code is separated into an independent module.
-
Extensive use of interfaces as both proxies to isolate Cuttlefish from the FTC SDK as well as to modularize code to simplify the process of adding new code.
-
Abstract classes and inheritance in order to reuse long blocks of code such as long init sequences.
-
Direct Hardware Mapping allows bulk polling of all sensors and hardware onboard REV Expansion and Control Hubs and directly get and set properties and states of hardware without the need for name aliasing, eliminating the need for Robot config files, reducing programming complexity and loop cycle time.
-
Extensive logging system captures every event that occurs on the Rev hubs during the thousands of live tests. Logs are reviewed weekly for any flagged anomalies.
-
Maven GIT repository allows any team to install and include Cuttlefish with just 2 lines of code.
-
All code is managed through GIT hub.
-
Extensive testing and checkpoints ensure no bugs are introduced: 1. Off-bot hardware testing > 2. On-bot live testing > 3. Push request and code review > 4. Log file review
-
Software separated into Main branch and Experimental branch.
​
Cuttlefish Task Queue
Cuttlefish Task Queue provides the functionality of a state machine, with far more flexibility, and more complex behaviours. Unlike standard finite state machines, where states are predefined, the task queue generates a task tree at runtime and is modified dynamically based on the robot state and/or driver input. This system massively reduces logic complexity allowing you to rapidly edit code without affecting timing or order of tasks. The dynamic generation system allows very complex sequences of tasks with minimal code and extensive code reuse, that are inherently protected from entering a failure state (e.g. a race condition).
​

It allows multiple simultaneous operations with task and state dependencies in a single line of code, and integrated state management. Tasks can be initiated in any order. Tasks can initiate based on completion or failure of other specified tasks and/or loop while other tasks are true or false. This greatly reduces time required to program and modify complex behavior.
​
Time Normalized PID/PIDF
Augmented PID/F algorithm utilizes data filtering for consistent step size regardless of processor load or latency.

​
​