Skip to content

fix: franka hardware testing#309

Open
juelg wants to merge 45 commits into
masterfrom
juelg/hardware-fixes
Open

fix: franka hardware testing#309
juelg wants to merge 45 commits into
masterfrom
juelg/hardware-fixes

Conversation

@juelg

@juelg juelg commented May 12, 2026

Copy link
Copy Markdown
Contributor

No description provided.

juelg and others added 30 commits May 5, 2026 10:23
Co-authored-by: Copilot <copilot@github.com>
@juelg juelg force-pushed the juelg/hardware-fixes branch from 0a990fe to 0aa68c9 Compare May 20, 2026 05:57
@juelg juelg force-pushed the juelg/hardware-fixes branch from 65ae747 to 600b257 Compare June 27, 2026 07:03
juelg added 5 commits June 27, 2026 00:37
Wire up the previously-undefined `scene`/`ROBOT_INSTANCE` names in the
example scripts, drop unused imports, move the typer.Option default and
the unnecessary else-after-return into ruff-compliant form, and add
rule-specific noqa comments for the function-scoped torch/torchvision
imports in the LeRobot joint converter.
Exclude examples/inference/franka.py from mypy to resolve a duplicate
"franka" module clash with examples/teleop/franka.py (whose franka.py
is the one example/teleop/quest_align_frame.py actually imports from).

Make LimitedAbsoluteAction._get_current()'s return annotation honest
(np.ndarray | common.Pose) since it returns a Pose in cartesian control
modes, and add a cast at the one call site that lacked one. Add
rule-specific type: ignore / noqa comments for the remaining cases
where the underlying stubs don't match runtime behavior (FR3-only
robot methods, duckdb's loosely-typed schema introspection, Optional
fields that are known to be set, and the lerobot torch imports).
StorageWrapper._flush() inferred and permanently cached its pyarrow
schema from whatever rows happened to be in the first flush. Since
"action" is logged one step behind (frame 0 has no prior action), an
unlucky first batch consisting only of that null action got pyarrow's
null type pinned for the field forever, so every later batch with a
real action value failed with "Invalid null value". Defer flushing
until the buffered rows yield a schema with no null-typed fields
instead of caching a too-eager guess.

Separately, close() called _flush() and only sent the writer thread's
stop sentinel afterwards, so any exception during that flush (such as
the one above) left the background ThreadPoolExecutor thread blocked
on an empty queue forever, hanging the whole process at interpreter
exit. Wrap the flush in try/finally so the sentinel is always sent.

Also add the include_rotation field quest.py now reads to the
QuestOperator test config double, which test_consume_action_swaps_
gripper_with_controller was missing.
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.

1 participant