Skip to content

ariadne live: the document names its city (cvcpkg data), the demos read the host's load - #153

Merged
transfix merged 1 commit into
mainfrom
feat/ariadne-data-city
Nov 3, 2026
Merged

transfix merged 1 commit into
mainfrom
feat/ariadne-data-city

Conversation

@transfix

@transfix transfix commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

The live ports now get their city from the document. docs/live.ari names the Austin city in a data: block, the host loads it once, and the demos read that same load instead of reading the bundle from disk. This is phase D2 of libcvc's docs/roadmap/ARIADNE_DATA_ROADMAP.md.

data:
  city:
    uri: cvcpkg://cy-pca/scene-austin-south-small
    path: share/cvc-scenes/austin_south
    as: city_bundle
scene:
  nodes:
    - node: city
      source: { data: city }

How the city loads

  • Where it comes from: the host downloads the package from cvcpkg.org once, checks it against the registry's sha256, and keeps it in a local cache. It then unpacks it into the state tree and decodes it.
  • What draws it: the document's city node draws the terrain, with the package's aerial image draped over it, and the buildings.
  • What the demo reads: the same objects, through DemoHost.city: its terrain sampler, bounds, occupancy grids and SDF. So the bundle is read once, and never as files.

The changes

grl_snam.ariadne._host

  • load_document lets the data store reach the registry (CVCPKG_URL's origin, else https://cvcpkg.org). With --bundle DIR or GRL_SNAM_SCENE_BUNDLE, it points data.city at that local bundle instead, and nothing is downloaded.
  • document_city turns what loaded into a City. When the package cannot load (offline, no cache), the installed bundle stands in.
  • city_file gives a path-based reader one file of the package; the Humvee uses it.
  • DemoHost.city is new.

grl_snam.demos._common

  • City has sample, bounds and occupancy. open_city(host, lab) returns the host's city when it has one.
  • Otherwise it draws the installed bundle into the lab as before, now loading it once for every occupancy grid instead of once per grid.
  • world_occupancy is shared with bundle_occupancy.

austin_freedrive / austin_learned / austin_patrol take their sampler, bounds, occupancy and SDF from open_city. Under VolRover3 and --standalone they behave as before.

live

  • New --bundle option.
  • A headless run is refused before the document loads, so it never starts a download.
  • austin-planner never loads the city.
  • The Humvee comes from the city's package when it carries one (the small package does).

Needs

transfix/libcvc#998 (Ariadne data) and transfix/libcvc#985 (the Python host). Until a pycvc release carries both, the port tests keep skipping in CI as they do now.

  • With an older pycvc that has #985 but not #998, DemoHost.city returns None and the demos load the installed bundle as before.
  • The document's data: block and its city node are then ignored, with a warning.

Tested

Run on Windows against a local libcvc build with #998 and #985 merged together (head 9c7cf70a, local only).

  • Port tests: tests/test_ariadne_ports.py 12 passed, 2 skipped (no installed bundle on this box, and the GL-only checks).
  • Full suite: 768 passed. The 6 failures also fail without this change:
  • Live run: live austin-freedrive --offscreen --frames 300 --png ..., with only the weights on disk (GRL_SNAM_CHECKPOINT) and no scene bundle.
    • The city came from the cvcpkg package: terrain with the aerial image, the buildings, and the Humvee from the same package.
    • The navigator ran on that world and reached 87% progress.
    • The aerial image is soft up close: the small package's image is 1024 px over 3 km. The full scene-austin-south package is sharper, at 117 MB downloaded once.

…load

docs/live.ari names the Austin city in a data: block (libcvc's Ariadne data, transfix/libcvc#998):
the scene-austin-south-small package on cvcpkg.org, downloaded once (later runs read the cache),
unpacked into the state tree and decoded. Its city node draws the terrain, the package's aerial
image draped over it, and the buildings.

- _host: load_document (the store may reach the registry; --bundle / GRL_SNAM_SCENE_BUNDLE point
  data.city at a local bundle instead, nothing downloaded), document_city (the loaded world as a
  City; the installed bundle stands in when the package cannot load), city_file (a package file a
  path-based reader needs: the Humvee), DemoHost.city.
- demos._common: City (sample, bounds, occupancy) and open_city: the host's city when it has one,
  else the installed bundle drawn into the lab as before (loaded once for every occupancy grid);
  world_occupancy, shared with bundle_occupancy.
- austin_freedrive / austin_learned / austin_patrol take their terrain sampler, bounds, occupancy
  and SDF from open_city, so under the live port no bundle file is read twice.
- live: --bundle; headless is refused before the document loads (no download for nothing); the
  planner never loads the city; the Humvee comes from the city's package when it carries one.
@transfix
transfix merged commit 5b4d6e2 into main Nov 3, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant