Skip to content

Krrish/coord pr#350

Open
krrishj18 wants to merge 78 commits intomainfrom
krrish/coord-pr
Open

Krrish/coord pr#350
krrishj18 wants to merge 78 commits intomainfrom
krrish/coord-pr

Conversation

@krrishj18
Copy link
Copy Markdown
Collaborator

@krrishj18 krrishj18 commented Apr 30, 2026

What does this pull request do?

  • Foxglove panels (gcs/foxglove_extensions/): robot-commands (per-robot task tabs with multi-feedback feed), waypoint-editor, polygon-editor. Auto-installed into Foxglove on container start via install.sh.
  • Action relay (gcs/ros_ws/src/action_relay/): bridges Foxglove JSON-on-String goals to per-robot action servers across DDS domains; cancel-aware with 10 s timeout fallback.
  • GCS visualizer (gcs/ros_ws/src/gcs_visualizer/): multi-robot markers in one 3D namespace, per-robot /gcs/<robot>/location republisher with map frame, save markers for waypoints/polygons, sim_ground TRIANGLE_LIST from the sim overhead camera.
  • Coordination layer (common/ros_packages/coordination/): gossip node + PeerProfile + configurable typed payloads (gossip_payloads.yaml).
  • Top-down sim camera (simulation/isaac-sim/utils/scene_prep.py): add_orthographic_camera + add_overhead_camera_publisher (publishes /sim/overhead/{image,spec});
  • Polygon-bounded random walk (robot/ros_ws/src/global/planners/random_walk/): point-in-polygon search bounds, auto-navigate to nearest inside point pre-flight.
  • Persisted GCS waypoint/polygon editor saves: gcs/saves/ mounted into the GCS container.

Which issue number does this address?

Video can be found here

foxglove_full_screen

Videos + photos in the updated docs

How did you implement it?

  • Two-context relay (relay_node.py): a single Python process spins up a ctx0 (GCS, domain 0) executor and one ctxN (per-robot, domain N) executor; reads JSON goal/cancel from /<robot>/tasks/<task> String topics, builds the typed action goal,
    forwards to the robot-domain action client, and re-publishes feedback/result as JSON. NUM_ROBOTS env spawns the right set of relays.
  • Foxglove panels are TS extensions packaged via install.sh, which copies each unpacked extension into
    ~/.foxglove-studio/extensions/<publisher>.<name>-<version>/ at container start (mounted read-only from
    gcs/foxglove_extensions/).
  • Multi-robot visualizer auto-discovers robots by scanning /<robot>/odometry_conversion/odometry topics; per-robot color from a fixed palette; world→map static TF published once on the GCS side.
  • Top-down map: USD orthographic camera at OVERHEAD_ALTITUDE_M over (0,0); OmniGraph ROS2CameraHelper publishes a JPEG to /sim/overhead/image and a Float32 coverage spec to /sim/overhead/spec. GCS side downsamples to a Marker.TRIANGLE_LIST grid (overhead_grid_per_m, capped at overhead_max_grid_resolution) so it stays cheap in Foxglove's 3D panel.
  • Random walk polygon bounds: ray-cast 2D PIP in random_walk_logic.cpp::point_in_search_bounds; nearest-inside-point pre-flight dispatched via the navigate action client.

Testing

How do you run the tests?

  • Foxglove panels — created waypoints and polygons of varying shapes, saved them, assigned to multiple drones, then cancelled / reassigned / restarted tasks repeatedly to confirm relay state stays in sync.
  • Top-down sim map — verified the textured ground renders correctly across 3 different Isaac Sim scenes.
  • Gossip payloads — confirmed GPS and goal-position payloads propagate between peers; verified both via Foxglove rendering and the peer_profile terminal viewer.
  • Custom payload extensibility — added rayfronts-style entries to gossip_payloads.yaml and a VDB map payload to confirm the gossip layer handles arbitrary user-declared types end-to-end.

What do the tests do?

Cover the GCS-side critical paths added by this PR: action relay (goal / feedback / result / cancel), polygon + waypoint editor + saves persistence, multi-robot visualizer, top-down sim map publisher, and the gossip payload pipeline.

What are the expected results of the tests?

  • Task tabs flip yellow while executing → green on success
  • Saved polygons / waypoints survive container restarts via the gcs/saves mount.
  • sim_ground renders without dropping frames in Foxglove 3D across all tested scenes.
  • Each robot's PeerProfile reaches every other robot with all declared payloads attached, regardless of payload type.

Reproducing tests

.env:
NUM_ROBOTS=4
ISAAC_SIM_SCRIPT_NAME="example_multi_drone_scene_import.py"

Bring up the stack:

 airstack up

The Foxglove window should auto-connect to ws://localhost:8765 and open the AirStack default layout from the CMU org.

Fallback: open the dynamically-generated layout manually

Use this if Foxglove doesn't auto-connect or you want to use the locally-rendered, NUM_ROBOTS-matched layout instead of the cloud one.

  1. In the Foxglove dashboard, click Layouts → Import from file....
  2. Navigate to the rendered layout file:
    - Inside the GCS container: /root/AirStack/gcs/foxglove_extensions/airstack_default.json
    - On the host: gcs/foxglove_extensions/airstack_default.json
  3. Back on the dashboard, click Open connection and enter:
    - ws://localhost:8765 if Foxglove is running inside the GCS container
    - ws://localhost:8766 if Foxglove is running on the host
  4. In the top-right corner, click the current layout name and select the imported layout from the dropdown.

Did you update the docs (and under what path)?

New pages:

  • docs/gcs/foxglove.md — GCS Foxglove visualization (multi-robot markers, payload republishing, sim ground)
  • docs/gcs/waypoints_and_geofences.md — click-to-place Waypoint and Polygon editor workflow + saves persistence
  • docs/simulation/isaac_sim/spawning_drones.md — multi-drone scene authoring with gps_utils.set_gps_origins
  • docs/simulation/isaac_sim/overhead_camera.md — 2D world map in Foxglove (real-world satellite tiles + simulated overhead
    camera)

Updated:

  • docs/robot/autonomy/coordination/index.md — gossip protocol overview (already wired in nav)
  • docs/robot/autonomy/coordination/payloads.md — how to add a custom payload + Foxglove handler
  • mkdocs.yml — nav entries for the four new pages, under Ground Control Station → Foxglove and Simulation → Isaac Sim

Skills (.agents/skills/):

  • attach-gossip-payload/ — agent workflow for adding a payload end-to-end
  • visualize-in-foxglove/ — agent workflow for adding a topic to the GCS visualizer

krrishj18 and others added 30 commits April 8, 2026 12:06
…ion/raw/fix(not my topic, it was already publishing to that)
…d vizualizes it,currently works for rayfronts
…added non-world prims to save in flattened manner
@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 2, 2026

Test Metrics — c46c4a4cc1dd7dc9a6aaf922b38d89884ddd0053

Pass rates

Test Pass Fail Skip Rate (baseline → current)
isaac-sim.extensions.PegasusSimulator.extensions.pegasus.simulator.pegasus.simulator.tests.test_hello_world 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.replicator.pose_generation.pose_tests.test_utils 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.benchmark.services.test_no_rendering 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_determinism 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_root 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_delete_in_contact 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_rendering 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_save_stage 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_time_stepping 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.cortex.framework.cortex_bringup_test 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.ros1.bridge.test_carter_lidar 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_carter_camera_multi_robot_nav 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_people_sim 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.sensors.physics.contact_sensor_test 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_lidar_test 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_radar_test 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_createstage_config 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extension_count 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_external 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extra_args 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fabric_frame_delay 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fetch_results 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_frame_delay 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ogn 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ovd 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_syntheticdata 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_unsaved_on_exit 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.omni.isaac.dynamic_control.test_zero_step 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.omni.replicator.agent.test_scripting 0 → 0 0 → 1 0 → 0 — → 0%
isaac-sim.standalone_examples.testing.omni.syntheticdata.test_basic 0 → 0 0 → 1 0 → 0 — → 0%
ros_packages.gui.rviz.rviz_behavior_tree_panel.scripts.test_behavior_tree_publisher 0 → 0 0 → 1 0 → 0 — → 0%
ros_packages.logging.bag_recorder_pid.test.test_copyright 0 → 0 0 → 1 0 → 0 — → 0%
ros_packages.logging.bag_recorder_pid.test.test_flake8 0 → 0 0 → 1 0 → 0 — → 0%
ros_packages.logging.bag_recorder_pid.test.test_pep257 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.local.planners.takeoff_landing_planner.test.scripts.test_takeoff_landing_planner 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Baseline.DPVO.Pangolin.components.pango_python.pybind11.tests 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_circular_buffer 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_loadable 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_macvo 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_modules 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_sequence 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_tartanvo 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_frontend 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_matching 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_performance_macvo 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_stereo_depth 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.ros2tak_tools.test.test_copyright 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.ros2tak_tools.test.test_flake8 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.ros2tak_tools.test.test_pep257 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.sensors.camera_param_server.test.test_copyright 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.sensors.camera_param_server.test.test_flake8 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.sensors.camera_param_server.test.test_pep257 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.sensors.gimbal_stabilizer.test.test_copyright 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.sensors.gimbal_stabilizer.test.test_flake8 0 → 0 0 → 1 0 → 0 — → 0%
ros_ws.src.sensors.gimbal_stabilizer.test.test_pep257 0 → 0 0 → 1 0 → 0 — → 0%

