Skip to content

feat: migrate world sync and add plan_to_joint_config from collide-align#9

Merged
EverNorif merged 13 commits intoLightwheelAI:mainfrom
Papaercold:feature/collide-align-migration
Apr 14, 2026
Merged

feat: migrate world sync and add plan_to_joint_config from collide-align#9
EverNorif merged 13 commits intoLightwheelAI:mainfrom
Papaercold:feature/collide-align-migration

Conversation

@Papaercold
Copy link
Copy Markdown
Contributor

Migrate and Refactor lwautosim Repository

Comment thread source/autosim/autosim/capabilities/motion_planning/curobo/curobo_planner.py Outdated
Comment thread source/autosim/autosim/capabilities/motion_planning/curobo/curobo_planner.py Outdated
Comment thread source/autosim/autosim/capabilities/motion_planning/curobo/curobo_planner.py Outdated
Comment thread source/autosim/autosim/decomposers/llm_decomposer/llm_decomposer.py Outdated
Comment thread source/autosim/autosim/skills/reach.py
Comment thread source/autosim/autosim/capabilities/motion_planning/curobo/curobo_planner.py Outdated
Physics simulation causes joints to drift slightly outside yaml-defined
limits after contact forces or complex motions. cuRobo rejects planning
with INVALID_START_STATE_JOINT_LIMITS in these cases. Clamp current_q
to [q_lo, q_hi] before passing to plan_single as a numerical safeguard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@Papaercold Papaercold force-pushed the feature/collide-align-migration branch from 6dddde8 to c0f9b9d Compare April 8, 2026 03:02
@Papaercold
Copy link
Copy Markdown
Contributor Author

Reach Skill: Extra EE Target Support — Debug & Verification Report

1. Changes

types.py — new field in EnvExtraInfo

object_extra_reach_target_poses: dict[str, dict[str, list[torch.Tensor]]] = field(default_factory=dict)

Structure: object_name → ee_link_name → list of poses [x, y, z, qw, qx, qy, qz] in object frame.
Added matching iterator machinery (_reset_extra_target_pose_iterators, get_next_extra_reach_target_pose).

reach.py — extra EE constraint now actually works

Before: object_extra_reach_target_poses was never read. _build_extra_target_poses only
handled cfg-driven passive modes (keep_current, keep_relative_offset, etc.).

After: Goal computation extracted into _compute_goal_from_offset. When extra_offsets
is populated from EnvExtraInfo.object_extra_reach_target_poses, each pose is transformed
object frame → world frame → robot root frame and passed to cuRobo as link_goals.
Takes priority over cfg-driven modes.

Other fixes in the same refactor:

  • Removed duplicate target_pose assignment (dead variable)
  • _compute_corrective_goal reuses _compute_goal_from_offset (no duplication)
  • Added joint name guard in step() for robots with virtual base joints not in sim
  • Removed verbose INFO logs

2. Usage

return EnvExtraInfo(
    object_reach_target_poses={
        "target_object": [torch.tensor([x, y, z, qw, qx, qy, qz])],  # primary EE, object frame
    },
    object_extra_reach_target_poses={
        "target_object": {
            "left_hand_link": [torch.tensor([x, y, z, qw, qx, qy, qz])],  # secondary EE, object frame
        }
    },
)

Poses in object frame are automatically transformed to robot root frame at planning time.
Secondary EE targets are soft constraints in cuRobo — satisfaction is not guaranteed if kinematically infeasible.


3. Verification

Tested on LW-BenchHub:

Pipeline Result
CoffeeSetupMugPipeline-v0
CheesyBreadPipeline-v0
KettleBoilingPipeline-v0
OpenFridgePipeline-v0
python run_autosim.py --pipeline_id <PIPELINE_ID> --enable_cameras

@Papaercold Papaercold force-pushed the feature/collide-align-migration branch from 4d4a6fa to 7899ae5 Compare April 13, 2026 15:57
@EverNorif EverNorif merged commit 7f9c76b into LightwheelAI:main Apr 14, 2026
1 check passed
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.

2 participants