Skip to content

Decide a repeated goal at once instead of waiting out object_status_timeout - #104

Draft
ebarnett3 wants to merge 1 commit into
mainfrom
issue-102/repeat-goal-verdict
Draft

ebarnett3 wants to merge 1 commit into
mainfrom
issue-102/repeat-goal-verdict

Conversation

@ebarnett3

@ebarnett3 ebarnett3 commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #102.

With use_object_status on, re-sending the goal the gripper just stopped short of, typically a second close on a held object, waited out object_status_timeout (10 s) and aborted with both flags false. The gripper does not act on a target it already settled on, so object_detection never changes from the previous verdict, and the verdict rule waits for exactly that change.

Verdict now remembers the goal it just decided: its target, the reading that decided it, and the outcome. The next goal gets that outcome on its first cycle when its target is the same and its reading at acceptance is still that one. Anything else keeps the current rule: a different target, a changed reading, a goal accepted in between (it may already have moved the fingers), a goal that timed out, or the first goal after a deactivation. Effort and velocity are ignored, since the bench on #102 showed the firmware does not re-act on them alone. Targets are compared exactly, so two targets that round to the same register count still wait out the timeout, as before.

Verified with Verdict unit tests for the carry-over and each guard, and a repeated goal through both controllers, each failing with the carry-over disabled. Built and tested on Jazzy, and in ros:humble and ros:lyrical containers. Bench, 2F-85 on Jazzy, closing 0.8 on an object four times: the first goal stalled 0.55 s after acceptance, each repeat stalled 0.05 s after acceptance (one action-monitor period) with object_detection staying 2; before, each repeat aborted after 10 s. Free open/close repeats are unchanged.

🤖 Generated with Claude Code

- Verdict remembers the goal it just decided: target, deciding reading, outcome
- the next goal, with the same target and that reading at acceptance, gets the outcome on its first cycle
- a goal accepted in between, a timeout or a deactivation clears the memory
- compat::goalPosition reads the target from GripperCommand and ParallelGripperCommand goals
- test the carry-over and its guards in Verdict, and a repeated goal through both controllers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ebarnett3
ebarnett3 marked this pull request as draft September 30, 2026 05:24
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.

Re-sending a goal the gripper already stopped short of waits out object_status_timeout

1 participant