feat(experement): simulate tightening and smooth tool transfers

Add a torque-tool tightening simulation for experiments 14-20: the tool approaches each empty hole, twists 60 degrees (reversing at the wrist limit), returns and retracts while the screw stays handed off. Lift attached tools vertically clear of the magazine before lateral motion, prefer the close 'work' pose between operations, and reconfigure through home only when planning fails. Settle measured joint positions before verifying joint moves.
This commit is contained in:
Даниил Грабарь
2026-11-08 21:46:01 +10:00
parent d0a9656bd2
commit a6c6474db9
14 changed files with 371 additions and 93 deletions
@@ -63,8 +63,27 @@ def test_sealant_experiments_use_only_the_sealant_tool():
def test_full_assembly_tool_order_is_sealant_cap_screws():
for experiment_id in range(16, 21):
takes = [step.args[0] for step in route(experiment_id) if step.kind == 'take_tool']
assert takes == ['sealant_tool', 'vacuum', 'magnetic_tool']
assert 'torque_tool' not in takes
assert takes == ['sealant_tool', 'vacuum', 'magnetic_tool', 'torque_tool']
def test_tightening_simulation_matches_the_delivered_holes():
assert not any(
step.kind == 'tighten_hole' for step in route(11)
)
for experiment_id in range(14, 21):
tighten = [
step for step in route(experiment_id) if step.kind == 'tighten_hole'
]
handoffs = [
step for step in route(experiment_id) if step.kind == 'handoff_screw'
]
assert [step.args[0] for step in tighten] == [
step.args[1] for step in handoffs
]
for experiment_id in (12, 13):
assert not any(
step.kind == 'tighten_hole' for step in route(experiment_id)
)
def test_screw_counts_and_holes_match_the_contract():