l4t deployment fixes: make the Jetson profile build + boot on real hardware#371
Draft
JohnYanxinLiu wants to merge 4 commits into
Draft
l4t deployment fixes: make the Jetson profile build + boot on real hardware#371JohnYanxinLiu wants to merge 4 commits into
JohnYanxinLiu wants to merge 4 commits into
Conversation
Test Metrics —
|
| Test | Pass | Fail | Skip | Rate |
|---|---|---|---|---|
| isaac-sim.extensions.PegasusSimulator.extensions.pegasus.simulator.pegasus.simulator.tests.test_hello_world | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.replicator.pose_generation.pose_tests.test_utils | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.benchmark.services.test_no_rendering | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_determinism | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_root | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_delete_in_contact | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_rendering | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_save_stage | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_time_stepping | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.cortex.framework.cortex_bringup_test | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.ros1.bridge.test_carter_lidar | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_carter_camera_multi_robot_nav | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_people_sim | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.sensors.physics.contact_sensor_test | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_lidar_test | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_radar_test | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_createstage_config | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extension_count | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_external | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extra_args | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fabric_frame_delay | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fetch_results | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_frame_delay | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ogn | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ovd | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_syntheticdata | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_unsaved_on_exit | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.omni.isaac.dynamic_control.test_zero_step | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.omni.replicator.agent.test_scripting | 0 | 1 | 0 | 0% |
| isaac-sim.standalone_examples.testing.omni.syntheticdata.test_basic | 0 | 1 | 0 | 0% |
| perception.natnet_ros2.test_natnet_ros2 | 0 | 1 | 0 | 0% |
| ros_packages.gui.rviz.rviz_behavior_tree_panel.scripts.test_behavior_tree_publisher | 0 | 1 | 0 | 0% |
| ros_packages.logging.bag_recorder_pid.test.test_copyright | 0 | 1 | 0 | 0% |
| ros_packages.logging.bag_recorder_pid.test.test_flake8 | 0 | 1 | 0 | 0% |
| ros_packages.logging.bag_recorder_pid.test.test_pep257 | 0 | 1 | 0 | 0% |
| ros_ws.src.local.planners.takeoff_landing_planner.test.scripts.test_takeoff_landing_planner | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Baseline.DPVO.Pangolin.components.pango_python.pybind11.tests | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_circular_buffer | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_loadable | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_macvo | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_modules | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_sequence | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_tartanvo | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_frontend | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_matching | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_performance_macvo | 0 | 1 | 0 | 0% |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_stereo_depth | 0 | 1 | 0 | 0% |
| ros_ws.src.ros2tak_tools.test.test_copyright | 0 | 1 | 0 | 0% |
| ros_ws.src.ros2tak_tools.test.test_flake8 | 0 | 1 | 0 | 0% |
| ros_ws.src.ros2tak_tools.test.test_pep257 | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.camera_param_server.test.test_copyright | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.camera_param_server.test.test_flake8 | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.camera_param_server.test.test_pep257 | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.gimbal_stabilizer.test.test_copyright | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.gimbal_stabilizer.test.test_flake8 | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.gimbal_stabilizer.test.test_pep257 | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.lidar_point_cloud_filter.test.test_copyright | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.lidar_point_cloud_filter.test.test_flake8 | 0 | 1 | 0 | 0% |
| ros_ws.src.sensors.lidar_point_cloud_filter.test.test_pep257 | 0 | 1 | 0 | 0% |
| sensors.lidar_point_cloud_filter.test_validation_core | 0 | 1 | 0 | 0% |
Metrics
| Test | Metric | Value |
|---|---|---|
| ros_packages.gui.rviz.rviz_behavior_tree_panel.scripts.test_behavior_tree_publisher | duration_s | 0s |
| ros_packages.logging.bag_recorder_pid.test.test_copyright | duration_s | 0s |
| ros_packages.logging.bag_recorder_pid.test.test_flake8 | duration_s | 0s |
| ros_packages.logging.bag_recorder_pid.test.test_pep257 | duration_s | 0s |
| ros_ws.src.ros2tak_tools.test.test_copyright | duration_s | 0s |
| ros_ws.src.ros2tak_tools.test.test_flake8 | duration_s | 0s |
| ros_ws.src.ros2tak_tools.test.test_pep257 | duration_s | 0s |
| ros_ws.src.local.planners.takeoff_landing_planner.test.scripts.test_takeoff_landing_planner | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Baseline.DPVO.Pangolin.components.pango_python.pybind11.tests | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_circular_buffer | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_loadable | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_macvo | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_modules | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_sequence | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_config_tartanvo | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_frontend | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_matching | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_performance_macvo | duration_s | 0s |
| ros_ws.src.perception.macvo_ros2.macvo_ros2.macvo.Scripts.UnitTest.test_stereo_depth | duration_s | 0s |
| ros_ws.src.sensors.camera_param_server.test.test_copyright | duration_s | 0s |
| ros_ws.src.sensors.camera_param_server.test.test_flake8 | duration_s | 0s |
| ros_ws.src.sensors.camera_param_server.test.test_pep257 | duration_s | 0s |
| ros_ws.src.sensors.gimbal_stabilizer.test.test_copyright | duration_s | 0s |
| ros_ws.src.sensors.gimbal_stabilizer.test.test_flake8 | duration_s | 0s |
| ros_ws.src.sensors.gimbal_stabilizer.test.test_pep257 | duration_s | 0s |
| ros_ws.src.sensors.lidar_point_cloud_filter.test.test_copyright | duration_s | 0s |
| ros_ws.src.sensors.lidar_point_cloud_filter.test.test_flake8 | duration_s | 0s |
| ros_ws.src.sensors.lidar_point_cloud_filter.test.test_pep257 | duration_s | 0s |
| isaac-sim.extensions.PegasusSimulator.extensions.pegasus.simulator.pegasus.simulator.tests.test_hello_world | duration_s | 0s |
| isaac-sim.standalone_examples.replicator.pose_generation.pose_tests.test_utils | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.benchmark.services.test_no_rendering | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_determinism | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_articulation_root | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_delete_in_contact | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_rendering | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_save_stage | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.core.api.test_time_stepping | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.cortex.framework.cortex_bringup_test | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.ros1.bridge.test_carter_lidar | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_carter_camera_multi_robot_nav | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.ros2.bridge.test_people_sim | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.sensors.physics.contact_sensor_test | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_lidar_test | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.sensors.rtx.rtx_radar_test | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_createstage_config | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extension_count | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_external | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_extra_args | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fabric_frame_delay | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_fetch_results | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_frame_delay | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ogn | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_ovd | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_syntheticdata | duration_s | 0s |
| isaac-sim.standalone_examples.testing.isaacsim.simulation_app.test_unsaved_on_exit | duration_s | 0s |
| isaac-sim.standalone_examples.testing.omni.isaac.dynamic_control.test_zero_step | duration_s | 0s |
| isaac-sim.standalone_examples.testing.omni.replicator.agent.test_scripting | duration_s | 0s |
| isaac-sim.standalone_examples.testing.omni.syntheticdata.test_basic | duration_s | 0s |
| perception.natnet_ros2.test_natnet_ros2 | duration_s | 0s |
| sensors.lidar_point_cloud_filter.test_validation_core | duration_s | 0s |
…e resolution
Parametrize the robot-l4t compose service so a single service covers real
deployments without editing compose:
- AUTONOMY_ROLE and FCU_URL are now ${VAR:-default} overridable (and FCU_URL is
unquoted so the literal serial path reaches mavros).
- Rosbag output path is BAG_STORAGE_PATH-overridable.
Update the configure-multi-robot skill to reflect the honor-pre-set-ROBOT_NAME
guard (#370): document pinning ROBOT_NAME in an override for a single real robot,
the never-on-the-shared-service caveat, and the unknown_robot fallback fixes by
topology.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Deployment override for a single real PX4 robot on a Jetson (aarch64/l4t). Surfaces the common knobs at the top with sensible defaults: ROBOT_NAME pinned directly (single-robot shortcut honored by .bashrc), FCU_URL, AUTONOMY_ROLE, BAG_STORAGE_PATH, and RECORD_BAGS. Mocap-agnostic — NatNet/external-vision settings are added by a separate optitrack override. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Two real-hardware build fixes for the Jetson profile: - Dockerfile.l4t-stack-base: overwrite dustynv's /ros_entrypoint.sh with an `exec "$@"` passthrough. Its prebuilt source-ROS libs (fastcdr 2.2.5) were shadowing the apt Jazzy (2.2.7) that Dockerfile.robot layers on, crashing apt-built nodes like mavros with symbol-lookup errors under tmux autolaunch. - zed/Dockerfile.zed-l4t: bump ZED SDK 4.2 -> 5.2 and move the coupled ROS deps together (zed_msgs 5.2.1, point_cloud_transport(_plugins) 4.x, add backward_ros). Document both gotchas in the docker-build-profiles skill, and correct the stale unknown-robot -> unknown_robot in the robot_identity reference doc. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Version-increment gate: bump above develop's 0.19.0-alpha.6 and record the l4t deployment changes in the changelog. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
JohnYanxinLiu
force-pushed
the
johnliu/l4t-deployment-fix
branch
from
July 21, 2026 16:59
35b4b0a to
61a94b9
Compare
Collaborator
Author
|
Successfully built and ran on real jetson hardware. |
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.
What features did you add and/or bugs did you address?
Which GitHub issue does this address?
No dedicated issue. Second PR in the real-robot deployment series (follows l4t infra fixes: aarch64 build args + robot-name resolution #370, "general robot deployment infra"). Makes the existing
robot-l4t(Jetson / aarch64) profile actually build and boot on real hardware, and documents the name-resolution + build gotchas so they don't get rediscovered.Additional description if not fully described in the GitHub issue
Three concerns, committed separately:
1.
robot-l4tdeployment knobs (compose + skill) —commit 1AUTONOMY_ROLEandFCU_URLare now${VAR:-default}overridable (andFCU_URLis unquoted so the literal serial path reaches mavros).BAG_STORAGE_PATH-overridable (default unchanged:/media/airlab/Storage/airstack_collection)./devso a hot-plugged USB FCU (ttyACM*) appears without a container restart.configure-multi-robotskill updated for the honor-pre-set-ROBOT_NAMEguard from l4t infra fixes: aarch64 build args + robot-name resolution #370.2. Deployment override template (env) —
commit 2overrides/l4t-px4-realrobot.env: site-agnostic template surfacing the common knobs.ROBOT_NAMEpinned directly (single-robot shortcut, with the fleet caveat documented). Mocap-agnostic — NatNet settings come in a later optitrack override.3. l4t image build fixes (dockerfiles + skill + docs) —
commit 3Dockerfile.l4t-stack-base: overwrite dustynv's/ros_entrypoint.shwith anexec "$@"passthrough. Its prebuilt source-ROS libs (fastcdr2.2.5) were shadowing the apt Jazzy (2.2.7)Dockerfile.robotlayers on, crashing mavros with symbol-lookup errors under tmux autolaunch.zed/Dockerfile.zed-l4t: bump ZED SDK 4.2 → 5.2 with the coupled ROS deps (zed_msgs5.2.1,point_cloud_transport(_plugins)4.x, addbackward_ros).Please add videos and images to demonstrate the feature.
N/A — build/config plumbing, no runtime UI.
How did you implement it?
robot-l4tservice already existed ondevelop; this parametrizes its hardcoded values rather than adding a new service, so multi-robot/hostname resolution stays the default and per-deployment values live in an override env file.ROBOT_NAMEis pinned only in the override, never on the shared service — a hardcoded name on the service collapses all robots onto one name/domain (see theconfigure-multi-robotskill).RUNthat replaces the base image's entrypoint; shells still get ROS from/opt/ros/jazzy/setup.bashvia.bashrc.How do you run and use it?
Testing with PyTest
build_dockersuite exercises the changed Dockerfiles/compose. Full l4t verification is hardware (Jetson + PX4 + ZED) and can't run on the x86 CI runner.airstack test -m "build_docker or build_packages" -vDocumentation
configure-multi-robotanddocker-build-profilesskills and correcteddocs/robot/docker/robot_identity.md.Versioning
.envVERSION0.19.0-alpha.6→0.19.0-alpha.7(commit 4) with matching CHANGELOG[Unreleased]entries, clearing the version-increment gate.🤖 Generated with Claude Code