Add persistent collision objects for placed boxes in hangar_sim ML picking#727
Add persistent collision objects for placed boxes in hangar_sim ML picking#727davetcoleman 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 |
8fc8a9a to
0bae7b7
Compare
|
|
Picks add each box to the planning scene under a unique id (placed_box_N) and detach it into the world on release, so the whole-body base+arm planner avoids every already-placed box on later picks instead of driving over them (#19973). ResetPlanningSceneObjects at objective start clears boxes left by a previous run, and a placed_count counter ported across perception passes keeps the ids unique. Also reframes the scene camera, widens the suction-cup collision margin, and clears stale grasp markers each pick. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0bae7b7 to
0484a62
Compare
|
|
[written by AI] Superseded by #746, which lands the same placed-box collision-object persistence (unique |
[written by AI]
Problem
In the ML Move Boxes to Loading Zone hangar_sim workflow, the mobile base drives over boxes it has already placed in the loading zone (#19973, "drive over other boxes"). The base transit (
Move to Pose No Preview) plans on the whole-bodymanipulatorgroup — which includes the planar base jointslinear_x_joint/linear_y_joint/rotational_yaw_joint— so it does collision-check the MoveIt planning scene, but nothing in the scene represents the placed boxes: the SRDF disablesbase_link_inertia/chassis↔collision_Cube_*pairs, and the only transit obstacle is the wrist-camera octomap captured at the pick station.Approach
Make every placed box a persistent world collision object so the base plans around it on later picks.
Per box, in
move_boxes_to_loading_zone_from_waypoint.xml:placed_box_N,AddCollisionMeshit at the box's ICP-refined pose, andAttachObjecttograsp_link(so the carried box is also avoided).DetachObjectleaves it in the world at its placed pose, then a counter increments.In the parent
ml_move_boxes_to_loading_zone.xml:ResetPlanningSceneObjectsat objective start clearsplaced_box_*left by a previous run (they persist until removed, so stale boxes would otherwise block planning at old poses). This runs before perception and does not touch the octomap or static scene.placed_count := 0initializes the counter, which is ported into both perception passes (placed_count="{placed_count}") and declared as aninout_porton the subtree — the same cross-pass remapplace_posealready uses.Why unique ids: this supersedes the earlier revision on this branch, which used a single shared id (
grasped_box) withoverwrite=true. That only ever kept the most-recently-placed box in the scene — carry-time avoidance worked, but the base still drove over every previously-placed box. A monotonic per-box id is the minimal change that keeps them all.Scope
Fixes the already-placed boxes symptom of #19973. It does not yet make not-yet-picked boxes (still at the pick station) obstacles — that would be the same pattern applied to all detected boxes after perception, and is a separate follow-up.
Also carries the earlier non-collision tuning from this branch: scene-camera reframe, suction-cup collision margin widen, and clearing stale grasp markers each pick.
Verification
Run live against the hangar backend:
placed_box_0/1/2accumulated and persisted across picks, whole-body planning kept succeeding around them, and the objective-server log showed zero errors from the new behaviors.Release notes
None.