Skip to content

Releases: Spectrum3847/SpectrumJetson

v2026.10.02: 2027 control word, audit fixes, cooling setting, calibration fix

Choose a tag to compare

@allengregoryiv allengregoryiv released this 02 Oct 02:01

Our Jetson Orin Nano Super vision coprocessor as running on 2026-10-01 (evening), after a full-repo code audit and another team's first bug reports. Built from commit bd9eb9f; everything here can be rebuilt from this tag with the repo's scripts.

New since v2026.10.01

Fixes that would have hurt matches

  • 2027 SystemCore robots looked permanently disabled (photonvision-62). WPILib 2027 publishes a different control-word topic. Idle mode held every camera at ~30 fps through auto and teleop. PhotonVision now reads both the 2026 and 2027 formats.
  • Quiet mode started a second after the robot connected (photonvision-65). At an event the Jetson's date jumps forward when it takes the robot's clock. Every timer now runs on a monotonic clock. Quiet mode also survives a PhotonVision restart (photonvision-64), and retries if it can't leave quiet mode.
  • Fewer ways to take every camera down at once:
    • a dashboard edit during a pipeline switch could free a detector still in use (photonvision-66);
    • native CUDA errors outside the detector are now guarded;
    • a busy scene could overflow a GPU buffer (bos-09);
    • the far-tag search could fault on fine noise: it now searches in tiles under the detector's 2048 px limit, which also fixes far tags on the right of the frame being placed wrong.
  • A dashboard left open got slower and slower until it stopped responding (photonvision-73). It kept every log line, and an unplugged camera logs a burst at every settings change. That can be a pegged browser on the driver-station laptop. It now keeps the newest 2,000 lines.

From another team's reports

  • Calibration cut the camera out while the board was in view (photonvision-70). A board filling the view makes JPEG frames bigger than the USB bandwidth each camera gets at 120 fps. Calibration now runs at the slowest frame rate of the resolution and puts the pipeline's mode back afterwards. Checked by frame-size estimates; not yet tried with a real board.
  • Cooling setting (photonvision-71): Settings > Robot state > Cooling (Fan quiet, Fan full, No fan), applied at once and kept across reinstalls. For teams running the stock fan instead of a heatsink plate.
  • "GPU Acceleration: None detected" (photonvision-72). That's upstream's Raspberry Pi camera line, so it showed on every Jetson. The Device card now says what the GPU is doing, and Match Ready names any camera on the CPU AprilTag type.

Also

  • The far-tag search ignores excluded tags when deciding there's a good view (photonvision-69).
  • Per-tag quality on NetworkTables (photonvision-61).
  • The snapshot restore dialog says what it replaces (photonvision-68).
  • Dashboard pollers can't pile up on a slow link (photonvision-67).
  • Wi-Fi reconnects after an access point rejects it.
  • A stuck PhotonVision stop is killed after 15 s, not 90.
  • SpectrumVision: a robot-side PhotonLib wrapper for WPILib 2026 and 2027 alpha-6, with desktop simulation on Ubuntu 22.04.
  • Tests:
    • a detector regression corpus, which the bundle script checks before packing;
    • a SystemCore rehearsal, at the robot loop you'll run (REHEARSAL_PERIOD_MS=10): over USB with 4 cameras at 121 fps, results reach robot code at p50 25 ms with a 10 ms loop, 31 ms with 20 ms;
    • fake cameras for the browser tests;
    • tests/run-all.sh for the whole unattended suite;
    • lint in CI.

Known open items are in docs/AUDIT-2026-10.md.

Files

File What it is
spectrum-jetson-prebuilt-v2026.10.02-bd9eb9f.tar.gz What the slow setup steps compile, for JetPack 6.2.3 / L4T 36.5.2, CUDA 12.6 only. See the list below.
….tar.gz.sha256 Its checksum. install.sh --prebuilt checks it, then checks every file against the bundle's MANIFEST (repo commit, L4T, CUDA, patch list, SHA-256 per file), and refuses a mismatched L4T or CUDA.

