Fix: Validate hangar_sim surface path against the aircraft and abort stuck goals#775
Fix: Validate hangar_sim surface path against the aircraft and abort stuck goals#775griswaldbrooks wants to merge 1 commit into
Conversation
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
|
|
@griswaldbrooks this flake was blocking me, so I implemented a minimal change in #776, which keeps the Objective as-is, and also keeps the path very similar to what it is today, just a bit shorter to avoid the wraparound at the edge of the perceived point cloud |
|
[written by AI] Superseded by #776, which fixed the wrap-around contour tail (the actual collision) with a one-line span trim. The hardening pieces here (ValidateTrajectory in the single-pass objective, goal_time 20.0, SRDF airplane-exemption cleanup) are documented in moveit_pro#20427 if the failure class ever resurfaces. |
[written by AI]
Fixes the
Plan Path Along SurfaceCI hang tracked in PickNikRobotics/moveit_pro#20427 (~70% of hangar_sim integration runs).Problem
The objective plans a whole-body (arm + mecanum base) Cartesian path along the perceived fuselage contour with no trajectory validation, and the untuned contour window routes the path's tail into the aircraft. The aircraft's 13 convex collision meshes have always existed as URDF links fixed to
world, but auto-generated SRDFdisable_collisionsentries (from the originalAdd hangar_simcommit) exempted the tail pieces from checking against every robot link — andconstraints.goal_time: 0.0makes the upstream JTC's goal-tolerance abort branch unreachable, so when MuJoCo contact stops the base short of the commanded terminal, the controller waits forever. The test fixture reports that silent hang as "did not return within 90.0s", and the abandoned goal pollutes the next test (rosbag forensics, phase timelines, and live reproduction on the moveit_pro issue).Approach
Three minimal changes, each independently defensible:
plan_path_along_surface.xml: retune the path so it is actually feasible —tip_offset0.1→0.2 and contour crop window (start 2.4, span 2.25) so the arc clears the wing box and the coarse nose hull — and addGetCurrentPlanningScene+ValidateTrajectorybeforeExecuteTrajectory(the exact patternplan_path_along_surface_3_passes.xmlandcartesian_path_with_collision_checking.xmlalready use). The bare abort on validation failure (noWaitForMTCSolutionApprovalfallback) is deliberate: in headless CI an approval prompt blocks forever, and the intent of this fix is a fast, diagnosable failure.picknik_ur.srdf: remove the 86 auto-generateddisable_collisionsentries betweencollision_Plane*and robot links. They made collision checking blind to the aircraft's tail pieces for every group and objective. The re-enabled pieces sit at y≈29–33, far outside any current objective's workspace, so nothing legitimate is newly rejected (verified: the stricter validation still passes3 Passes).picknik_ur.ros2_control.yaml:constraints.goal_time0.0→20.0, converting any future terminal non-convergence into aGOAL_TOLERANCE_VIOLATEDabort that names the offending joint instead of an unbounded silent hang. Worst-case surface-path abort lands ~T+84s, inside the CI fixture's 90s cap.Validation (live, main-based stack, moveit_pro overlay @ post-#20258 main)
ValidateTrajectory Error: Trajectory collides at 82.7% feasible. Colliding objects: collision_Plane_009 - collision_vacuum_suction_cups— proving validation now covers the aircraft via its URDF links, no scene setup needed.Plan Path Along Surface 3 Passes: SUCCEEDED under the stricter SRDF (goal_time + SRDF regression probe).Follow-ups (not in this PR)
src/docs/docs/tutorials/motion_planning.mdxneeds its single-pass Behavior list updated to mention validation, and the 3-passes "extends" bullet reworded (validation is no longer unique to it).objective_test_fixture.py(moveit_pro): cancel the objective on timeout so an abandoned goal can't pollute subsequent tests.Claude agent checks