Odyssey ships as an Android library module (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-core) that you include directly inside your existing FTC Android Studio project — no Maven repository, no JAR download. The module is pure Java (targeting Java 8), so it compiles alongside your TeamCode without any additional Android configuration. This page walks you through copying the module in, registering it with Gradle, and verifying that your hardware configuration matches what the built-in classes expect.
Prerequisites
Before installing Odyssey, ensure your development environment meets these requirements:- Android Studio Ladybug (2024.2) or later — earlier versions may not support the Gradle version used by the FTC SDK project template.
- FTC SDK 10.x or 11.x — Odyssey targets the same Java 8 compatibility level as both SDK generations. The sample
build.dependencies.gradlereferences FTC SDK11.1.0. - GoBILDA Pinpoint odometry computer — required only if you use the built-in
PinpointLocalizer. You may skip this hardware and implement theLocalizerinterface yourself. - Apache Commons Math 3 —
odyssey-coredepends onorg.apache.commons:commons-math3:3.6.1for its Gauss–Legendre integrator and Brent root-solver. This is declared inodyssey-core/build.gradleand resolves transitively throughmavenCentral().
Installation
Clone the repository alongside your FTC project, or download the ZIP from GitHub and extract it. You only need to copy the
odyssey-core directory into your project — the rest of the repository (FtcRobotController, odyssey-gui, TeamCode) can be left aside if you already have a working FTC project.// Command line (from your FTC project root)
// git clone https://github.com/saquer916/odyssey.git ../odyssey-repo
// Then copy the odyssey-core folder into your project root.
MyFtcProject/
├── FtcRobotController/
├── TeamCode/
├── odyssey-core/ ← newly added
├── build.common.gradle
├── build.dependencies.gradle
├── settings.gradle
└── ...
Open
settings.gradle at your project root and add the ':odyssey-core' include. The existing lines for ':FtcRobotController' and ':TeamCode' should already be present.// settings.gradle
include ':FtcRobotController'
include ':TeamCode'
include ':odyssey-core' // ← add this line
Open
TeamCode/build.gradle and add implementation project(':odyssey-core') inside the dependencies block.// TeamCode/build.gradle
dependencies {
implementation project(':FtcRobotController')
implementation project(':odyssey-core') // ← add this line
}
odyssey-core/build.gradle already declares implementation 'org.apache.commons:commons-math3:3.6.1' against mavenCentral(). Gradle resolves this transitively when TeamCode depends on :odyssey-core, so you do not need to add the Commons Math dependency to TeamCode/build.gradle yourself.In Android Studio, click File → Sync Project with Gradle Files (or the elephant/sync icon in the toolbar). The build should complete without errors. If you see a “Project with path ‘:odyssey-core’ could not be found” error, double-check the
include line in settings.gradle and confirm that the odyssey-core directory is at the project root — not nested inside TeamCode.If you want to use Odyssey’s ready-made mecanum drivetrain and Pinpoint localizer, copy these two files from the repository into your
TeamCode source tree and adjust the package declaration if needed:TeamCode/src/main/java/org/firstinspires/ftc/teamcode/odyssey/drive/MecanumDrive.javaTeamCode/src/main/java/org/firstinspires/ftc/teamcode/odyssey/localization/PinpointLocalizer.javaHardware configuration
Odyssey’s built-in classes assume specific hardware configuration names. Set these names in the Robot Controller’s hardware configuration file (or the Driver Station configuration tool) to match.Drive motors
MecanumDrive retrieves four DcMotorEx instances by name. The default names used in the quickstart and sample OpModes are:
| Hardware map name | Motor position |
|---|---|
leftfront | Front-left drive motor |
rightfront | Front-right drive motor |
leftback | Rear-left drive motor |
rightback | Rear-right drive motor |
RunMode.RUN_WITHOUT_ENCODER and ZeroPowerBehavior.BRAKE automatically inside the MecanumDrive constructor.
Localizer (GoBILDA Pinpoint)
PinpointLocalizer wraps a GoBildaPinpointDriver instance. In your OpMode, retrieve it with:
"localizer" must match the name you assigned to the Pinpoint device in the Robot Controller configuration. PinpointLocalizer reads position in millimetres (DistanceUnit.MM) and heading in radians (AngleUnit.RADIANS), which is the coordinate system all of odyssey-core operates in.
Transitive dependency note
odyssey-core has one runtime dependency that Gradle resolves automatically:
| Dependency | Version | Purpose |
|---|---|---|
org.apache.commons:commons-math3 | 3.6.1 | IterativeLegendreGaussIntegrator (arc-length), BrentSolver (distance → t inversion) |
mavenCentral(). If your project uses a corporate proxy or a local Maven mirror, ensure mavenCentral() is reachable or mirror commons-math3:3.6.1 to your local repository.