Fix: Stop hangar_sim base pirouette by biasing pick IK yaw#736
Draft
griswaldbrooks wants to merge 1 commit into
Draft
Fix: Stop hangar_sim base pirouette by biasing pick IK yaw#736griswaldbrooks wants to merge 1 commit into
griswaldbrooks wants to merge 1 commit into
Conversation
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>
|
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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
[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 theSetupMTCBatchPoseIKcost_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_jointas 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— weightrotational_yaw_joint(10×) in themanipulatorgroup'soptimize_distanceseed-distance cost.objectives/move_boxes_to_loading_zone_from_waypoint.xml— onSetupMTCBatchPoseIK, setcost_joint_names=rotational_yaw_joint,cost_joint_weights=50, andmax_ik_solutions=8so the solution-selection cost has several yaw alternatives per grasp to choose the least-rotation one from.The base-fixed alternative (
arm_onlygroup) 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, androboticist-bot(the config was in scope for all three);roboticist-botconfirmed the weighting is correctly scoped to themanipulatorgroup's single-DOF continuousrotational_yaw_joint.