Metrics

Test Metric Baseline Current Change
ros_packages.gui.rviz.rviz_behavior_tree_panel.scripts.test_behavior_tree_publisher duration_s 0s new
ros_packages.logging.bag_recorder_pid.test.test_copyright duration_s 0s new
ros_packages.logging.bag_recorder_pid.test.test_flake8 duration_s 0s new
ros_packages.logging.bag_recorder_pid.test.test_pep257 duration_s 0s new
ros_ws.src.ros2tak_tools.test.test_copyright duration_s 0s new
ros_ws.src.ros2tak_tools.test.test_flake8 duration_s 0s new
ros_ws.src.ros2tak_tools.test.test_pep257 duration_s 0s new
ros_ws.src.local.planners.takeoff_landing_planner.test.scripts.test_takeoff_landing_planner duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Baseline.DPVO.Pangolin.components.pango_python.pybind11.tests duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_circular_buffer duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_loadable duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_macvo duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_modules duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_sequence duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_tartanvo duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_frontend duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_matching duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_performance_macvo duration_s 0s new
ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_stereo_depth duration_s 0s new
ros_ws.src.sensors.camera_param_server.test.test_copyright duration_s 0s new
ros_ws.src.sensors.camera_param_server.test.test_flake8 duration_s 0s new
ros_ws.src.sensors.camera_param_server.test.test_pep257 duration_s 0s new
ros_ws.src.sensors.gimbal_stabilizer.test.test_copyright duration_s 0s new
ros_ws.src.sensors.gimbal_stabilizer.test.test_flake8 duration_s 0s new
ros_ws.src.sensors.gimbal_stabilizer.test.test_pep257 duration_s 0s new
isaac-sim.extensions.PegasusSimulator.extensions.pegasus.simulator.pegasus.simulator.tests.test_hello_world duration_s 0s new
isaac-sim.standalone_examples.replicator.pose_generation.pose_tests.test_utils duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.benchmark.services.test_no_rendering duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_determinism duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_root duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_delete_in_contact duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_rendering duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_save_stage duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.core.api.test_time_stepping duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.cortex.framework.cortex_bringup_test duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.ros1.bridge.test_carter_lidar duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_carter_camera_multi_robot_nav duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_people_sim duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.sensors.physics.contact_sensor_test duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_lidar_test duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_radar_test duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_createstage_config duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extension_count duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_external duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extra_args duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fabric_frame_delay duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fetch_results duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_frame_delay duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ogn duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ovd duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_syntheticdata duration_s 0s new
isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_unsaved_on_exit duration_s 0s new
isaac-sim.standalone_examples.testing.omni.isaac.dynamic_control.test_zero_step duration_s 0s new
isaac-sim.standalone_examples.testing.omni.replicator.agent.test_scripting duration_s 0s new
isaac-sim.standalone_examples.testing.omni.syntheticdata.test_basic duration_s 0s new

test_takeoff_hover_land

Pass rates

