Add fuselage surface sweep Objectives (3-pass working + single-path raster)#663
Conversation
|
Follow-up (non-blocking): coarse fuselage collision mesh causes phantom collisions. Pass 3 of The fuselage's MoveIt collision mesh The standoff bump is fine for this tutorial Objective, but a finer / convex-decomposed fuselage collision mesh in |
There was a problem hiding this comment.
Pull request overview
Adds fuselage surface coverage Objectives for hangar_sim, replacing flat rectangle coverage examples with point-cloud-driven contour sweeps based on the existing surface path planning flow.
Changes:
- Adds a favorite 3-pass fuselage sweep Objective that generates three point-cloud contours, plans, validates, and executes each pass.
- Adds a non-favorite single stitched raster Objective as a documented tuning/reference example.
- Reuses existing hangar_sim Objective discovery, waypoint, perception, and Cartesian planning behaviors.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
src/hangar_sim/objectives/plan_path_along_surface_3_passes.xml |
Adds the working multi-pass fuselage contour sweep Objective. |
src/hangar_sim/objectives/raster_path_along_fuselage.xml |
Adds a documented single-path raster reference Objective with known planning limitations. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Replace the deprecated GenerateCoveragePath Tutorial 4 examples with two point-cloud-driven fuselage coverage Objectives in hangar_sim: - Plan Path Along Surface 3 Passes (the working sweep): generates three stacked surface contours, previews all markers, then plans, validates, and executes a Cartesian path per pass, each chaining from the previous pass's endpoint (pseudo-raster, no return-home). tip_offset standoff is 0.2 m on passes 1-2 and 0.3 m on pass 3 (the coarse low-fuselage collision mesh needs more clearance there). Validated collision-free end-to-end. - Raster Path Along Fuselage: single stitched-path reference, marked runnable=false because the single PlanCartesianPath can hang; header documents the planner-tuning options. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
c93e2ad to
4478587
Compare
marioprats
left a comment
There was a problem hiding this comment.
LGTM, but Dave may want to take a look
|
Thanks! |
Motivation
Tutorial 4 is dropping the flat-rectangle
GenerateCoveragePathexamples (see PickNikRobotics/moveit_pro#19330). This PR adds the replacement: real point-cloud-driven coverage of the airplane fuselage, built up from the workingPlan Path Along SurfaceObjective.Brief description
Two Objectives in
src/hangar_sim/objectives/:plan_path_along_surface_3_passes.xml— the working multi-pass sweep. Reuses the provenPlan Path Along Surfaceflow (crop a thin slab → centroid →GetContourFromPointCloudSlice→PlanCartesianPath→ValidateTrajectory→ExecuteTrajectory) at three stacked heights (z = 1.7, 1.55, 1.4, top-down to stay reachable). All three contour markers are shown up front, then each pass is planned, validated, and executed in turn — each pass chaining from the previous contour's endpoint (a pseudo-raster; no return toLook at Planebetween passes).tip_offsetholds the tool at a fixed standoff from the surface: 0.2 m on passes 1–2, and 0.3 m on pass 3 where the coarse fuselage collision mesh needs a little more clearance (see follow-up comment below). Verified: ran SUCCEEDED end-to-end on hangar_sim with all threeValidateTrajectorychecks enabled.raster_path_along_fuselage.xml— single stitched-path raster (reference, not runnable). Stitches the three contours into one boustrophedon path and plans it with a singlePlanCartesianPath. Kept as a documented reference and markedrunnable="false"because the single plan can hang on hangar_sim (see header comment for tuning options).How it was tested
Run live on a hangar_sim dev backend (
agent_robot.app), driven viaros2 action send_goal /do_objective:Plan Path Along Surface(baseline): SUCCEEDED from a clean robot state.Plan Path Along Surface 3 Passes: SUCCEEDED end-to-end — all three contours planned and executed, each pass chaining from the previous endpoint, with everyValidateTrajectorypassing.Raster Path Along Fuselage(single stitched path): perception + stitching produce the path, but the singlePlanCartesianPathdoes not return in reasonable time (>8 min, vs ~2 s for one contour). Root cause: the whole-bodymanipulatorgroup's base redundancy plus orientation discontinuities at the contour seams. Header comment lists tuning options (arm-only group, coarser path, larger blending radius, per-row execute).Required Git LFS assets had to be pulled for hangar_sim to launch (the wrist cloud and ros2_control IMU interfaces depend on the MuJoCo meshes).
Alternatives considered
PlanCartesianPathover all three stacked contours — does not return in reasonable time in this sim (see above). Kept as a documented, non-runnable reference rather than the primary path.Move to Poseresets between passes — an earlier version moved toward an approach pose between passes. Once the tool orientation and standoff were corrected, the plain per-pass Cartesian chain plans the short inter-pass move fine, so the resets were removed.FindSlicePlanesAlongEdge/AddOverageToPathraster (original approach) — generated paths fine but the wide whole-body Cartesian plan hit wrist-joint limits / did not converge; the centroid-slab contour approach is far more reliable on hangar_sim.Release notes
New Behavior/Library: New
Plan Path Along Surface 3 PassesObjective inhangar_simthat sweeps three stacked contour passes along the airplane fuselage.