feat: nav2 sensor fix OTA demo#58
Draft
bburda wants to merge 1 commit into
Draft
Conversation
39a0925 to
fff9581
Compare
2 tasks
fff9581 to
7a37cc6
Compare
…pdate, publish-and-apply a hotfix Dev-grade OTA demo on the ros2_medkit gateway's ota_update_plugin and the SOVD /updates resource. An RB-Theron AMR runs Nav2 in an AWS small-warehouse world. A regressing lidar update (broken_lidar_3_0_0) is auto-applied at boot; a few metres into a mission the scan sensor develops a stuck sector, Nav2 can no longer make progress, and navigate_to_pose aborts. Generic log/action-status bridges surface that as SOVD faults on bt-navigator and controller-server with a freeze-frame and an MCAP capture - the sensor node never reports itself. The operator diagnoses over SOVD: downloads the MCAP, runs a suite of health-check operations (lidar/localization/drivetrain/costmap) to confirm the lidar is the cause, then publishes the forward hotfix (fixed_lidar_3_0_1) as a hand-provided update descriptor via POST /updates and applies it (prepare + execute), and clears the latched faults. A custom nav_to_pose behaviour tree keeps the abort prompt. Foxglove panels + curl scripts drive the loop; smoke tests cover the plugin, the SOVD envelope, the publish-then-apply flow, and the single-publisher /scan remap. Runs on CycloneDDS (FastDDS segfaults amcl/controller_server on Jazzy).
7a37cc6 to
7a85e20
Compare
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.
Description
Adds
demos/ota_nav2_sensor_fix/- an end-to-end OTA-over-SOVD demo (gateway plugin + FastAPI artifact server + 4 ROS 2 demo packages) exercising the/updateslifecycle: update a broken lidar node, install a new safety classifier, and uninstall a deprecated package, all over HTTP and spec-compliant.OTA demo
demos/ota_nav2_sensor_fix/end-to-end OTA demoota_update_pluginC++ gateway plugin (UpdateProvider+GatewayPlugin)updated_components/added_components/removed_components)pack_artifact.pyCLI for building tarballs and catalog entriesdocker-compose.yml(gateway + update server); nav2 / Foxglove are bring-your-own (documented in README)Out of scope (deliberate, dev-grade positioning)
Test plan / verification
Unit & integration tests (all clean):
pytest -vforpack_artifact.py(16 tests)pytest -vforota_update_server(5 tests)colcon testforota_update_plugin(24 GTest cases)-Wall -Wextra -Wpedantic -Wshadow -Wconversionbuild_artifacts.shproduces a 3-entry catalog + tarballs end-to-endEnd-to-end smoke:
UpdateProvider(gateway logs: "Update backend provided by plugin")/catalogand registers all 3 catalog entries/updates/fixed_lidar_2_1_0/prepare && /executekillsbroken_lidar_nodeand spawnsfixed_lidar_node/updates/obstacle_classifier_v2_1_0_0/prepare && /executeswaps files and spawnsobstacle_classifier_node/updates/broken_lidar_legacy_remove/prepare && /executereturnsstatus: completedand the legacy process is gonetests/smoke_test_ota.sh- 25/25 pass on a fresh stacktests/smoke_test_demo_narrative.sh- 8/8 pass on a fresh stacktrigger-update.sh,trigger-install.sh,trigger-uninstall.sh,check-demo.sh,stop-demo.shexercised end-to-endNotes
selfpatch/ros2_medkitmainfor the gateway sources (clone happens at image build time)pgrepmatches against/proc/<pid>/cmdlineargv[0] basename (notcomm, which the kernel truncates to 15 chars)artifacts/is baked into theupdate_serverimage at build timeros2_medkit_foxglove_extensionUpdates panel PR (fix(docker): add missing ros2_medkit components and submodules #6 of that repo)