Skip to content

feat(sitl): wasm harness gains the real gz backend (unblocks the Gazebo wasm leg) - #391

Open
avrabe wants to merge 1 commit into
mainfrom
feat/wasm-harness-gz-backend
Open

feat(sitl): wasm harness gains the real gz backend (unblocks the Gazebo wasm leg)#391
avrabe wants to merge 1 commit into
mainfrom
feat/wasm-harness-gz-backend

Conversation

@avrabe

@avrabe avrabe commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Cherry-picked out of #382, which is held for jess's input on the sensor-frame
shape. This commit is orthogonal to that seam change and should not wait on it.

Why now

#381 landed, so the Gazebo job stopped skipping its wasm leg — and immediately
failed:

error[E0432]/[E0433]: unresolved import `gz_transport`
could not compile `cascade-sitl-wasm` due to 8 previous errors

The workflow runs cargo build --release --features gazebo, but on main that
feature is an empty stub (gazebo = []), declared only so the
#[cfg(feature = "gazebo")] blocks inside the included physics.rs are a
known-false cfg rather than an unexpected one. The real deps live on #382's branch.

What it adds

BACKEND=gazebo selects the same GazeboPhysics bridge examples/falcon-sitl-gz
flies, so a wasm result and a native result are comparable rather than merely
adjacent. BACKEND=mock (default) is unchanged and stays dependency-free — it is
the analytic plant every number in #380 came from.

gz deps pinned to the same versions falcon-sitl-gz uses. A different
gz-transport here would be a different bridge than the one every native SITL
result was produced with, and the comparison would stop meaning anything.

Verified both ways locally

cargo build --release                     exit 0   (mock, dependency-free)
cargo build --release --features gazebo   exit 0   (against brew gz-transport13)

Refs #386, #382, #380

🤖 Generated with Claude Code

https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG

BACKEND=gazebo selects the same GazeboPhysics bridge examples/falcon-sitl-gz
flies, so a wasm result and a native result are comparable rather than merely
adjacent. BACKEND=mock (default) is unchanged and stays dependency-free — it is
the analytic plant every number in #380 came from.

The gz deps are pinned to the SAME versions falcon-sitl-gz uses. A different
gz-transport here would be a different bridge than the one every native SITL
result was produced with, and the comparison would stop meaning anything.

Builds verified both ways on this machine: `cargo build --release` (mock) and
`cargo build --release --features gazebo` against brew's gz-transport13, both
exit 0.

RUNNING it against a live world is currently blocked by a broken local Gazebo,
not by anything here: gz-sim8 8.14.0 links libswscale.9.dylib while the
installed ffmpeg 9.0.1 ships libswscale.10, so `gz sim` dies in dlopen before
the world loads. Also note `gz sim` is not registered as a subcommand unless
GZ_CONFIG_PATH includes /opt/homebrew/opt/gz-sim8/share/gz — worth writing down,
because the symptom is `gz` printing its help text with no error.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HvusAXYbHLyv3uTzfBcMbG
@avrabe
avrabe enabled auto-merge (squash) September 10, 2026 21:06
@avrabe
avrabe disabled auto-merge September 10, 2026 21:17
@avrabe
avrabe enabled auto-merge (squash) September 10, 2026 21:56
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