Modular AirStack 4/9: asm_optitrack extraction, local-layer flatten - #391
Merged
Conversation
…ks/asm_optitrack Trunk now carries zero natnet code. The module owns the whole mocap loop: natnet_ros2 client + EV-fusion bridges, the Isaac Sim NatNet emulator extension (moved with the module per its maintainer — it was the main value of the OptiTrack PRs), the natnet Isaac launch scripts, the integration + optitrack e2e tests, docs, and the optitrack-development skill. - perception.launch.xml: LAUNCH_NATNET gate removed (stack include is the activation path — RFC #379's answer to env toggles); the env var warns for one release via preflight - airstack setup: cmd_setup_natnet_sdk generalized to 'module sync' (module hooks.host_setup cover host-side SDK downloads); --no-natnet removed - compose: LAUNCH_NATNET/NATNET_SERVER_IP env + emulator mounts removed; Dockerfile.isaac-ros no longer bakes the emulator (module loads it via the Kit exts mount); optitrack overrides/*.env deleted (module test_stack replaces them); px4-params/external-vision.env stays (generic EV fusion) - tests: colcon unit-test entries removed; optitrack mark kept for module CI - docs/robot/optitrack.md stub points at the module Install: airstack module add https://github.com/castacks/asm_optitrack.git --version <tag> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- canonical module launch files (declared, described topic args with
canonical defaults; params in config yamls; scoped set_remap binds args
inside each module's namespace group — no <remap>, graph unchanged):
takeoff_landing_planner, fixed_trajectory_task, droan_gl (+18 params →
config/droan_gl.yaml), droan_local_planner, disparity_expansion,
trajectory_controller (+config yaml), pid_controller (+49 params → yaml)
- the three stack entry files now wire the local layer as flat module
includes ('this module, these connections'); stacks differ only in the
droan variant include + disparity source arg
- DELETED local_droan_cpu.launch.xml and local_macvo_obstacle_avoidance
.launch.xml (superseded by stacks; the macvo one never worked); legacy
local.launch.xml frozen byte-identical for the AUTONOMY_ROLE path until
0.21; lint allowlist shrunk accordingly
- merge gate: graph equality vs the committed stacks/*/wiring.md baselines
(GPU verification follows this commit)
Unit suite: 147 passed, 1 skipped.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Lets a caller export explicit KEY=VALUE pairs (e.g. proprietary-license acceptance like NATNET_ACCEPT_LICENSE=1) into the hook step. Values appear in logs — never secrets. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A package moved from trunk into a module keeps its old build/<pkg> CMake cache in bind-mounted checkouts; colcon then fails with 'source does not match cache'. Sync now detects and prints the exact (root-owned-safe) cleanup command. Observe-and-report, never deletes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
robot.launch.xml includes the stack entry when AIRSTACK_STACK_DIR is set; a stack entry wrapping robot.launch.xml recurses infinitely (robot_1/robot_1/... namespace explosion) — found the hard way by the asm_optitrack test_stack's interim wrap form. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A managed modules/<name> dir without .git (interrupted clone or partial remove) made vcs import fail with 'destination path already exists'; sync now clears such dirs before importing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack 4/9 · base:
rfc/s3-stacks-wrapFirst real extraction: OptiTrack leaves trunk for castacks/asm_optitrack (history preserved via git filter-repo), and the local layer flattens into stack entry files under the wiring-equality gate.
What's inside
natnet_ros2, the PX4 external-vision fusion config, the Isaac Sim NatNet emulator (moves with the module — meaningless without it), integration + e2e tests, and docs all live in the module. The proprietary NatNet SDK stays a host-sidehooks.host_setupdownload — never in images or git.local*.launch.xmlvariant wiring hoisted into stack entries; module launch files become arg-declaring, canonical-defaulted, remap-free.hook_envinput for host hooks in module CI, sync self-heals partial checkouts, and a contract test banning stack entries from including the dispatcher (recursion guard).Validation
full_defaultandfull_droan_cpu.🤖 Generated with Claude Code