Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/saquer916/odyssey/llms.txt

Use this file to discover all available pages before exploring further.

Odyssey is a high-performance autonomous path-following library built for FIRST Tech Challenge (FTC) competition robots. It models robot trajectories as chained cubic Bézier curves, computes arc-length-parameterized velocity profiles that respect acceleration, braking, and centripetal limits, and drives a mecanum chassis with translational + heading PID plus kS/kV/kA feedforward — all in a small, dependency-light Java library you drop straight into your TeamCode module.

Introduction

Learn what Odyssey is, how it’s architected, and when to use it in your FTC season code.

Quickstart

Build and follow your first Bézier path in under five minutes with a working OpMode example.

Core Concepts

Understand Bézier curves, arc-length parameterization, velocity profiles, and heading interpolation.

API Reference

Complete method signatures, parameters, and return types for every public class in Odyssey.

What Odyssey Does

Odyssey solves the three hard problems of FTC autonomous driving:
  1. Smooth, time-optimal paths — cubic Bézier curves parameterized by arc length so the robot moves at a consistent rate along the actual curve, not the parameter axis.
  2. Physics-aware velocity planning — a trapezoidal profile that simultaneously enforces max velocity, max acceleration, max braking deceleration, and a per-point centripetal acceleration limit so the robot never skids on tight corners.
  3. Accurate following — a Follower that combines a drive feedforward (kS + kV + kA) with PID corrections for lateral offset and heading error, outputting a DriveSignal your MecanumDrive converts directly to motor powers.
1

Add odyssey-core to your project

Copy the odyssey-core module into your Android Studio FTC project and add it as a dependency in your TeamCode/build.gradle.
2

Define your path

Chain one or more BezierCurve objects into a Path, choosing a HeadingInterpolator for each segment.
3

Build a VelocityProfile

Construct a VelocityProfile from your path and kinematic limits — Odyssey pre-computes the optimal speed at every centimeter of travel.
4

Run the Follower in your OpMode loop

Call follower.update(currentTime) each loop iteration to receive a DriveSignal, then pass it to MecanumDrive.drive().

Key Features

Arc-Length Parameterization

Gauss–Legendre integration and Brent root-finding give you true distance-to-parameter inversion with 1 × 10⁻⁹ tolerance.

Curvature-Aware Speed Limiting

The velocity profile automatically slows at corners so centripetal acceleration never exceeds your configured limit.

Four Heading Interpolators

Choose Constant, Linear, Tangent, or FaceTarget heading control per curve segment.

Pluggable Localizer Interface

Swap in any odometry source — a GoBILDA Pinpoint implementation is included out of the box.

kS/kV/kA Feedforward

Voltage-compensated feedforward on all four mecanum wheels eliminates battery-sag drift across a match.

JavaFX Path Editor

Drag control points over an FTC field image to design and visualize paths before deploying to the robot.

Build docs developers (and LLMs) love