Context
The TSR-based move_above (PR #29) freezes the articutool's joints at planning time — T_ee_to_fork_tip is captured once into the TSR's Tw_e, and only the 6 arm joints are in the planning DOFs.
That means the planner can't compensate for a bad tilt by curling the articutool. The articutool tilt is an input that the caller picks (via tilt_fork(schema.tilt_angle) in task.py); planning either succeeds for that tilt or fails outright with PLANNING_FAILED: no_path / AllGoalConfigurationsInvalid.
Observed sensitivity
strawberry_0 at world (0.113, −0.480, 0.774), JACO2_RESTING start:
| articutool tilt |
EE-to-tip distance |
TSR sample IK success |
plan_to_tsrs |
| 0 (default) |
0.42 m |
0 / 100 |
fails (100 IK unreachable) |
−π/4 (straight_skewer) |
0.38 m |
~4 / 10 |
succeeds |
The straight_skewer tilt was tuned to be feasible. A neighborhood around it is fine. Outside that, planning silently fails.
What we don't currently handle
- Foods near the arm's reach boundary. Even at the schema's tilt, food positions at the far edge of the plate may have no reachable TSR.
- Schema/tilt mismatches. A new schema with a different tilt (say
+π/3 for a funky food shape) may not be reachable for the chosen food, and the failure mode is silent.
- Per-attempt re-tilt. No mechanism right now for "if this tilt didn't work, try another."
Possible directions
- Better diagnostics on failure — when
plan_to_tsrs fails, sample a few EE goals from the TSR and report which arm-IK constraint they violated (limits, reach, self-collision). Cheap, helps debugging, doesn't change the design.
- Articutool tilt as a planning DOF — add the 2 articutool joints to the IK / TSR machinery so the optimizer picks arm + tilt jointly. Most general fix, but loses the deterministic "skewer angle = schema.tilt_angle" semantic, and requires changes in
ForkTSR, the IK solver, and plan_to_tsrs.
- Re-plan loop in
move_above — try the schema tilt first; if planning fails, sweep nearby tilts and re-plan. Cheap, keeps the schema-as-input contract, but adds latency on failures.
My lean: start with (1) — it's small and helps everywhere — and only invest in (2) or (3) if real failures show up.
Related
Context
The TSR-based
move_above(PR #29) freezes the articutool's joints at planning time —T_ee_to_fork_tipis captured once into the TSR'sTw_e, and only the 6 arm joints are in the planning DOFs.That means the planner can't compensate for a bad tilt by curling the articutool. The articutool tilt is an input that the caller picks (via
tilt_fork(schema.tilt_angle)intask.py); planning either succeeds for that tilt or fails outright withPLANNING_FAILED: no_path/AllGoalConfigurationsInvalid.Observed sensitivity
strawberry_0at world(0.113, −0.480, 0.774),JACO2_RESTINGstart:plan_to_tsrsstraight_skewer)The
straight_skewertilt was tuned to be feasible. A neighborhood around it is fine. Outside that, planning silently fails.What we don't currently handle
+π/3for a funky food shape) may not be reachable for the chosen food, and the failure mode is silent.Possible directions
plan_to_tsrsfails, sample a few EE goals from the TSR and report which arm-IK constraint they violated (limits, reach, self-collision). Cheap, helps debugging, doesn't change the design.ForkTSR, the IK solver, andplan_to_tsrs.move_above— try the schema tilt first; if planning fails, sweep nearby tilts and re-plan. Cheap, keeps the schema-as-input contract, but adds latency on failures.My lean: start with (1) — it's small and helps everywhere — and only invest in (2) or (3) if real failures show up.
Related
tilt_forkdoesn't settle in physics) — that one breaks even the happy path.