fix(experement): honest collision poses, mandatory lifts, rest-to-rest waits; 20/20 verified

- forbid the transport pose; recovery reconfigures through work only
- mandatory axial lift after every contact (handoff, tighten, dock, pick)
- untwist the flange after simulated tightening so joint 7 never winds up
- attach carried tool/cap/screw to the MoveIt scene; explicit REMOVE diffs
- add_world receives box-centre poses (placed_cap_pose, restore_world)
- table top lowered below the base_link collision mesh bottom (1 mm gap bug)
- 1 mm clearances for cap/screw boxes; thinner cap world box (cup clearance)
- wait for a stationary arm before every planning attempt (rest-to-rest)
- loosen stopped_velocity_tolerance to 0.08 for reference launches only
- retry a rejected named move once after settling (startup telemetry race)
- adapter logs the exact reason and max joint velocity on start-state rejects
- verified: all 20 experiments completed in Webots execute mode (10.11.2026)
This commit is contained in:
Даниил Грабарь
2026-11-10 15:11:06 +10:00
parent 6bd288dcaf
commit b26edc3cfc
15 changed files with 824 additions and 60 deletions
+9 -1
View File
@@ -50,6 +50,7 @@ class FakeBridge:
self.attached = []
self.detached = []
self.removed = []
self.restored = []
def attach(self, spec):
self.attached.append(spec.object_id)
@@ -62,7 +63,14 @@ class FakeBridge:
if object_id in self.attached:
self.attached.remove(object_id)
def restore_world(self, object_id):
if object_id in self.attached:
self.attached.remove(object_id)
self.restored.append(object_id)
def add_world(self, object_id, box, pose):
if object_id in self.attached:
self.attached.remove(object_id)
self.added_world = getattr(self, 'added_world', [])
self.added_world.append((object_id, pose))
@@ -157,7 +165,7 @@ def test_dock_tool_returns_the_tool_to_its_socket():
result = operations.dock_tool('vacuum')
assert result.success
assert supervisor.commands[0][:2] == ('dock_tool', 'vacuum')
assert bridge.added_world[0][0] == 'grant_vacuum'
assert bridge.restored == ['grant_vacuum']
assert labels(motion)[-1] == 'dock_tool(vacuum):exit'