Conversation
PickObjectCfg/PlaceObjectCfg previously reported success from end-effector pose thresholds and gripper-hold duration alone, never checking whether the object was actually grasped or released. Adds an opt-in VerifyContactCfg primitive that checks a rigid object's physics-derived is_in_contact state (from an IsInContactPhysicsCfg semantic), wired in via new verify_grasp (PickObjectCfg) and verify_release + held_object (PlaceObjectCfg) fields. Both default to False/None, so existing workflows are unaffected. Verified live: booted Isaac Sim against Matterix-Test-Beaker-Lift-Franka-v1 with a beaker contact sensor filtered on the Franka gripper fingers (panda_leftfinger/panda_rightfinger, cross-checked against isaaclab_tasks' own stack manipulation config for the same USD asset), ran a full pick-and-place episode through StateMachine with verify_grasp=True and verify_release=True -- both VerifyContact steps succeeded against real ContactSensor force data. Also ran pre-commit (black/isort/codespell/license header clean) and flake8+pyupgrade pinned to the versions in .pre-commit-config.yaml under Python 3.11 (clean; pyupgrade auto-fixed one redundant quoted forward-reference). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Thank you for adding opt-in grasp/release verification. The direction is useful, and keeping it disabled by default preserves the existing workflow behavior. However, I reproduced a multi-environment failure and found a gap in the contact contract, so I am requesting changes before merge. What I reviewed and tested
I have not independently run the Isaac pick-and-place scenario reported in the description. The findings below distinguish the reproduced CPU failure from risks identified by source inspection. Findings1. Standard contact observations crash verification with multiple environments.
In Results using the standard observation shape:
The two-environment error is: A minimal reproduction from the PR checkout is: PYTHONPATH=source/matterix_sm python - <<'PY'
import torch
from matterix_sm import StateMachine, VerifyContactCfg
sm = StateMachine(num_envs=2, dt=0.05, device="cpu")
sm.set_action_sequence([VerifyContactCfg(object="beaker")])
sm.reset()
sm.step({
"rigid_objects": {
"beaker__is_in_contact": torch.ones((2, 1), dtype=torch.bool)
}
})
PYThe other two passing contract cases checked settling/interruption and partial reset with flat 2. Generic contact is not sufficient to establish gripper grasp/release. The new verification reads only the object's generic The existing heat-transfer task provides a concrete example: its beaker contact predicate is filtered against These are configuration risks established by source inspection; I have not reproduced those physical scenarios in Isaac during this review. The reported successful run with finger-only filters does not establish correct behavior for other accepted configurations. The documentation also states that the object actually moved with the gripper. A boolean contact check alone does not measure that motion. Required before merge
The reproduced tensor-shape failure and the grasp/release contact contract should be resolved before approval. The opt-in design is reasonable, but the current implementation is not yet ready to merge. |
Description
PickObjectCfg/PlaceObjectCfgreported success from end-effector pose thresholds and gripper-hold duration alone, never checking whether the object was actually grasped or released. This fix adds an opt-inVerifyContactCfgprimitive that checks a rigid object's physics-derivedis_in_contactstate (from anIsInContactPhysicsCfgsemantic), wired in via newverify_grasp(PickObjectCfg) andverify_release+held_object(PlaceObjectCfg) fields. Both default to off, so existing workflows are unaffected.Verified live: ran a full pick-and-place episode in Isaac Sim (
Matterix-Test-Beaker-Lift-Franka-v1) with a contact sensor on the beaker filtered against the gripper fingers,verify_grasp=Trueandverify_release=True. BothVerifyContactsteps succeeded against realContactSensorforce data.Type of change
Checklist
pre-commitchecks with<FULL_PATH_TO_ISAACLAB>/isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there