# driftless-vexu/driftless_override_software architecture

> Architecture diagram of the GitHub repository driftless-vexu/driftless_override_software, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/driftless-vexu/driftless_override_software
- Repository: https://github.com/driftless-vexu/driftless_override_software

## Overview

Driftless Override is VEXU robot-control software. The principal workflow configures a match, initializes the selected robot and control components, then dispatches either autonomous behavior or operator control. Its domain stages include configuration and alliance selection, autonomous execution, operator input, robot subsystems, and motion/control algorithms. The tree also shows trajectory-following, odometry, drive-train, process, and menu capabilities. Several of these are represented by their enclosing source directories because their implementation files were not excerpted; links are limited to relationships visible in excerpts or the SOURCE INDEX.

Main entry points: [`Driftless_Override_PROS/src/driftless/MatchController.cpp`](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/MatchController.cpp) (Match controller), [`Driftless_Override_PROS/src/driftless/control/ControlSystem.cpp`](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/ControlSystem.cpp) (Control system), [`Driftless_Override_PROS/src/driftless/OpControlManager.cpp`](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/OpControlManager.cpp) (Operator manager), [`Driftless_Override_PROS/src/driftless/robot/Robot.cpp`](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/robot/Robot.cpp) (Robot subsystem router)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_match["Match orchestration"]
  node_entry["PROS entry points<br/>[main.cpp]"]
  node_factory["Match factory"]
  node_match_controller["Match controller"]
  node_menu["Match menu"]
  node_auton["Autonomous manager<br/>[AutonManager.cpp]"]
  node_auton_routines["Autonomous routines"]
  node_alliance["Alliance selection"]
  node_operator_manager["Operator manager"]
  node_profiles["Robot profiles"]
end

subgraph group_runtime["Robot runtime"]
  node_robot["Robot subsystem router<br/>[Robot.cpp]"]
  node_drive["Drive trains"]
  node_odometry["Odometry"]
  node_processes["Process system<br/>[ProcessSystem.cpp]"]
end

subgraph group_motion["Motion control"]
  node_control["Control system<br/>[ControlSystem.cpp]"]
  node_trajectory["Trajectory planning"]
  node_path_following["Path following"]
  node_pose_control["Pose control"]
end

subgraph group_platform["PROS integration"]
  node_controller_iface["Controller interface<br/>[IController.hpp]"]
  node_pros_controller["PROS controller adapter<br/>[ProsController.cpp]"]
  node_motor_output["Motor voltage control"]
end

node_operator(("Competition operator"))
node_pros{{"PROS runtime"}}

node_entry -->|"includes factory"| node_factory
node_factory -->|"creates controller"| node_match_controller
node_match_controller -->|"displays and reads"| node_menu
node_match_controller -->|"configures and runs"| node_auton
node_match_controller -->|"configures and runs"| node_operator_manager
node_match_controller -->|"builds and runs"| node_control
node_match_controller -->|"builds and runs"| node_robot
node_match_controller -->|"builds and runs"| node_processes
node_match_controller -->|"sets alliance"| node_alliance
node_operator_manager -->|"sets profile"| node_profiles
node_operator_manager -->|"reads controls"| node_controller_iface
node_pros_controller -->|"implements interface"| node_controller_iface
node_auton -.->|"selects routine"| node_auton_routines
node_control -.->|"uses planning"| node_trajectory
node_control -.->|"runs follower"| node_path_following
node_control -.->|"runs pose control"| node_pose_control
node_robot -.->|"routes commands"| node_drive
node_robot -.->|"routes commands"| node_odometry
node_drive -.->|"sets motor voltage"| node_motor_output
node_pros_controller -->|"uses runtime API"| node_pros
node_operator -.->|"starts competition"| node_entry