What's in the bundle:

  • the CUDA AprilTag detector (lib971apriltag.so), with our bos-* patches;
  • our JPEG-hardware and TensorRT libraries;
  • the field-calibration tool;
  • the synthetic-tag generator that fake-cameras.sh uses (new);
  • the three allwpilib libraries the detector needs at runtime;
  • our PhotonVision jar, with patches 00–73.

Use it with scripts/host/setup-jetson.sh --prebuilt (newest release), or scripts/jetson/install.sh --prebuilt <bundle> on the Jetson. The camera driver is still compiled on the Jetson, for its exact kernel (41 s).

Licenses

NOTICES.md in the bundle lists where every file comes from:

  • PhotonVision and our code: GPL-3.0;
  • WPILib allwpilib: BSD-3-Clause;
  • the CUDA AprilTag detector by Austin Schuh and FRC 971: Apache-2.0, as published in RealtimeRoboticsGroup/aos.

The copy we build from (frc971/bos) has no license file of its own. If the authors would like this handled differently, open an issue and we'll change it.

Not included

  • Game-piece models: not ours to redistribute (see docs/GAME-PIECE-MODELS.md).
  • PhotonVision settings and SSD images: team-specific, and the images contain Wi-Fi and SSH credentials.

v2026.10.01: storage for power cuts, quiet mode, fanless, prebuilt setup

Choose a tag to compare

@allengregoryiv allengregoryiv released this 01 Oct 04:10

Our Jetson Orin Nano Super vision coprocessor as running on 2026-10-01, rebuilt from scratch after its first SSD died. Built from commit ae5d2f1; everything here can be rebuilt from this tag with the repo's scripts.