Test Pass Fail Skip Rate (baseline → current)
test_hover[msairsim-rob#1-v0.5] 1 → 0 0 → 0 0 → 0 100% → —
test_hover[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_hover[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_landing[msairsim-rob#1-v0.5] 1 → 0 0 → 0 0 → 0 100% → —
test_landing[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_landing[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_px4_ready[msairsim-rob#1-v0.5] 1 → 0 0 → 0 0 → 0 100% → —
test_px4_ready[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_px4_ready[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_takeoff[msairsim-rob#1-v0.5] 1 → 0 0 → 0 0 → 0 100% → —
test_takeoff[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_takeoff[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —

Metrics

Test Metric Baseline Current Change
test_px4_ready[msairsim-rob#1-v0.5] duration_s 215.2s removed
test_px4_ready[msairsim-rob#1-v0.5] airstack_up_duration_s 3.22s removed
test_px4_ready[msairsim-rob#1-v0.5] airstack_down_duration_s 11.02s removed
test_px4_ready[msairsim-rob#1-v0.5] robot.ready_duration_sys_s 211.3s removed
test_takeoff[msairsim-rob#1-v0.5] duration_s 24.1s removed
test_takeoff[msairsim-rob#1-v0.5] robot.altitude_error_m -0.089m removed
test_takeoff[msairsim-rob#1-v0.5] robot.overshoot_m 0m removed
test_takeoff[msairsim-rob#1-v0.5] robot.takeoff_duration_sim_s 18.64s removed
test_takeoff[msairsim-rob#1-v0.5] robot.velocity_rmse_m_sim_s 0.217m/s removed
test_takeoff[msairsim-rob#1-v0.5] robot.odometry_error_mean_m 0.579m removed
test_takeoff[msairsim-rob#1-v0.5] robot.odometry_error_max_m 0.669m removed
test_takeoff[msairsim-rob#1-v0.5] robot.odometry_altitude_bias_m 0.575m removed
test_hover[msairsim-rob#1-v0.5] duration_s 10.06s removed
test_hover[msairsim-rob#1-v0.5] robot.hover_altitude_mean_error_m 0.046m removed
test_hover[msairsim-rob#1-v0.5] robot.hover_position_stddev_m 0.023m removed
test_hover[msairsim-rob#1-v0.5] robot.odometry_error_mean_m 0.674m removed
test_hover[msairsim-rob#1-v0.5] robot.odometry_error_max_m 0.696m removed
test_hover[msairsim-rob#1-v0.5] robot.odometry_altitude_bias_m 0.674m removed
test_landing[msairsim-rob#1-v0.5] duration_s 26.44s removed
test_landing[msairsim-rob#1-v0.5] robot.final_altitude_m -0.097m removed
test_landing[msairsim-rob#1-v0.5] robot.land_duration_sim_s 14.8s removed
test_landing[msairsim-rob#1-v0.5] robot.velocity_rmse_m_sim_s 0.226m/s removed
test_landing[msairsim-rob#1-v0.5] robot.odometry_error_mean_m 0.707m removed
test_landing[msairsim-rob#1-v0.5] robot.odometry_error_max_m 0.803m removed
test_landing[msairsim-rob#1-v0.5] robot.odometry_altitude_bias_m 0.706m removed
test_px4_ready[msairsim-rob#1-v1.0] duration_s 0.001s removed
test_takeoff[msairsim-rob#1-v1.0] duration_s 16.82s removed
test_takeoff[msairsim-rob#1-v1.0] robot.altitude_error_m -0.048m removed
test_takeoff[msairsim-rob#1-v1.0] robot.overshoot_m 0m removed
test_takeoff[msairsim-rob#1-v1.0] robot.takeoff_duration_sim_s 10.22s removed
test_takeoff[msairsim-rob#1-v1.0] robot.velocity_rmse_m_sim_s 0.393m/s removed
test_takeoff[msairsim-rob#1-v1.0] robot.odometry_error_mean_m 0.538m removed
test_takeoff[msairsim-rob#1-v1.0] robot.odometry_error_max_m 0.684m removed
test_takeoff[msairsim-rob#1-v1.0] robot.odometry_altitude_bias_m 0.538m removed
test_hover[msairsim-rob#1-v1.0] duration_s 10.07s removed
test_hover[msairsim-rob#1-v1.0] robot.hover_altitude_mean_error_m 0.127m removed
test_hover[msairsim-rob#1-v1.0] robot.hover_position_stddev_m 0.06m removed
test_hover[msairsim-rob#1-v1.0] robot.odometry_error_mean_m 0.697m removed
test_hover[msairsim-rob#1-v1.0] robot.odometry_error_max_m 0.734m removed
test_hover[msairsim-rob#1-v1.0] robot.odometry_altitude_bias_m 0.696m removed
test_landing[msairsim-rob#1-v1.0] duration_s 17.34s removed
test_landing[msairsim-rob#1-v1.0] robot.final_altitude_m -0.149m removed
test_landing[msairsim-rob#1-v1.0] robot.land_duration_sim_s 7.2s removed
test_landing[msairsim-rob#1-v1.0] robot.velocity_rmse_m_sim_s 0.436m/s removed
test_landing[msairsim-rob#1-v1.0] robot.odometry_error_mean_m 0.679m removed
test_landing[msairsim-rob#1-v1.0] robot.odometry_error_max_m 0.935m removed
test_landing[msairsim-rob#1-v1.0] robot.odometry_altitude_bias_m 0.679m removed
test_px4_ready[msairsim-rob#1-v2.0] duration_s 0.001s removed
test_takeoff[msairsim-rob#1-v2.0] duration_s 15.89s removed
test_takeoff[msairsim-rob#1-v2.0] robot.altitude_error_m -0.042m removed
test_takeoff[msairsim-rob#1-v2.0] robot.overshoot_m 0m removed
test_takeoff[msairsim-rob#1-v2.0] robot.takeoff_duration_sim_s 10.36s removed
test_takeoff[msairsim-rob#1-v2.0] robot.velocity_rmse_m_sim_s 1.086m/s removed
test_takeoff[msairsim-rob#1-v2.0] robot.odometry_error_mean_m 0.541m removed
test_takeoff[msairsim-rob#1-v2.0] robot.odometry_error_max_m 0.684m removed
test_takeoff[msairsim-rob#1-v2.0] robot.odometry_altitude_bias_m 0.541m removed
test_hover[msairsim-rob#1-v2.0] duration_s 10.07s removed
test_hover[msairsim-rob#1-v2.0] robot.hover_altitude_mean_error_m 0.165m removed
test_hover[msairsim-rob#1-v2.0] robot.hover_position_stddev_m 0.083m removed
test_hover[msairsim-rob#1-v2.0] robot.odometry_error_mean_m 0.712m removed
test_hover[msairsim-rob#1-v2.0] robot.odometry_error_max_m 0.748m removed
test_hover[msairsim-rob#1-v2.0] robot.odometry_altitude_bias_m 0.712m removed
test_landing[msairsim-rob#1-v2.0] duration_s 26.67s removed
test_landing[msairsim-rob#1-v2.0] robot.final_altitude_m -0.143m removed
test_landing[msairsim-rob#1-v2.0] robot.land_duration_sim_s 6.678s removed
test_landing[msairsim-rob#1-v2.0] robot.velocity_rmse_m_sim_s 0.944m/s removed
test_landing[msairsim-rob#1-v2.0] robot.odometry_error_mean_m 0.684m removed
test_landing[msairsim-rob#1-v2.0] robot.odometry_error_max_m 0.963m removed
test_landing[msairsim-rob#1-v2.0] robot.odometry_altitude_bias_m 0.684m removed

@castacks castacks deleted a comment from github-actions Bot May 2, 2026
@castacks castacks deleted a comment from github-actions Bot May 2, 2026
@andrewjong
Copy link
Copy Markdown
Member

/pytest -m "build_docker or build_packages or liveliness or takeoff_hover_land"

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 2, 2026

Running pytest tests/ -m 'build_docker or build_packages or liveliness or takeoff_hover_land'view run. Status will appear as a check on this PR.

Note: build_packages is automatically prepended whenever any marks are specified, to ensure code is built before launch tests run.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 2, 2026

Test Metrics — c46c4a4cc1dd7dc9a6aaf922b38d89884ddd0053

test_build_docker

Pass rates

Test Pass Fail Skip Rate (baseline → current)
test_build_gcs 0 → 1 0 → 0 0 → 0 — → 100%
test_build_isaac_sim 0 → 1 0 → 0 0 → 0 — → 100%
test_build_ms_airsim 0 → 1 0 → 0 0 → 0 — → 100%
test_build_robot_desktop 0 → 1 0 → 0 0 → 0 — → 100%

Metrics

Test Metric Baseline Current Change
test_build_robot_desktop duration_s 75.78s new
test_build_gcs duration_s 38.24s new
test_build_isaac_sim duration_s 147s new
test_build_ms_airsim duration_s 31.35s new

test_build_packages

Pass rates

Test Pass Fail Skip Rate (baseline → current)
test_colcon_build_gcs 0 → 1 0 → 0 0 → 0 — → 100%
test_colcon_build_ms_airsim 0 → 1 0 → 0 0 → 0 — → 100%
test_colcon_build_robot 0 → 1 0 → 0 0 → 0 — → 100%

Metrics

Test Metric Baseline Current Change
test_colcon_build_robot duration_s 170s new
test_colcon_build_gcs duration_s 57.39s new
test_colcon_build_ms_airsim duration_s 12.49s new

test_liveliness

Pass rates

Test Pass Fail Skip Rate (baseline → current)
test_compute_usage[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_compute_usage[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_compute_usage[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_compute_usage[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_gcs_container_running[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_gcs_container_running[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_gcs_container_running[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_gcs_container_running[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_realtime_factor[isaacsim-rob#1] 0 → 0 0 → 1 0 → 0 — → 0%
test_realtime_factor[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_realtime_factor[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_realtime_factor[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_robot_containers_running[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_robot_containers_running[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_robot_containers_running[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_robot_containers_running[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sentinel_nodes_present[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sentinel_nodes_present[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sentinel_nodes_present[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sentinel_nodes_present[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_container_running[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_container_running[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_container_running[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_container_running[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_publishing[isaacsim-rob#1] 0 → 0 0 → 1 0 → 0 — → 0%
test_sim_publishing[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_publishing[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_publishing[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_ready_time[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_ready_time[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_ready_time[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_sim_ready_time[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_stable[isaacsim-rob#1] 0 → 0 0 → 0 0 → 1 — → —
test_stable[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_stable[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_stable[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_tmux_panes_have_expected_processes[isaacsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_tmux_panes_have_expected_processes[isaacsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%
test_tmux_panes_have_expected_processes[msairsim-rob#1] 0 → 1 0 → 0 0 → 0 — → 100%
test_tmux_panes_have_expected_processes[msairsim-rob#3] 0 → 1 0 → 0 0 → 0 — → 100%

Metrics

Test Metric Baseline Current Change
test_robot_containers_running[msairsim-rob#1] duration_s 2.004s new
test_robot_containers_running[msairsim-rob#1] airstack_up_duration_s 1.59s new
test_robot_containers_running[msairsim-rob#1] airstack_down_duration_s 10.92s new
test_sim_container_running[msairsim-rob#1] duration_s 0.017s new
test_gcs_container_running[msairsim-rob#1] duration_s 0.045s new
test_sim_ready_time[msairsim-rob#1] duration_s 8.117s new
test_sim_ready_time[msairsim-rob#1] sim_ready_duration_s 9.82s new
test_tmux_panes_have_expected_processes[msairsim-rob#1] duration_s 0.194s new
test_sim_publishing[msairsim-rob#1] duration_s 10.44s new
test_compute_usage[msairsim-rob#1] duration_s 2.691s new
test_realtime_factor[msairsim-rob#1] duration_s 23.02s new
test_realtime_factor[msairsim-rob#1] sim.realtime_factor 0.995 new
test_sentinel_nodes_present[msairsim-rob#1] duration_s 1.445s new
test_stable[msairsim-rob#1] duration_s 288.4s new
test_robot_containers_running[msairsim-rob#3] duration_s 14.18s new
test_robot_containers_running[msairsim-rob#3] airstack_up_duration_s 2.66s new
test_robot_containers_running[msairsim-rob#3] airstack_down_duration_s 11.3s new
test_sim_container_running[msairsim-rob#3] duration_s 0.03s new
test_gcs_container_running[msairsim-rob#3] duration_s 0.094s new
test_sim_ready_time[msairsim-rob#3] duration_s 4.573s new
test_sim_ready_time[msairsim-rob#3] sim_ready_duration_s 7.5s new
test_tmux_panes_have_expected_processes[msairsim-rob#3] duration_s 0.429s new
test_sim_publishing[msairsim-rob#3] duration_s 10.55s new
test_compute_usage[msairsim-rob#3] duration_s 2.687s new
test_realtime_factor[msairsim-rob#3] duration_s 22.44s new
test_realtime_factor[msairsim-rob#3] sim.realtime_factor 1.001 new
test_sentinel_nodes_present[msairsim-rob#3] duration_s 11.53s new
test_stable[msairsim-rob#3] duration_s 311.8s new
test_robot_containers_running[isaacsim-rob#1] duration_s 13.53s new
test_robot_containers_running[isaacsim-rob#1] airstack_up_duration_s 1.77s new
test_robot_containers_running[isaacsim-rob#1] airstack_down_duration_s 12.32s new
test_sim_container_running[isaacsim-rob#1] duration_s 0.018s new
test_gcs_container_running[isaacsim-rob#1] duration_s 0.045s new
test_sim_ready_time[isaacsim-rob#1] duration_s 47.8s new
test_sim_ready_time[isaacsim-rob#1] sim_ready_duration_s 49.68s new
test_tmux_panes_have_expected_processes[isaacsim-rob#1] duration_s 0.195s new
test_sim_publishing[isaacsim-rob#1] duration_s 10.68s new
test_compute_usage[isaacsim-rob#1] duration_s 2.629s new
test_realtime_factor[isaacsim-rob#1] duration_s 5.509s new
test_sentinel_nodes_present[isaacsim-rob#1] duration_s 7.054s new
test_stable[isaacsim-rob#1] duration_s 0s new
test_robot_containers_running[isaacsim-rob#3] duration_s 15.57s new
test_robot_containers_running[isaacsim-rob#3] airstack_up_duration_s 2.67s new
test_robot_containers_running[isaacsim-rob#3] airstack_down_duration_s 12.52s new
test_sim_container_running[isaacsim-rob#3] duration_s 0.029s new
test_gcs_container_running[isaacsim-rob#3] duration_s 0.08s new
test_sim_ready_time[isaacsim-rob#3] duration_s 68.67s new
test_sim_ready_time[isaacsim-rob#3] sim_ready_duration_s 71.58s new
test_tmux_panes_have_expected_processes[isaacsim-rob#3] duration_s 0.385s new
test_sim_publishing[isaacsim-rob#3] duration_s 10.66s new
test_compute_usage[isaacsim-rob#3] duration_s 2.671s new
test_realtime_factor[isaacsim-rob#3] duration_s 22.64s new
test_realtime_factor[isaacsim-rob#3] sim.realtime_factor 0.746 new
test_sentinel_nodes_present[isaacsim-rob#3] duration_s 11.69s new
test_stable[isaacsim-rob#3] duration_s 324.5s new

Sim publishing rates (baseline n=None, current n=1; baseline → current, per-topic)

Test Topic mean start_mean end_mean min max
test_stable[msairsim-rob#1] clock 46.24Hz 45.49Hz (t=10-60s) 46.99Hz (t=70-120s) 31.2Hz 56.8Hz
test_stable[msairsim-rob#1] robot.sensors.front_stereo.left.image_rect 4.17Hz 3.56Hz (t=10-60s) 4.79Hz (t=70-120s) 2.852Hz 9.372Hz
test_stable[msairsim-rob#1] robot.sensors.front_stereo.right.image_rect 3.96Hz 3.65Hz (t=10-60s) 4.28Hz (t=70-120s) 3.344Hz 5.354Hz
test_stable[msairsim-rob#1] robot.sensors.front_stereo.left.depth_ground_truth 3.34Hz 3.25Hz (t=10-60s) 3.43Hz (t=70-120s) 2.308Hz 3.858Hz
test_stable[msairsim-rob#1] robot.sensors.front_stereo.right.depth_ground_truth 4.8Hz 3.85Hz (t=10-60s) 5.75Hz (t=70-120s) 2.882Hz 10.26Hz
test_stable[msairsim-rob#3] clock 48.59Hz 41.76Hz (t=10-60s) 55.41Hz (t=70-120s) 33.47Hz 73.88Hz
test_stable[msairsim-rob#3] robot.sensors.front_stereo.left.image_rect 3.28Hz 3.43Hz (t=10-60s) 3.14Hz (t=70-120s) 2.244Hz 7.447Hz
test_stable[msairsim-rob#3] robot.sensors.front_stereo.right.image_rect 3.66Hz 3.79Hz (t=10-60s) 3.52Hz (t=70-120s) 2.315Hz 8.6Hz
test_stable[msairsim-rob#3] robot.sensors.front_stereo.left.depth_ground_truth 2.87Hz 2.88Hz (t=10-60s) 2.85Hz (t=70-120s) 1.915Hz 3.137Hz
test_stable[msairsim-rob#3] robot.sensors.front_stereo.right.depth_ground_truth 3.35Hz 3.18Hz (t=10-60s) 3.51Hz (t=70-120s) 1.873Hz 8.698Hz
test_stable[isaacsim-rob#3] clock 23.36Hz 23.95Hz (t=10-60s) 22.78Hz (t=70-120s) 21.66Hz 25.18Hz
test_stable[isaacsim-rob#3] robot.sensors.front_stereo.left.image_rect 23.11Hz 23.43Hz (t=10-60s) 22.8Hz (t=70-120s) 17.49Hz 25.78Hz
test_stable[isaacsim-rob#3] robot.sensors.front_stereo.right.image_rect 22.24Hz 22.94Hz (t=10-60s) 21.54Hz (t=70-120s) 16.43Hz 25.36Hz
test_stable[isaacsim-rob#3] robot.sensors.front_stereo.left.depth_ground_truth 18.48Hz 18.68Hz (t=10-60s) 18.28Hz (t=70-120s) 10.32Hz 25.17Hz
test_stable[isaacsim-rob#3] robot.sensors.front_stereo.right.depth_ground_truth 20.61Hz 20.25Hz (t=10-60s) 20.97Hz (t=70-120s) 15.1Hz 25.24Hz

Compute usage (baseline n=None, current n=1; baseline → current, per-container and global)

Test Entity Metric mean start_mean end_mean min max
test_stable[msairsim-rob#1] ms-airsim cpu_pct 309.7% 308.5% (t=10-60s) 310.9% (t=70-120s) 302.8% 315.8%
test_stable[msairsim-rob#1] ms-airsim mem_mb 668.1MB 666.3MB (t=10-60s) 669.9MB (t=70-120s) 663.4MB 671.7MB
test_stable[msairsim-rob#1] ms-airsim disk_io_mb 517.5MB 490.5MB (t=10-60s) 544.5MB (t=70-120s) 468MB 567MB
test_stable[msairsim-rob#1] ms-airsim net_io_mb 3771MB 2456MB (t=10-60s) 5086MB (t=70-120s) 1390MB 6193MB
test_stable[msairsim-rob#1] host cpu_pct 14.16% 13.88% (t=10-60s) 14.43% (t=70-120s) 12.3% 16.6%
test_stable[msairsim-rob#1] host mem_mb 3831MB 3810MB (t=10-60s) 3852MB (t=70-120s) 3774MB 3866MB
test_stable[msairsim-rob#1] host gpu_pct 66% 65.17% (t=10-60s) 66.83% (t=70-120s) 58% 71%
test_stable[msairsim-rob#1] host vram_mb 727.8MB 728MB (t=10-60s) 727.5MB (t=70-120s) 727MB 728MB
test_stable[msairsim-rob#1] host gpu_temp_c 38°C 37°C (t=10-60s) 39°C (t=70-120s) 35°C 39°C
test_stable[msairsim-rob#1] host gpu_power_w 99.44W 98.6W (t=10-60s) 100.3W (t=70-120s) 97.4W 102W
test_stable[msairsim-rob#1] airstack-robot-desktop cpu_pct 198.9% 198.8% (t=10-60s) 199% (t=70-120s) 167.8% 229.8%
test_stable[msairsim-rob#1] airstack-robot-desktop mem_mb 867.6MB 862MB (t=10-60s) 873.1MB (t=70-120s) 854.6MB 881.9MB
test_stable[msairsim-rob#1] airstack-robot-desktop disk_io_mb 303.1MB 302.9MB (t=10-60s) 303.2MB (t=70-120s) 302.5MB 303.3MB
test_stable[msairsim-rob#1] airstack-robot-desktop net_io_mb 3694MB 2353MB (t=10-60s) 5034MB (t=70-120s) 1266MB 6169MB
test_stable[msairsim-rob#1] airstack-gcs cpu_pct 51.15% 46.78% (t=10-60s) 55.53% (t=70-120s) 13.35% 94.06%
test_stable[msairsim-rob#1] airstack-gcs mem_mb 422.4MB 421.8MB (t=10-60s) 423MB (t=70-120s) 420.5MB 423.6MB
test_stable[msairsim-rob#1] airstack-gcs disk_io_mb 167.1MB 167.1MB (t=10-60s) 167.2MB (t=70-120s) 167MB 167.3MB
test_stable[msairsim-rob#1] airstack-gcs net_io_mb 93.64MB 58MB (t=10-60s) 129.3MB (t=70-120s) 30.1MB 158.5MB
test_stable[msairsim-rob#3] ms-airsim cpu_pct 512.1% 513.8% (t=10-60s) 510.3% (t=70-120s) 503.3% 524.2%
test_stable[msairsim-rob#3] ms-airsim mem_mb 740.4MB 735MB (t=10-60s) 745.7MB (t=70-120s) 732.4MB 749.2MB
test_stable[msairsim-rob#3] ms-airsim disk_io_mb 243.7MB 156.7MB (t=10-60s) 330.7MB (t=70-120s) 84MB 403MB
test_stable[msairsim-rob#3] ms-airsim net_io_mb 1.004e+04MB 6456MB (t=10-60s) 1.362e+04MB (t=70-120s) 3449MB 1.658e+04MB
test_stable[msairsim-rob#3] host cpu_pct 33% 32.73% (t=10-60s) 33.27% (t=70-120s) 28.6% 36.1%
test_stable[msairsim-rob#3] host mem_mb 5566MB 5548MB (t=10-60s) 5583MB (t=70-120s) 5501MB 5603MB
test_stable[msairsim-rob#3] host gpu_pct 53% 53.83% (t=10-60s) 52.17% (t=70-120s) 45% 59%
test_stable[msairsim-rob#3] host vram_mb 847MB 847MB (t=10-60s) 847MB (t=70-120s) 847MB 847MB
test_stable[msairsim-rob#3] host gpu_temp_c 36°C 36°C (t=10-60s) 36°C (t=70-120s) 36°C 36°C
test_stable[msairsim-rob#3] host gpu_power_w 88.11W 88.7W (t=10-60s) 87.52W (t=70-120s) 85.89W 90.59W
test_stable[msairsim-rob#3] airstack-robot-desktop cpu_pct 190.2% 192.5% (t=10-60s) 188% (t=70-120s) 163.9% 222.4%
test_stable[msairsim-rob#3] airstack-robot-desktop mem_mb 683.3MB 679.4MB (t=10-60s) 687.3MB (t=70-120s) 670.2MB 701.6MB
test_stable[msairsim-rob#3] airstack-robot-desktop disk_io_mb 14.71MB 14.45MB (t=10-60s) 14.96MB (t=70-120s) 13.8MB 16.6MB
test_stable[msairsim-rob#3] airstack-robot-desktop net_io_mb 3444MB 2225MB (t=10-60s) 4662MB (t=70-120s) 1132MB 5833MB
test_stable[msairsim-rob#3] airstack-gcs cpu_pct 145.3% 151% (t=10-60s) 139.6% (t=70-120s) 104% 198.8%
test_stable[msairsim-rob#3] airstack-gcs mem_mb 419.7MB 415.9MB (t=10-60s) 423.4MB (t=70-120s) 415.2MB 440.3MB
test_stable[msairsim-rob#3] airstack-gcs disk_io_mb 8.73MB 8.65MB (t=10-60s) 8.8MB (t=70-120s) 8.594MB 8.864MB
test_stable[msairsim-rob#3] airstack-gcs net_io_mb 311.3MB 200.4MB (t=10-60s) 422.2MB (t=70-120s) 112MB 516MB
test_stable[isaacsim-rob#3] isaac-sim cpu_pct 627.3% 627.3% (t=10-60s) 627.3% (t=70-120s) 594.2% 688.9%
test_stable[isaacsim-rob#3] isaac-sim mem_mb 1.193e+04MB 1.192e+04MB (t=10-60s) 1.193e+04MB (t=70-120s) 1.192e+04MB 1.194e+04MB
test_stable[isaacsim-rob#3] isaac-sim disk_io_mb 513.3MB 465.1MB (t=10-60s) 561.6MB (t=70-120s) 425.1MB 601.1MB
test_stable[isaacsim-rob#3] isaac-sim net_io_mb 4.381e+04MB 2.828e+04MB (t=10-60s) 5.934e+04MB (t=70-120s) 1.506e+04MB 7.228e+04MB
test_stable[isaacsim-rob#3] host cpu_pct 31.88% 31.9% (t=10-60s) 31.85% (t=70-120s) 28.3% 37%
test_stable[isaacsim-rob#3] host mem_mb 1.836e+04MB 1.835e+04MB (t=10-60s) 1.836e+04MB (t=70-120s) 1.83e+04MB 1.841e+04MB
test_stable[isaacsim-rob#3] host gpu_pct 29.17% 30.33% (t=10-60s) 28% (t=70-120s) 25% 32%
test_stable[isaacsim-rob#3] host vram_mb 3560MB 3560MB (t=10-60s) 3560MB (t=70-120s) 3560MB 3560MB
test_stable[isaacsim-rob#3] host gpu_temp_c 35.58°C 35.33°C (t=10-60s) 35.83°C (t=70-120s) 35°C 36°C
test_stable[isaacsim-rob#3] host gpu_power_w 85.52W 85.2W (t=10-60s) 85.83W (t=70-120s) 84.01W 88.76W
test_stable[isaacsim-rob#3] airstack-robot-desktop cpu_pct 173.5% 171.9% (t=10-60s) 175% (t=70-120s) 116% 211.5%
test_stable[isaacsim-rob#3] airstack-robot-desktop mem_mb 686.8MB 683.3MB (t=10-60s) 690.3MB (t=70-120s) 673.3MB 703MB
test_stable[isaacsim-rob#3] airstack-robot-desktop disk_io_mb 18.18MB 18.05MB (t=10-60s) 18.3MB (t=70-120s) 14.7MB 23MB
test_stable[isaacsim-rob#3] airstack-robot-desktop net_io_mb 1.471e+04MB 9504MB (t=10-60s) 1.991e+04MB (t=70-120s) 5063MB 2.427e+04MB
test_stable[isaacsim-rob#3] airstack-gcs cpu_pct 88.22% 88.97% (t=10-60s) 87.47% (t=70-120s) 77.51% 108.6%
test_stable[isaacsim-rob#3] airstack-gcs mem_mb 416.2MB 416.1MB (t=10-60s) 416.3MB (t=70-120s) 415.9MB 416.7MB
test_stable[isaacsim-rob#3] airstack-gcs disk_io_mb 10.07MB 10MB (t=10-60s) 10.15MB (t=70-120s) 9.93MB 10.2MB
test_stable[isaacsim-rob#3] airstack-gcs net_io_mb 372.6MB 267MB (t=10-60s) 478.2MB (t=70-120s) 180.1MB 566MB

test_takeoff_hover_land

Pass rates

Test Pass Fail Skip Rate (baseline → current)
test_hover[isaacsim-rob#1-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_hover[isaacsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_hover[msairsim-rob#1-v0.5] 1 → 1 0 → 0 0 → 0 100% → 100%
test_hover[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_hover[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_hover[msairsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_landing[isaacsim-rob#1-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_landing[isaacsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_landing[msairsim-rob#1-v0.5] 1 → 1 0 → 0 0 → 0 100% → 100%
test_landing[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_landing[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_landing[msairsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_px4_ready[isaacsim-rob#1-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_px4_ready[isaacsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_px4_ready[msairsim-rob#1-v0.5] 1 → 1 0 → 0 0 → 0 100% → 100%
test_px4_ready[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_px4_ready[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_px4_ready[msairsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_takeoff[isaacsim-rob#1-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_takeoff[isaacsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%
test_takeoff[msairsim-rob#1-v0.5] 1 → 1 0 → 0 0 → 0 100% → 100%
test_takeoff[msairsim-rob#1-v1.0] 1 → 0 0 → 0 0 → 0 100% → —
test_takeoff[msairsim-rob#1-v2.0] 1 → 0 0 → 0 0 → 0 100% → —
test_takeoff[msairsim-rob#3-v0.5] 0 → 1 0 → 0 0 → 0 — → 100%

Metrics

Test Metric Baseline Current Change
test_px4_ready[isaacsim-rob#1-v0.5] duration_s 74.69s new
test_px4_ready[isaacsim-rob#1-v0.5] airstack_up_duration_s 1.89s new
test_px4_ready[isaacsim-rob#1-v0.5] airstack_down_duration_s 12.41s new
test_px4_ready[isaacsim-rob#1-v0.5] robot.ready_duration_sys_s 72.3s new
test_takeoff[isaacsim-rob#1-v0.5] duration_s 16.86s new
test_takeoff[isaacsim-rob#1-v0.5] robot.altitude_error_m -0.113m new
test_takeoff[isaacsim-rob#1-v0.5] robot.overshoot_m 0m new
test_takeoff[isaacsim-rob#1-v0.5] robot.takeoff_duration_sim_s 17.88s new
test_takeoff[isaacsim-rob#1-v0.5] robot.velocity_rmse_m_sim_s 0.111m/s new
test_hover[isaacsim-rob#1-v0.5] duration_s 10.06s new
test_hover[isaacsim-rob#1-v0.5] robot.hover_altitude_mean_error_m 0.011m new
test_hover[isaacsim-rob#1-v0.5] robot.hover_position_stddev_m 0.052m new
test_landing[isaacsim-rob#1-v0.5] duration_s 18.49s new
test_landing[isaacsim-rob#1-v0.5] robot.final_altitude_m -0.002m new
test_landing[isaacsim-rob#1-v0.5] robot.land_duration_sim_s 14.79s new
test_landing[isaacsim-rob#1-v0.5] robot.velocity_rmse_m_sim_s 0.1m/s new
test_px4_ready[isaacsim-rob#3-v0.5] duration_s 106.1s new
test_px4_ready[isaacsim-rob#3-v0.5] airstack_up_duration_s 2.64s new
test_px4_ready[isaacsim-rob#3-v0.5] airstack_down_duration_s 12.53s new
test_px4_ready[isaacsim-rob#3-v0.5] robot.ready_duration_sys_s 80.28s new
test_takeoff[isaacsim-rob#3-v0.5] duration_s 32.85s new
test_takeoff[isaacsim-rob#3-v0.5] robot.altitude_error_m -0.149m new
test_takeoff[isaacsim-rob#3-v0.5] robot.overshoot_m 0m new
test_takeoff[isaacsim-rob#3-v0.5] robot.takeoff_duration_sim_s 17.73s new
test_takeoff[isaacsim-rob#3-v0.5] robot.velocity_rmse_m_sim_s 0.105m/s new
test_hover[isaacsim-rob#3-v0.5] duration_s 10.11s new
test_hover[isaacsim-rob#3-v0.5] robot.hover_altitude_mean_error_m 0.019m new
test_hover[isaacsim-rob#3-v0.5] robot.hover_position_stddev_m 0.017m new
test_landing[isaacsim-rob#3-v0.5] duration_s 38.73s new
test_landing[isaacsim-rob#3-v0.5] robot.final_altitude_m -0.004m new
test_landing[isaacsim-rob#3-v0.5] robot.land_duration_sim_s 14.52s new
test_landing[isaacsim-rob#3-v0.5] robot.velocity_rmse_m_sim_s 0.097m/s new
test_px4_ready[msairsim-rob#1-v0.5] duration_s 215.2s 25.15s -88.3% 🟢
test_px4_ready[msairsim-rob#1-v0.5] airstack_up_duration_s 3.22s 1.79s -44.4% 🟢
test_px4_ready[msairsim-rob#1-v0.5] airstack_down_duration_s 11.02s 10.93s -0.8%
test_px4_ready[msairsim-rob#1-v0.5] robot.ready_duration_sys_s 211.3s 10.35s -95.1% 🟢
test_takeoff[msairsim-rob#1-v0.5] duration_s 24.1s 24.01s -0.4%
test_takeoff[msairsim-rob#1-v0.5] robot.altitude_error_m -0.089m -0.095m +6.7%
test_takeoff[msairsim-rob#1-v0.5] robot.overshoot_m 0m 0m +0.0%
test_takeoff[msairsim-rob#1-v0.5] robot.takeoff_duration_sim_s 18.64s 18.66s +0.1%
test_takeoff[msairsim-rob#1-v0.5] robot.velocity_rmse_m_sim_s 0.217m/s 0.213m/s -1.8%
test_takeoff[msairsim-rob#1-v0.5] robot.odometry_error_mean_m 0.579m 0.576m -0.5%
test_takeoff[msairsim-rob#1-v0.5] robot.odometry_error_max_m 0.669m 0.669m +0.0%
test_takeoff[msairsim-rob#1-v0.5] robot.odometry_altitude_bias_m 0.575m 0.571m -0.7%
test_hover[msairsim-rob#1-v0.5] duration_s 10.06s 10.09s +0.3%
test_hover[msairsim-rob#1-v0.5] robot.hover_altitude_mean_error_m 0.046m 0.091m +97.8% 🔴
test_hover[msairsim-rob#1-v0.5] robot.hover_position_stddev_m 0.023m 0.053m +130.4% 🔴
test_hover[msairsim-rob#1-v0.5] robot.odometry_error_mean_m 0.674m 0.685m +1.6%
test_hover[msairsim-rob#1-v0.5] robot.odometry_error_max_m 0.696m 0.703m +1.0%
test_hover[msairsim-rob#1-v0.5] robot.odometry_altitude_bias_m 0.674m 0.685m +1.6%
test_landing[msairsim-rob#1-v0.5] duration_s 26.44s 26.59s +0.6%
test_landing[msairsim-rob#1-v0.5] robot.final_altitude_m -0.097m -0.081m -16.5%
test_landing[msairsim-rob#1-v0.5] robot.land_duration_sim_s 14.8s 14.8s -0.0%
test_landing[msairsim-rob#1-v0.5] robot.velocity_rmse_m_sim_s 0.226m/s 0.242m/s +7.1%
test_landing[msairsim-rob#1-v0.5] robot.odometry_error_mean_m 0.707m 0.722m +2.1%
test_landing[msairsim-rob#1-v0.5] robot.odometry_error_max_m 0.803m 0.81m +0.9%
test_landing[msairsim-rob#1-v0.5] robot.odometry_altitude_bias_m 0.706m 0.722m +2.3%
test_px4_ready[msairsim-rob#3-v0.5] duration_s 38.37s new
test_px4_ready[msairsim-rob#3-v0.5] airstack_up_duration_s 2.6s new
test_px4_ready[msairsim-rob#3-v0.5] airstack_down_duration_s 11.28s new
test_px4_ready[msairsim-rob#3-v0.5] robot.ready_duration_sys_s 17.77s new
test_takeoff[msairsim-rob#3-v0.5] duration_s 26.14s new
test_takeoff[msairsim-rob#3-v0.5] robot.altitude_error_m -0.093m new
test_takeoff[msairsim-rob#3-v0.5] robot.overshoot_m 0m new
test_takeoff[msairsim-rob#3-v0.5] robot.takeoff_duration_sim_s 18.66s new
test_takeoff[msairsim-rob#3-v0.5] robot.velocity_rmse_m_sim_s 0.207m/s new
test_takeoff[msairsim-rob#3-v0.5] robot.odometry_error_mean_m 0.578m new
test_takeoff[msairsim-rob#3-v0.5] robot.odometry_error_max_m 0.671m new
test_takeoff[msairsim-rob#3-v0.5] robot.odometry_altitude_bias_m 0.574m new
test_hover[msairsim-rob#3-v0.5] duration_s 10.22s new
test_hover[msairsim-rob#3-v0.5] robot.hover_altitude_mean_error_m 0.074m new
test_hover[msairsim-rob#3-v0.5] robot.hover_position_stddev_m 0.038m new
test_hover[msairsim-rob#3-v0.5] robot.odometry_error_mean_m 0.683m new
test_hover[msairsim-rob#3-v0.5] robot.odometry_error_max_m 0.707m new
test_hover[msairsim-rob#3-v0.5] robot.odometry_altitude_bias_m 0.683m new
test_landing[msairsim-rob#3-v0.5] duration_s 39.25s new
test_landing[msairsim-rob#3-v0.5] robot.final_altitude_m -0.095m new
test_landing[msairsim-rob#3-v0.5] robot.land_duration_sim_s 14.8s new
test_landing[msairsim-rob#3-v0.5] robot.velocity_rmse_m_sim_s 0.208m/s new
test_landing[msairsim-rob#3-v0.5] robot.odometry_error_mean_m 0.72m new
test_landing[msairsim-rob#3-v0.5] robot.odometry_error_max_m 0.83m new
test_landing[msairsim-rob#3-v0.5] robot.odometry_altitude_bias_m 0.719m new
test_px4_ready[msairsim-rob#1-v1.0] duration_s 0.001s removed
test_takeoff[msairsim-rob#1-v1.0] duration_s 16.82s removed
test_takeoff[msairsim-rob#1-v1.0] robot.altitude_error_m -0.048m removed
test_takeoff[msairsim-rob#1-v1.0] robot.overshoot_m 0m removed
test_takeoff[msairsim-rob#1-v1.0] robot.takeoff_duration_sim_s 10.22s removed
test_takeoff[msairsim-rob#1-v1.0] robot.velocity_rmse_m_sim_s 0.393m/s removed
test_takeoff[msairsim-rob#1-v1.0] robot.odometry_error_mean_m 0.538m removed
test_takeoff[msairsim-rob#1-v1.0] robot.odometry_error_max_m 0.684m removed
test_takeoff[msairsim-rob#1-v1.0] robot.odometry_altitude_bias_m 0.538m removed
test_hover[msairsim-rob#1-v1.0] duration_s 10.07s removed
test_hover[msairsim-rob#1-v1.0] robot.hover_altitude_mean_error_m 0.127m removed
test_hover[msairsim-rob#1-v1.0] robot.hover_position_stddev_m 0.06m removed
test_hover[msairsim-rob#1-v1.0] robot.odometry_error_mean_m 0.697m removed
test_hover[msairsim-rob#1-v1.0] robot.odometry_error_max_m 0.734m removed
test_hover[msairsim-rob#1-v1.0] robot.odometry_altitude_bias_m 0.696m removed
test_landing[msairsim-rob#1-v1.0] duration_s 17.34s removed
test_landing[msairsim-rob#1-v1.0] robot.final_altitude_m -0.149m removed
test_landing[msairsim-rob#1-v1.0] robot.land_duration_sim_s 7.2s removed
test_landing[msairsim-rob#1-v1.0] robot.velocity_rmse_m_sim_s 0.436m/s removed
test_landing[msairsim-rob#1-v1.0] robot.odometry_error_mean_m 0.679m removed
test_landing[msairsim-rob#1-v1.0] robot.odometry_error_max_m 0.935m removed
test_landing[msairsim-rob#1-v1.0] robot.odometry_altitude_bias_m 0.679m removed
test_px4_ready[msairsim-rob#1-v2.0] duration_s 0.001s removed
test_takeoff[msairsim-rob#1-v2.0] duration_s 15.89s removed
test_takeoff[msairsim-rob#1-v2.0] robot.altitude_error_m -0.042m removed
test_takeoff[msairsim-rob#1-v2.0] robot.overshoot_m 0m removed
test_takeoff[msairsim-rob#1-v2.0] robot.takeoff_duration_sim_s 10.36s removed
test_takeoff[msairsim-rob#1-v2.0] robot.velocity_rmse_m_sim_s 1.086m/s removed
test_takeoff[msairsim-rob#1-v2.0] robot.odometry_error_mean_m 0.541m removed
test_takeoff[msairsim-rob#1-v2.0] robot.odometry_error_max_m 0.684m removed
test_takeoff[msairsim-rob#1-v2.0] robot.odometry_altitude_bias_m 0.541m removed
test_hover[msairsim-rob#1-v2.0] duration_s 10.07s removed
test_hover[msairsim-rob#1-v2.0] robot.hover_altitude_mean_error_m 0.165m removed
test_hover[msairsim-rob#1-v2.0] robot.hover_position_stddev_m 0.083m removed
test_hover[msairsim-rob#1-v2.0] robot.odometry_error_mean_m 0.712m removed
test_hover[msairsim-rob#1-v2.0] robot.odometry_error_max_m 0.748m removed
test_hover[msairsim-rob#1-v2.0] robot.odometry_altitude_bias_m 0.712m removed
test_landing[msairsim-rob#1-v2.0] duration_s 26.67s removed
test_landing[msairsim-rob#1-v2.0] robot.final_altitude_m -0.143m removed
test_landing[msairsim-rob#1-v2.0] robot.land_duration_sim_s 6.678s removed
test_landing[msairsim-rob#1-v2.0] robot.velocity_rmse_m_sim_s 0.944m/s removed
test_landing[msairsim-rob#1-v2.0] robot.odometry_error_mean_m 0.684m removed
test_landing[msairsim-rob#1-v2.0] robot.odometry_error_max_m 0.963m removed
test_landing[msairsim-rob#1-v2.0] robot.odometry_altitude_bias_m 0.684m removed

docker

Metrics

Test Metric Baseline Current Change
docker.gcs image_size_mb 2024MB new
docker.isaac-sim image_size_mb 1.253e+04MB new
docker.ms-airsim image_size_mb 4010MB new

Regression detected — some metrics exceeded the threshold.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a multi-robot GCS workflow centered around Foxglove: custom panels (waypoints/polygons/tasks), an action relay that bridges task actions across DDS domains, a GCS-side visualizer for unified multi-robot rendering (including a sim overhead “ground”), plus a new coordination/gossip layer for broadcasting peer state and typed payloads.

Changes:

  • Adds Foxglove extensions + persisted waypoint/polygon editors, and wires them into the GCS container startup.
  • Adds cross-domain action relaying (GCS domain 0 ↔ robot domain N) and expands GCS visualization / DDS allowlists for multi-robot use.
  • Adds a new coordination/gossip layer (msgs + bringup + docs) and extends the random-walk planner to support polygon-bounded exploration.

Reviewed changes

Copilot reviewed 76 out of 95 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
simulation/isaac-sim/utils/scene_prep.py Adds orthographic overhead camera publisher + USD root-prim helpers + collector/texture fixups
simulation/isaac-sim/launch_scripts/two_drone_scene_import.py Removes legacy two-drone import script
simulation/isaac-sim/launch_scripts/gps_utils.py Adds per-drone GPS-origin helpers for multi-drone scenes
simulation/isaac-sim/launch_scripts/example_multi_drone_scene_import.py New reference multi-drone + scene import + overhead camera wiring
simulation/isaac-sim/launch_scripts/barebones_pegasus_launch.py Adds PLAY_SIM_ON_START gating
simulation/isaac-sim/docker/docker-compose.yaml Removes commented HITL service stub
robot/ros_ws/src/global/planners/random_walk/src/random_walk_node.cpp Adds polygon bounds propagation + “approach polygon” pre-flight logic
robot/ros_ws/src/global/planners/random_walk/src/random_walk_logic.cpp Adds point-in-polygon bounds checks + nearest-inside helper
robot/ros_ws/src/global/planners/random_walk/launch/random_walk_launch.xml Updates launch remaps/paths for namespaced usage
robot/ros_ws/src/global/planners/random_walk/include/random_walk_node.hpp Adds storage for pending bounds + mutex
robot/ros_ws/src/global/planners/random_walk/include/random_walk_logic.hpp Adds polygon-bound API + makes mutex mutable for const methods
robot/ros_ws/src/global/planners/random_walk/config/random_walk_config.yaml Adds new config keys and topics for random-walk node
robot/ros_ws/src/global/global_bringup/launch/global.launch.xml Adjusts remaps/naming notes for namespaced random-walk planner
robot/ros_ws/src/autonomy_bringup/onboard_all/config/domain_bridge.yaml Adds additional sim visualization topics to bridge
robot/ros_ws/src/autonomy_bringup/onboard_all/config/dds_router.yaml Expands allowlist for cameras, trajectory vis, global plan; notes about gossip router separation
robot/ros_ws/src/autonomy_bringup/launch/robot.launch.xml Adds coordination/gossip bringup include + args
robot/ros_ws/src/autonomy_bringup/launch/interpolate_dds_router.launch.py Scopes LD_LIBRARY_PATH for ddsrouter execution
mkdocs.yml Adds nav entries for new GCS/sim/coordination docs
gcs/saves/.gitkeep Adds persistent save directory placeholder
gcs/ros_ws/src/gcs_visualizer/setup.py New GCS visualizer ROS 2 Python package setup
gcs/ros_ws/src/gcs_visualizer/setup.cfg New package install script config
gcs/ros_ws/src/gcs_visualizer/resource/gcs_visualizer New ament resource marker
gcs/ros_ws/src/gcs_visualizer/package.xml New package manifest for GCS visualization nodes
gcs/ros_ws/src/gcs_visualizer/launch/gcs_visualizer.launch.xml Launches GCS visualizer + payload + waypoint/polygon collectors
gcs/ros_ws/src/gcs_visualizer/gcs_visualizer/waypoint_collector_node.py Implements waypoint editor backend + save persistence + marker/path publishing
gcs/ros_ws/src/gcs_visualizer/gcs_visualizer/polygon_collector_node.py Implements polygon editor backend + save persistence + marker publishing
gcs/ros_ws/src/gcs_visualizer/gcs_visualizer/payload_visualizer_node.py Republishes gossip payloads per-robot/per-payload for Foxglove
gcs/ros_ws/src/gcs_visualizer/gcs_visualizer/gcs_utils.py Adds shared GCS utilities (PC2→markers, transforms)
gcs/ros_ws/src/gcs_visualizer/gcs_visualizer/init.py Package init
gcs/ros_ws/src/action_relay/setup.py New action relay ROS 2 Python package setup
gcs/ros_ws/src/action_relay/setup.cfg New package install script config
gcs/ros_ws/src/action_relay/resource/action_relay New ament resource marker
gcs/ros_ws/src/action_relay/package.xml New package manifest for action relay
gcs/ros_ws/src/action_relay/launch/action_relay.launch.py Launches one relay instance per robot based on NUM_ROBOTS
gcs/ros_ws/src/action_relay/action_relay/init.py Package init
gcs/foxglove_extensions/waypoint-editor/package.json New Foxglove Waypoint Editor extension metadata
gcs/foxglove_extensions/waypoint-editor/dist/extension.js Bundled Waypoint Editor panel implementation
gcs/foxglove_extensions/robot-commands/package.json New/updated Robot Tasks extension metadata
gcs/foxglove_extensions/render_layout.py Generates NUM_ROBOTS-matched Foxglove layout JSON
gcs/foxglove_extensions/polygon-editor/package.json New Foxglove Polygon Editor extension metadata
gcs/foxglove_extensions/polygon-editor/dist/extension.js Bundled Polygon Editor panel implementation
gcs/foxglove_extensions/install.sh Installs unpacked Foxglove extensions into Foxglove Studio extensions dir
gcs/docker/gcs-base-docker-compose.yaml Runs extension install + layout render; mounts saves + extensions; exports NUM_ROBOTS
docs/simulation/isaac_sim/spawning_drones.md Documents multi-drone spawning + GPS origins pattern
docs/simulation/isaac_sim/overhead_camera.md Documents overhead camera producer and Foxglove ground rendering
docs/robot/autonomy/coordination/payloads.md Documents config-driven gossip payloads + GCS visualization handlers
docs/robot/autonomy/coordination/index.md Documents coordination layer architecture and usage
docs/gcs/waypoints_and_geofences.md Documents waypoint/polygon editor workflow + persistence
docs/gcs/foxglove.md Documents GCS visualizer topics, discovery, and layout behavior
common/ros_packages/robot_descriptions/launch/robot_state_publisher.launch.py Adjusts URDF lookup logic/package reference text
common/ros_packages/robot_descriptions/CMakeLists.txt Minor trailing whitespace change
common/ros_packages/msgs/task_msgs/action/SemanticSearchTask.action Updates semantic-search goal fields and defaults (adds background_queries)
common/ros_packages/gui/rviz/rviz_tasks_panel/src/tasks_panel.cpp Updates RViz task panel fields for semantic search changes
common/ros_packages/desktop_bringup/params/domain_bridge.yaml Minor formatting change
common/ros_packages/desktop_bringup/package.xml Adds deps for new GCS-side components
common/ros_packages/desktop_bringup/launch/gcs.launch.xml Launches Foxglove + bridge + gossip bridge + gcs_visualizer + action_relay
common/ros_packages/coordination/README.md Adds coordination layer README
common/ros_packages/coordination/coordination_msgs/package.xml New coordination_msgs package manifest
common/ros_packages/coordination/coordination_msgs/msg/PeerProfilePayload.msg New payload wire-format message
common/ros_packages/coordination/coordination_msgs/msg/PeerProfile.msg New peer profile wire-format message
common/ros_packages/coordination/coordination_msgs/CMakeLists.txt Builds/generates coordination messages
common/ros_packages/coordination/coordination_bringup/setup.py New coordination_bringup Python package setup
common/ros_packages/coordination/coordination_bringup/scripts/peer_registry_monitor.py Adds CLI monitor for peer registry
common/ros_packages/coordination/coordination_bringup/scripts/gossip_node Adds gossip_node entry script
common/ros_packages/coordination/coordination_bringup/resource/coordination_bringup New ament resource marker
common/ros_packages/coordination/coordination_bringup/package.xml New bringup package manifest
common/ros_packages/coordination/coordination_bringup/launch/gossip.launch.xml Launches per-robot gossip router + gossip node
common/ros_packages/coordination/coordination_bringup/launch/gcs_gossip_bridge.launch.py Launches GCS-side gossip DDS router
common/ros_packages/coordination/coordination_bringup/coordination_bringup/peer_profile.py Adds PeerProfile helper API for payload serialization
common/ros_packages/coordination/coordination_bringup/coordination_bringup/gossip_node.py Implements gossip publishing, payload attachment, registry maintenance
common/ros_packages/coordination/coordination_bringup/coordination_bringup/frame_utils.py Shared GPS/ENU + message transform helpers
common/ros_packages/coordination/coordination_bringup/coordination_bringup/init.py Package init
common/ros_packages/coordination/coordination_bringup/config/gossip_payloads.yaml Adds config-driven payload declaration file
common/ros_packages/coordination/coordination_bringup/config/gossip_dds_router.yaml Adds per-robot gossip DDS router config
common/ros_packages/coordination/coordination_bringup/config/gcs_gossip_dds_router.yaml Adds GCS-side gossip DDS router config
AGENTS.md Adds new skills to agent index
.gitmodules Minor trailing whitespace change
.gitignore Ignores local scenes + persisted GCS saves
.env Bumps version and changes defaults (NUM_ROBOTS, sim script)
.agents/skills/visualize-in-foxglove/SKILL.md Adds skill doc for Foxglove visualization workflow
.agents/skills/attach-gossip-payload/SKILL.md Adds skill doc for adding gossip payloads end-to-end
Comments suppressed due to low confidence (1)

robot/ros_ws/src/global/planners/random_walk/include/random_walk_node.hpp:40

  • This header now includes twice (once newly added and once already present). Please drop the duplicate include to keep the header tidy and avoid redundant work for compilers/unity builds.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +227 to 234
// Reject points outside the goal's search_bounds polygon (XY footprint
// in robot-local map). Empty polygon → no-op.
if (!point_in_search_bounds(std::get<0>(point), std::get<1>(point)))
{
return true;
}

std::lock_guard<std::mutex> lock(this->mutex);
Comment on lines 7 to 11
sub_map_topic: "vdb_map_visualization"
sub_odometry_topic: "odometry"
sub_robot_tf_topic: "/tf"
srv_random_walk_toggle_topic: "~/global_plan_toggle"

Comment on lines +10 to +16
<depend>rclpy</depend>
<depend>sensor_msgs</depend>
<depend>nav_msgs</depend>
<depend>visualization_msgs</depend>
<depend>geometry_msgs</depend>
<depend>builtin_interfaces</depend>
<depend>tf2_ros</depend>
Comment on lines 52 to 57
# Use relative path within autonomy_bringup package
urdf_file = PathJoinSubstitution([
FindPackageShare('robot_bringup'),
FindPackageShare('autonomy_bringup'),
'urdf',
urdf_file_path
])
Comment on lines +7 to +8
# Current GPS position from interface/mavros/global_position/raw/fix
# gps_fix.header.stamp carries the NavSatFix timestamp
Comment on lines 427 to 432
collector = Collector(
usd_path=source_usd_url,
collect_dir=output_dir,
usd_only=False, # include textures, MDLs, etc.
flat_collection=False, # preserve source folder hierarchy
flat_collection=True, # preserve source folder hierarchy
skip_existing=False,
Comment thread .env
Comment on lines 26 to 46
# ================= Common ===================
AUTOLAUNCH="true" # If false, the docker-compose will just spawn idle docker containers with no launch command.
NUM_ROBOTS="1" # Number of robot containers to launch.
NUM_ROBOTS="2" # Number of robot containers to launch.
RECORD_BAGS="false" # "true" or "false"

# ============== ISAAC SIM =====================
ISAAC_SIM_GUI="/isaac-sim/AirStack/simulation/isaac-sim/assets/scenes/simple_pegasus.scene.usd"
# Set to "true" to launch Isaac Sim using a standalone Python script instead of USD file
ISAAC_SIM_USE_STANDALONE="true" # "true" or "false"
# Script name (must be in /AirStack/simulation/isaac-sim/launch_scripts/)
ISAAC_SIM_SCRIPT_NAME="example_one_px4_pegasus_launch_script.py"
ISAAC_SIM_SCRIPT_NAME="example_multi_drone_scene_import.py" #"example_one_px4_pegasus_launch_script.py"
PLAY_SIM_ON_START="false"

# ===============================================

# ================= MS-AIRSIM =====================
# Do not set if you want airstack to fetch a simple blocks world.
# MS_AIRSIM_ENV_DIR=./simulation/ms-airsim/assets/scenes
# MS_AIRSIM_BINARY_PATH="/ms-airsim-env/Blocks/LinuxNoEditor/Blocks.sh"
# =================================================
# =================================================airst

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 80 out of 99 changed files in this pull request and generated 10 comments.

Comment on lines +253 to +266
og.Controller.Keys.SET_VALUES: [
(("inputs:domain_id", nodes["context"]), int(domain_id)),
(("inputs:cameraPrim", nodes["create_rp"]), camera_prim_path),
(("inputs:width", nodes["create_rp"]), res),
(("inputs:height", nodes["create_rp"]), res),
(("inputs:type", nodes["rgb"]), "rgb"),
(("inputs:value", nodes["frame"]), str(frame_id)),
(("inputs:value", nodes["topic"]), str(topic)),
(("inputs:value", nodes["spec_value"]), float(coverage_m)),
(("inputs:value", nodes["spec_topic"]), str(spec_topic)),
(("inputs:messageName", nodes["spec_pub"]), "Float32"),
(("inputs:messagePackage", nodes["spec_pub"]), "std_msgs"),
(("inputs:messageSubfolder", nodes["spec_pub"]), "msg"),
],
Comment on lines +127 to +129
period = 1.0 / max(publish_rate, 0.01)
self._publish_timer = self.create_timer(period, self._publish_tick, clock=ROSClock())
self._drain_timer = self.create_timer(0.2, self._drain_peer_inbox, clock=ROSClock())
tests_require=['pytest'],
entry_points={
'console_scripts': [
'gossip_node = coordination_bringup.gossip_node:main',
Comment on lines +3 to +13
import math
import copy
import struct

from coordination_bringup.frame_utils import (
gps_to_enu as _gps_to_enu_abs,
heading_to_quat,
rotate_vector,
transform_marker_array,
transform_point_cloud2 as _transform_pc2,
)
Comment on lines +74 to +80
### Path B — Translate and republish via robot_marker_node

**File:** `gcs/ros_ws/src/gcs_visualizer/gcs_visualizer/robot_marker_node.py`

This node auto-discovers robot topics, applies a GPS boot offset to convert from the
robot's local odom frame to ENU (map frame), and republishes everything as a single
`/gcs/robot_markers` MarkerArray.
Comment thread .agents/skills/attach-gossip-payload/SKILL.md Outdated
Comment on lines +94 to +98
### 4a — Read the payload type from `gossip_payloads.yaml`

Open `robot/ros_ws/src/coordination/coordination_bringup/config/gossip_payloads.yaml`
and note the `type:` field for your new entry. This determines how to deserialize it.

Comment on lines +160 to +168
def main():
ap = argparse.ArgumentParser()
ap.add_argument('--input', default=os.environ.get(
'LAYOUT_TEMPLATE',
'/root/AirStack/gcs/foxglove_extensions/airstack_default.json'))
ap.add_argument('--output', default=os.environ.get(
'LAYOUT_OUTPUT',
'/root/AirStack/gcs/foxglove_extensions/airstack_default.json'))
ap.add_argument('--num-robots', type=int,
Comment thread common/ros_packages/desktop_bringup/launch/gcs.launch.xml Outdated
}, true},
{"Semantic Search", "tasks/semantic_search", {
{"query", "string", 0, 0, 0},
{"background_queries", "string", 0, 0, 0},
krrishj18 and others added 15 commits May 8, 2026 15:05
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
# Conflicts:
#	simulation/isaac-sim/launch_scripts/two_drone_scene_import.py
Advance to 8e01d013 (main's pointer) which contains spawn_rtx_lidar.py,
required by example_one_px4_pegasus_launch_script.py and the multi
script after the rtx-lidar update merged from main.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- gossip_node: swap startup log + outgoing-stamp clock to STEADY_TIME so
  the dedup-by-stamp invariant survives /clock pauses; subscribe to
  /global_position/global to match foxglove_visualizer and action_relay
- gossip_node docstring: drop the false "waypoint triggers immediate
  publish" claim
- coordination README: rename peer_registry node block to the actual
  per-robot registry topic; "wall-clock" -> "steady"
- package.xml: add missing exec/depend rules
  - coordination_bringup -> autonomy_bringup
  - autonomy_bringup -> coordination_bringup
  - desktop_bringup -> coordination_bringup, gcs_visualizer
  - gcs_visualizer -> std_msgs, coordination_msgs, coordination_bringup
- task_msgs: replace TODO license with BSD-3-Clause
- gcs.launch.xml: comment had `--no-sandbox` (`--` is illegal inside an
  XML comment and crashed the ROS launch parser)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… override

- payload_visualizer_node: remove unused PointCloud2 / transform_point_cloud2
  imports (F401), collapse Marker/MarkerArray
- action_relay launch: ROBOT_RELAY_MAP env override for non-default
  robot_name -> domain mappings (default behavior unchanged)
- desktop_bringup robot.rviz: drop BehaviorTreePanel entry pointing at
  /behavior/behavior_tree_graphviz (publisher package was removed)
- autonomy_bringup domain_bridge: bridge /global_position/global to match
  the dds_router and the rest of the stack (was /raw/fix)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- render_layout: regex now strips every trailing _r<n> (was: only the
  last one), fixes _r1_r1_r1... stacking on repeated runs
- render_layout: atomic write via tmp + os.replace so a partial
  json.dump doesn't corrupt the layout file
- airstack_default.json: re-render with fixed stripper to commit a
  clean source template (no stacked _r1 suffixes)
- install.sh -> install.py: file is Python, shebang is python3
- install.py: slugify publisher into the on-disk extension dir name
  so "AirLab CMU" doesn't produce a directory with a space
- drop robot-commands/robot-commands.foxe (duplicate; canonical is at
  foxglove_extensions/robot-commands.foxe) and the .foxe.bak

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.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.

3 participants