click node_entry "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/main.cpp"
click node_factory "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/MatchControllerFactory.cpp"
click node_match_controller "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/MatchController.cpp"
click node_menu "https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/menu"
click node_auton "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/AutonManager.cpp"
click node_auton_routines "https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/auton"
click node_alliance "https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/alliance"
click node_operator_manager "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/OpControlManager.cpp"
click node_profiles "https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/profiles"
click node_control "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/ControlSystem.cpp"
click node_trajectory "https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/control/trajectory"
click node_path_following "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/path/PIDPathFollower.cpp"
click node_pose_control "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/motion/PIDHolonomicGoToPose.cpp"
click node_robot "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/robot/Robot.cpp"
click node_drive "https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/robot/subsystems"
click node_odometry "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/robot/subsystems/odometry/InertialPositionTracker.cpp"
click node_processes "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/Processes/ProcessSystem.cpp"
click node_controller_iface "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/include/driftless/io/IController.hpp"
click node_pros_controller "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/pros_adapters/ProsController.cpp"
click node_motor_output "https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/io/motor_voltage_control/PartialFeedForwardVoltageController.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_factory,node_match_controller,node_menu,node_auton,node_auton_routines,node_alliance,node_operator_manager,node_profiles toneBlue
class node_robot,node_drive,node_odometry,node_processes toneAmber
class node_control,node_trajectory,node_path_following,node_pose_control toneMint
class node_controller_iface,node_pros_controller,node_motor_output toneRose
class node_operator,node_pros toneIndigo
```

## Components

### Match orchestration

- [PROS entry points](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/main.cpp): `Driftless_Override_PROS/src/main.cpp`
- [Match factory](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/MatchControllerFactory.cpp): `Driftless_Override_PROS/src/driftless/MatchControllerFactory.cpp`
- [Match controller](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/MatchController.cpp): `Driftless_Override_PROS/src/driftless/MatchController.cpp`
- [Match menu](https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/menu): `Driftless_Override_PROS/src/driftless/menu`
- [Autonomous manager](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/AutonManager.cpp): `Driftless_Override_PROS/src/driftless/AutonManager.cpp`
- [Autonomous routines](https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/auton): `Driftless_Override_PROS/src/driftless/auton`
- [Alliance selection](https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/alliance): `Driftless_Override_PROS/src/driftless/alliance`
- [Operator manager](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/OpControlManager.cpp): `Driftless_Override_PROS/src/driftless/OpControlManager.cpp`
- [Robot profiles](https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/profiles): `Driftless_Override_PROS/src/driftless/profiles`

### Robot runtime

- [Robot subsystem router](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/robot/Robot.cpp): `Driftless_Override_PROS/src/driftless/robot/Robot.cpp`
- [Drive trains](https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/robot/subsystems): `Driftless_Override_PROS/src/driftless/robot/subsystems`
- [Odometry](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/robot/subsystems/odometry/InertialPositionTracker.cpp): `Driftless_Override_PROS/src/driftless/robot/subsystems/odometry/InertialPositionTracker.cpp`
- [Process system](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/Processes/ProcessSystem.cpp): `Driftless_Override_PROS/src/driftless/Processes/ProcessSystem.cpp`

### Motion control

- [Control system](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/ControlSystem.cpp): `Driftless_Override_PROS/src/driftless/control/ControlSystem.cpp`
- [Trajectory planning](https://github.com/driftless-vexu/driftless_override_software/tree/main/Driftless_Override_PROS/src/driftless/control/trajectory): `Driftless_Override_PROS/src/driftless/control/trajectory`
- [Path following](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/path/PIDPathFollower.cpp): `Driftless_Override_PROS/src/driftless/control/path/PIDPathFollower.cpp`
- [Pose control](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/control/motion/PIDHolonomicGoToPose.cpp): `Driftless_Override_PROS/src/driftless/control/motion/PIDHolonomicGoToPose.cpp`

### PROS integration

- [Controller interface](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/include/driftless/io/IController.hpp): `Driftless_Override_PROS/include/driftless/io/IController.hpp`
- [PROS controller adapter](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/pros_adapters/ProsController.cpp): `Driftless_Override_PROS/src/driftless/pros_adapters/ProsController.cpp`
- [Motor voltage control](https://github.com/driftless-vexu/driftless_override_software/blob/main/Driftless_Override_PROS/src/driftless/io/motor_voltage_control/PartialFeedForwardVoltageController.cpp): `Driftless_Override_PROS/src/driftless/io/motor_voltage_control/PartialFeedForwardVoltageController.cpp`

### Other components

- **Competition operator**
- **PROS runtime**

## Connections

- PROS entry points → Match factory: includes factory
- Match factory → Match controller: creates controller (evidence: `Driftless_Override_PROS/src/driftless/MatchControllerFactory.cpp`)
- Match controller → Match menu: displays and reads (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Match controller → Autonomous manager: configures and runs (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Match controller → Operator manager: configures and runs (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Match controller → Control system: builds and runs (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Match controller → Robot subsystem router: builds and runs (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Match controller → Process system: builds and runs (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Match controller → Alliance selection: sets alliance (evidence: `Driftless_Override_PROS/src/driftless/MatchController.cpp`)
- Operator manager → Robot profiles: sets profile
- Operator manager → Controller interface: reads controls
- PROS controller adapter → Controller interface: implements interface
- Autonomous manager → Autonomous routines: selects routine
- Control system → Trajectory planning: uses planning
- Control system → Path following: runs follower
- Control system → Pose control: runs pose control
- Robot subsystem router → Drive trains: routes commands
- Robot subsystem router → Odometry: routes commands
- Drive trains → Motor voltage control: sets motor voltage
- PROS controller adapter → PROS runtime: uses runtime API
- Competition operator → PROS entry points: starts competition