New since v2026.09.24.2

  • Storage built for power cuts. The first SSD (a DRAM-less budget drive) lost data after 21 power cuts and stopped booting. The SSD is now split three ways:

    • a 64 GB system partition, read-only before competition (ro-root.sh on, NVIDIA's own overlay);
    • a settings partition, written only when a setting changes;
    • a scratch partition for Rewind and logs.

    If either data partition is damaged, the Jetson still boots and runs the match: on the last-good settings, or with recording paused and logs in RAM. Nothing is wiped automatically. The health check reports the SSD's own media-error count.

  • Quiet mode (photonvision-56). After a match ends, or 60 s disabled, the Jetson stops writing to the SSD. Any enable ends it about 80 ms later, and vision never waits on it. A requested recording (field calibration, Record now, robot code) always wins.

  • Fanless mode (FAN=off, photonvision-57): for a heatsink plate. The fan stays off; at 95 °C every camera is capped at 60 fps until the chip cools. On our plate, matches from a hot idle peaked at 86–88 °C.

  • One-command setup.

    1. scripts/host/prestage-rootfs.sh, then flash.
    2. scripts/host/setup-jetson.sh --prebuilt, which uses this release and takes about 35 minutes, unattended.

    Team values live in config.env.

  • Since the last release, also:

    • Match Ready page;
    • settings snapshots;
    • idle at 30 fps while disabled;
    • event pipeline when the field connects;
    • Switch all and Start from;
    • far-tag search (1.8× range);
    • tag contrast readout;
    • camera-clock timestamps, and 1.2 ms lower latency from the camera driver;
    • five cameras at 122 fps;
    • a browser test suite.

Details: README.

Files

File What it is
spectrum-jetson-prebuilt-v2026.10.01-ae5d2f1.tar.gz What the slow setup steps compile, for JetPack 6.2.3 / L4T 36.5.2, CUDA 12.6 only. See the list below.
….tar.gz.sha256 Its checksum. install.sh --prebuilt checks it, then checks every file against the bundle's MANIFEST (repo commit, L4T, CUDA, patch list, SHA-256 per file), and refuses a mismatched L4T or CUDA.

What's in the bundle:

  • the CUDA AprilTag detector (lib971apriltag.so), with our bos-* patches;
  • our JPEG-hardware and TensorRT libraries;
  • the field-calibration tool;
  • the three allwpilib libraries the detector needs at runtime;
  • our PhotonVision jar, with patches 00–57.

Use it with scripts/host/setup-jetson.sh --prebuilt (newest release), or scripts/jetson/install.sh --prebuilt <bundle> on the Jetson. The camera driver is still compiled on the Jetson, for its exact kernel (41 s).

Licenses

NOTICES.md in the bundle lists where every file comes from:

  • PhotonVision and our code: GPL-3.0;
  • WPILib allwpilib: BSD-3-Clause;
  • the CUDA AprilTag detector by Austin Schuh and FRC 971: Apache-2.0, as published in RealtimeRoboticsGroup/aos.

The copy we build from (frc971/bos) has no license file of its own. If the authors would like this handled differently, open an issue and we'll change it.

Not included

  • Game-piece models: not ours to redistribute (see docs/GAME-PIECE-MODELS.md).
  • PhotonVision settings and SSD images: team-specific, and the images contain Wi-Fi and SSH credentials.

v2026.09.24.2: field calibration page, patches 15–30

Choose a tag to compare

@allengregoryiv allengregoryiv released this 24 Sep 19:48

Bench-tested build of our Jetson Orin Nano Super vision coprocessor, as running on 2026-09-24 (evening). Everything here can be rebuilt from this tag with the scripts in the repo. These files are the backup, so the exact running versions don't have to be rebuilt.

New since v2026.09.24 (patches 15–30):

  • Field Calibration page in PhotonVision (photonvision-30). Push the robot by hand to still spots and the Jetson solves every tag's real position on the field and every camera's mount, using the same GPU detector as in matches. It includes:

    • camera settings tuning: exposure, gain, brightness, contrast, gamma, sharpness;
    • a guided recording with a live field map and a 3D view built from FIRST's field CAD;
    • results, with one-click apply and undo of the corrected layout.

    Tested on synthetic recordings and on the bench; the shop test with real tags is next. See the README's "Field calibration" section.

  • Health and diagnostics:

    • Jetson and camera health on NetworkTables, including GPU use and throttling;
    • camera settings logged for the robot log;
    • a camera mount estimate from tags.
  • Detection:

    • hardware JPEG decode (NVJPG);
    • bad tags can be left out of multi-tag;
    • better calibration (auto snapshots, our board as the default).
  • UI: copy settings between cameras and pipelines, a tuning guide in the camera UI, and the Thriftiest Cam's hidden controls (contrast, gamma, sharpness, backlight compensation).

  • Recovery: a camera stuck at the wrong resolution, or stuck sending bad frames, now recovers by itself.

Details are in the README.

Files

File What it is How to use it
photonvision-spectrum-v2026.09.24.2-linuxarm64.jar PhotonVision, built from FRC-Team-4143's fork (d8c9e8e) + upstream PhotonVision v2026.3.4 + our patches 00–30, with the 3D field model Copy it to the Jetson, then run scripts/jetson/06-install-fork-jar.sh <jar>
libspectrumtrt.so Our TensorRT YOLO backend (game pieces), for JetPack 6.2.3 / L4T 36.5.2 / TensorRT 10.3 sudo install -m 755 libspectrumtrt.so /usr/lib/
libspectrumnvjpg.so Our NVJPG hardware JPEG decoder, loaded by the detector with SPECTRUM_JPEG_DECODER=nvjpg sudo install -m 755 libspectrumnvjpg.so /usr/lib/, then scripts/jetson/08-select-detector.sh bos --mwbd 20 --jpeg nvjpg
uvcvideo-5.15.199-tegra-payload-cap.ko The USB camera driver with our bandwidth cap (4 cameras fit on the USB-A ports), for kernel 5.15.199-tegra only Normally built by scripts/jetson/11-uvcvideo-payload-cap.sh --install
photonvision-settings-2026-09-24b.zip PhotonVision's settings database: camera names, pipelines, calibrations (TopLeft, TopRight), field layout, network settings PhotonVision web UI: Settings → Import Settings
SHA256SUMS Checksums sha256sum -c SHA256SUMS

Not included, on purpose

  • The CUDA AprilTag detector (lib971apriltag.so) and the field-calibration replay tool (fieldcal_detect). Their source (frc971/bos) has no license file, so we don't publish binaries of them. Rebuild them on the Jetson with scripts/jetson/07-build-bos-detector.sh and scripts/jetson/13-build-fieldcal-detect.sh --install.
  • The FUEL game-piece models. They aren't ours to redistribute. Sources are in docs/GAME-PIECE-MODELS.md.
  • The full SSD image. It contains the Wi-Fi password and SSH keys, so it's kept privately (scripts/host/04-backup-ssd.sh).
  • Calibration snapshot images and logs from the settings export (the database already holds the calibrations).

Licenses

  • The PhotonVision jar and this repo are GPL-3.0, following PhotonVision; the source is this tag.
  • The driver module is GPL-2.0: kernel/uvcvideo-payload-cap.patch applied to stock Linux v5.15.199.
  • The 3D field model in the jar is converted from FIRST's official 2026 field CAD (© FIRST). FIRST publishes the CAD for teams but states no license; AdvantageScope redistributes field models made from the same CAD the same way.
  • Credits for everything we built on are in the README's "Credits and licenses" section.

v2026.09.24: bench-tested Jetson vision build

Choose a tag to compare

@allengregoryiv allengregoryiv released this 24 Sep 07:45

Bench-tested build of our Jetson Orin Nano Super vision coprocessor, as running on 2026-09-24. Everything here can be rebuilt from this tag with the scripts in the repo; these files are the backup, so the exact running versions don't have to be rebuilt.

What's running:

  • Two Thriftiest Cams detecting AprilTags on the GPU at 122 fps each, ~15 ms latency, 1.3 of 6 CPU cores.
  • Rewind (camera video recording on request).
  • Game-piece detection with TensorRT (capped at 30 fps).

Details are in the README.

Files

File What it is How to use it
photonvision-spectrum-v2026.09.24-linuxarm64.jar PhotonVision, built from FRC-Team-4143's fork (d8c9e8e) + upstream PhotonVision v2026.3.4 + our patches 00–14 Copy it to the Jetson, then run scripts/jetson/06-install-fork-jar.sh <jar>
libspectrumtrt.so Our TensorRT YOLO backend (game pieces), for JetPack 6.2.3 / L4T 36.5.2 / TensorRT 10.3 sudo install -m 755 libspectrumtrt.so /usr/lib/
uvcvideo-5.15.199-tegra-payload-cap.ko The USB camera driver with our bandwidth cap (4 cameras fit on the USB-A ports), for kernel 5.15.199-tegra only Normally built by scripts/jetson/11-uvcvideo-payload-cap.sh --install
photonvision-settings-2026-09-24.zip PhotonVision's settings database: camera names, pipelines, calibrations (TopLeft, TopRight), field layout, network settings PhotonVision web UI: Settings → Import Settings
SHA256SUMS Checksums sha256sum -c SHA256SUMS

Not included, on purpose

  • The CUDA AprilTag detector (lib971apriltag.so). Its source (frc971/bos) has no license file, so we don't publish binaries of it. Rebuild it on the Jetson with scripts/jetson/07-build-bos-detector.sh (a few minutes).
  • The FUEL game-piece models. They aren't ours to redistribute. Sources are in docs/GAME-PIECE-MODELS.md.
  • The full SSD image. It contains the Wi-Fi password and SSH keys, so it's kept privately (scripts/host/04-backup-ssd.sh).
  • Calibration snapshot images and logs from the settings export (the database already holds the calibrations).

Licenses

  • The PhotonVision jar and this repo are GPL-3.0, following PhotonVision; the source is this tag.
  • The driver module is GPL-2.0: kernel/uvcvideo-payload-cap.patch applied to stock Linux v5.15.199.
  • Credits for everything we built on are in the README's "Credits and licenses" section.