Skip to content

Johnliu/optitrack emulation#367

Draft
JohnYanxinLiu wants to merge 24 commits into
developfrom
johnliu/optitrack_emulation
Draft

Johnliu/optitrack emulation#367
JohnYanxinLiu wants to merge 24 commits into
developfrom
johnliu/optitrack_emulation

Conversation

@JohnYanxinLiu

Copy link
Copy Markdown
Collaborator

What features did you add and/or bugs did you address?

  • Which GitHub issue does this address?

  • Additional description if not fully described in the GitHub issue

  • Please add videos and images to demonstrate the feature. Please upload videos to somewhere persistent (e.g. YouTube or Vimeo) for archival purposes.

How did you implement it?

  • Algorithm details, design decisions, engineering notes, and any other relevant information about the implementation should be included

How do you run and use it?

  • What commands and button presses do you use to manually launch the stack to use your new feature?

  • Write a detailed procedure with EXACT BASH COMMANDS so that another maintainer can replicate and understand the benefits of your feature, and reproduce the videos and images you added above.

Testing with PyTest

  • What pytests did you add to ensure the feature is reliable and robust? What metrics are used?

  • What's the exact command to run the pytests that test your feature? i.e. airstack test -m ...

  • What are the expected results of the tests? What should a maintainer look at to understand whether the test succeeded?

Documentation

  • Was mkdocs.yml updated? (y/n)

  • Do the docs have sufficient scope such that a newcomer can easily reproduce and use your feature?

  • Is there sufficient visual media?

Versioning

JohnYanxinLiu and others added 24 commits June 4, 2026 15:38
…handlers

Refactor the emulator server around a pre-packed MODELDEF wire cache and add
the NAT_REQUEST_MODELDEF and NAT_KEEPALIVE handlers so libNatNet 4.4 clients
complete the unicast handshake. Mock a real Motive server (server name
"Motive") and move hardcoded Drone reference constants into a new defaults.py
so scene semantics stay out of the wire layer. Drop the vendored NatNet SDK
README that should not live in-tree.

Co-authored-by: Cursor <cursoragent@cursor.com>
…defaults

Cover the MODELDEF/frame serializers, the unicast handshake protocol, and the
defaults/server catalog. A package-level test/conftest.py puts the extension
root on sys.path and registers the `unit` marker so `pytest test/` runs the
suite directly without per-file boilerplate.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ture

Add repo_path() and reexport_unit_tests() to tests/conftest.py so the thin
proxy files re-export co-located package tests without hardcoded
Path(__file__).parents[N] walks or per-file sys.path boilerplate; rewrite the
robot and sim proxies to use them. Register the `integration` marker and the
robot_autonomy_stack bring-up fixture (gated behind --run-integration) for the
new integration tier.

Co-authored-by: Cursor <cursoragent@cursor.com>
Introduce tests/integration/ as a new tier between unit and system: real
components wired together (robot autonomy container + a host-side component)
with no sim or GPU. Move the NatNet emulator <-> natnet_ros2 test here as the
first resident (marks: integration, natnet), driven by the shared
robot_autonomy_stack fixture, and remove the old tests/sim/motive_emulator
location.

Co-authored-by: Cursor <cursoragent@cursor.com>
Update AGENTS.md, tests/README.md, and the add-unit-tests / optitrack-development
skills to describe the four test tiers (unit, integration, system), the
repo_path/reexport_unit_tests proxy pattern, the --run-integration flag, and the
new tests/integration/natnet location.

Co-authored-by: Cursor <cursoragent@cursor.com>
NatNet emulator installation is baked into the isaac-sim image, bind-mounted for live edits, and enabled in Kit config.

Co-authored-by: Cursor <cursoragent@cursor.com>
Remap vision_pose_converter to the interface/mavros namespace, install
mavros_extras in the robot image, and add layered PX4_PARAM_PROFILE env
files so Isaac SITL can fuse NatNet external vision (EKF2_EV_CTRL, no GPS,
indoor mag disabled). Document the vision profile and provide an overrides
bundle for NatNet + vision sim bring-up.

Co-authored-by: Cursor <cursoragent@cursor.com>
PX4 with EKF2_GPS_CTRL=0 has valid local vision fusion but no global
position, so AUTO.LOITER preflight fails until an origin is set. Add
mavros_gp_origin_node to publish a one-shot set_gp_origin after MAVROS
connects, skipping when a real origin already exists. Launched alongside
vision_pose_converter when publish_to_mavros is enabled.

Co-authored-by: Cursor <cursoragent@cursor.com>
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