-
Notifications
You must be signed in to change notification settings - Fork 2
fix(ota_demo): green up the plugin gtest gate and the demo narrative #72
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -29,7 +29,8 @@ | |
| # scan_sensor_node is running broken_lidar_node; fixed_lidar_3_0_1 is | ||
| # NOT yet registered (boot catalog holds only the bad update). | ||
| # 2. send-goal.sh -> ACTION_NAVIGATE_TO_POSE_ABORTED reaches CONFIRMED on | ||
| # bt-navigator, and controller-server picks up a supporting LOG_* fault. | ||
| # bt-navigator, and controller-server picks up a supporting LOG_* fault | ||
| # whose message is the controller's own stall, not just any error. | ||
| # 3. Fault detail (bt-navigator) has environment_data.snapshots >= 1, and | ||
| # the rosbag bulk-data download returns a non-empty MCAP body. | ||
| # 4. publish-fix.sh -> fixed_lidar_3_0_1 appears in /updates (SOVD | ||
|
|
@@ -68,6 +69,17 @@ CONTROLLER_ENTITY="apps/controller-server" | |
| # controller-server's LOG_CONTROLLER_SERVER_* code is content-hashed (derived | ||
| # from the log message), so it is never matched by exact code - only by | ||
| # "does this entity have any fault at all" (see fault_present with code=""). | ||
| # | ||
| # The message is matched instead, because "any fault on controller-server" is | ||
| # too weak for the one assertion that says WHICH Nav2 node failed. The log | ||
| # bridge promotes every controller_server ERROR at or above its severity floor, | ||
| # so a TF error or a lifecycle error would satisfy a bare count check. These two | ||
| # messages are the controller saying it cannot move: the progress checker | ||
| # (movement_time_allowance) and the controller patience (failure_tolerance). | ||
| # If the global costmap ever starts marking the phantom again, planner_server | ||
| # aborts the goal first, controller_server logs neither of these, and this is | ||
| # the assertion that goes red. | ||
| CONTROLLER_STALL_MSG="Failed to make progress|Controller patience exceeded" | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Minor: this might be a touch too tight in the other direction.
With For the record the two you picked check out: |
||
|
|
||
| # --- Helpers built on top of smoke_lib.sh's api_get/poll_until ------------- | ||
|
|
||
|
|
@@ -231,12 +243,14 @@ else | |
| "fault never reached CONFIRMED within 60s - either nav2 didn't accept the goal or the action-status bridge is broken" | ||
| fi | ||
|
|
||
| echo " Waiting for a supporting LOG_* fault on ${CONTROLLER_ENTITY} (max 60s)..." | ||
| if poll_until "/${CONTROLLER_ENTITY}/faults" '.items | length > 0' 60; then | ||
| pass "supporting LOG_* fault present on ${CONTROLLER_ENTITY}" | ||
| echo " Waiting for a supporting LOG_* stall fault on ${CONTROLLER_ENTITY} (max 60s)..." | ||
| if poll_until "/${CONTROLLER_ENTITY}/faults" \ | ||
| ".items[] | select(.description | test(\"${CONTROLLER_STALL_MSG}\"))" \ | ||
| 60; then | ||
| pass "supporting LOG_* fault present on ${CONTROLLER_ENTITY} and reports the controller stall" | ||
| else | ||
| fail "supporting LOG_* fault present on ${CONTROLLER_ENTITY}" \ | ||
| "no fault appeared within 60s - either nav2 didn't stall or the log bridge is broken" | ||
| fail "supporting LOG_* fault present on ${CONTROLLER_ENTITY} and reports the controller stall" \ | ||
| "no fault matching '${CONTROLLER_STALL_MSG}' within 60s - either nav2 aborted somewhere other than the controller, or the log bridge is broken" | ||
| fi | ||
|
|
||
| # --------------------------------------------------------------------- | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor, and only about the comment:
obstacle_min_rangeis a range measured at the sensor, but the comment reads as if 0.35 were a distance from the robot ("below the distance at which real obstacles matter to a global plan").The laser sits ~0.268 m ahead of
base_footprint(broken_lidar_node.cpp:47-48), so this floor blinds the global costmap out to ~0.62 m from robot centre in the forward direction, againstrobot_radius: 0.45on the same costmap (:233). That leaves a ~0.17 m band where a real obstacle is outside the footprint and invisible to global planning.Not arguing with the value - global plans are routing, the local costmap has no floor, and it catches that band. Just that one clause saying the number is a sensor range would save the next person doing the arithmetic I just did to check it.
Same place, worth knowing:
phantom_range_mis never set anywhere, only the C++ default atbroken_lidar_node.cpp:53. So the invariant is a default in one package against a literal in another, with the smoke test as the only backstop. Naming the parameter in the comment already helps; raising it past 0.35 in a launch override would silently restore the original flake.