Skip to content

Fix: Stop hangar_sim base pirouette by biasing pick IK yaw#736

Draft
griswaldbrooks wants to merge 1 commit into
mainfrom
fix/19973-hangar-pirouette
Draft

Fix: Stop hangar_sim base pirouette by biasing pick IK yaw#736
griswaldbrooks wants to merge 1 commit into
mainfrom
fix/19973-hangar-pirouette

Conversation

@griswaldbrooks

Copy link
Copy Markdown

[written by AI]

Closes PickNikRobotics/moveit_pro#19973.

Depends on PickNikRobotics/moveit_pro#20073 (the core PR that adds the seed_distance_joint_* solver params and the SetupMTCBatchPoseIK cost_joint_* ports this config uses). Merge that first; until its image is available, this branch's CI must run against it (see CI note below).

Problem

When picking in hangar_sim, the UR5e-on-Ridgeback spins its base a full ~360° "pirouette" before a grasp (#19973). The picking planning group includes the omni-base's continuous rotational_yaw_joint as a redundant DOF, and the grasp IK resolves that base heading differently on each consecutive pick, accumulating into a full revolution.

Approach

Use the new opt-in IK yaw weighting (from the core PR) to keep the base heading near its current value during picks, while leaving base translation free so the arm can still reach the boxes:

  • config/moveit/pose_ik_distance.yaml — weight rotational_yaw_joint (10×) in the manipulator group's optimize_distance seed-distance cost.
  • objectives/move_boxes_to_loading_zone_from_waypoint.xml — on SetupMTCBatchPoseIK, set cost_joint_names=rotational_yaw_joint, cost_joint_weights=50, and max_ik_solutions=8 so the solution-selection cost has several yaw alternatives per grasp to choose the least-rotation one from.

The base-fixed alternative (arm_only group) was rejected: it reaches 0 boxes, confirming base mobility is required to pick.

Release notes

Bug Fix: Fixed the mobile base spinning a full revolution before each pick in the hangar simulation; the base now keeps its heading and translates to reach boxes instead of pirouetting.

Manual verification

Reset-controlled harness, 3 runs per condition: full-revolution base spin drops from 2/3 of baseline runs to 0/3, cumulative base-yaw travel roughly halves, and 7 boxes are picked (most of any configuration tested — reachability preserved). Mock hardware only.

CI note

This config exercises ports that only exist in the core PR, so example_ws integration tests must build against that PR's image rather than the base-branch image. The paired-PR CI stacking (needs: token against moveit_pro#20073) is not yet set up — do that before relying on this PR's CI, or merge the core PR first.

Review

Reviewed alongside the core PR by code-reviewer, platform-architect-bot, and roboticist-bot (the config was in scope for all three); roboticist-bot confirmed the weighting is correctly scoped to the manipulator group's single-DOF continuous rotational_yaw_joint.

Use the new opt-in IK yaw weighting to keep the omni-base heading near its
current value during picks instead of drifting a full revolution (issue
#19973): weight rotational_yaw_joint in the pose_ik seed-distance cost, and
in the SetupMTCBatchPoseIK solution-selection cost with max_ik_solutions=8
so the selection has yaw alternatives to choose from. Base translation
stays free, so reachability is preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 50f16de2-9a3a-4a8c-a01f-7ba3c7666ddb

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

@griswaldbrooks griswaldbrooks added this to the 10.0.0 milestone Jun 24, 2026
@github-actions

Copy link
Copy Markdown

MoveIt Pro Example WS - Objectives Integration Test Report

griswaldbrooks added a commit that referenced this pull request Jun 28, 2026
Lift each grasped box ~10 cm (Cartesian, grasp_link -Z) before transiting so it
clears the surface and does not drag along the ground. Tune the pick for speed
and consistency: drop num_orientation_samples 20->8 and max_ik_solutions 16->8
(fewer candidates, the pose IK is the bottleneck), and bias the redundant base
yaw via cost_joint_names/cost_joint_weights so MTC selects the lowest-base-yaw
grasp IK and the omni-base stops pirouetting between picks.

The cost_joint_names/cost_joint_weights ports require the SetupMTCBatchPoseIK
support added in moveit_pro#20073 and the pose_ik seed-distance config from
moveit_pro_example_ws#736; this objective therefore overlaps #736's pirouette
work and is not standalone-mergeable to main until those land.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
griswaldbrooks added a commit that referenced this pull request Jun 28, 2026
Lift each grasped box ~10 cm (Cartesian, grasp_link -Z) before transiting so it
clears the surface and does not drag along the ground. Tune the pick for speed
and consistency: drop num_orientation_samples 20->8 and max_ik_solutions 16->8
(fewer candidates, the pose IK is the bottleneck), and bias the redundant base
yaw via cost_joint_names/cost_joint_weights so MTC selects the lowest-base-yaw
grasp IK and the omni-base stops pirouetting between picks.

The cost_joint_names/cost_joint_weights ports require the SetupMTCBatchPoseIK
support added in moveit_pro#20073 and the pose_ik seed-distance config from
moveit_pro_example_ws#736; this objective therefore overlaps #736's pirouette
work and is not standalone-mergeable to main until those land.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
griswaldbrooks added a commit that referenced this pull request Jun 29, 2026
Lift each grasped box ~10 cm (Cartesian, grasp_link -Z) before transiting so it
clears the surface and does not drag along the ground. Tune the pick for speed
and consistency: drop num_orientation_samples 20->8 and max_ik_solutions 16->8
(fewer candidates, the pose IK is the bottleneck), and bias the redundant base
yaw via cost_joint_names/cost_joint_weights so MTC selects the lowest-base-yaw
grasp IK and the omni-base stops pirouetting between picks.

The cost_joint_names/cost_joint_weights ports require the SetupMTCBatchPoseIK
support added in moveit_pro#20073 and the pose_ik seed-distance config from
moveit_pro_example_ws#736; this objective therefore overlaps #736's pirouette
work and is not standalone-mergeable to main until those land.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant