dora-rs node that classifies whether the current state completes the task successfully or not
Project description
dora-openarm-classifier
dora-rs node that classifies whether the current state completes the task successfully or not.
Install
pip install dora-openarm-classifier
Usage
This package provides two entry points:
dora-openarm-classifier: the dora-rs node.dora-openarm-classifier-server: an optional standalone HTTP server that loads the model once and serves classification requests, so the node itself does not have to hold the model in memory.
For each incoming camera frame the node runs single-frame
TOPReward, keeps a sliding
window of the last --window scores, and reports the window median as
the verdict. When arm positions are provided, SUCCESS is only latched
once the grippers are open (release) and the vision window agrees,
combining vision and proprioception.
Use it in a dora dataflow:
nodes:
- id: classifier
build: pip install dora-openarm-classifier
path: dora-openarm-classifier
env:
QUESTION: "Is the object placed in the box?"
inputs:
image: camera/image
position_right: arm-right/state
position_left: arm-left/state
outputs:
- result
By default the node loads Qwen3-VL locally. To offload inference to the server instead, start the server and point the node at it:
# Terminal 1: start the model server
dora-openarm-classifier-server --port 8000
# Terminal 2 (or via the dataflow): run the node against the server
dora-openarm-classifier --question "..." --server-url http://127.0.0.1:8000
Inputs
| Input | Description |
|---|---|
image |
JPEG bytes (uint8 array) with width/height/encoding metadata. Triggers a classification. |
position |
Optional 16-dim arm state [right(8), left(8)]; gripper joints at indices 7 and 15. |
position_right |
Optional 8-dim right arm state; gripper joint at index 7. |
position_left |
Optional 8-dim left arm state; gripper joint at index 7. |
Positions may be plain arrays or StructArrays with a qpos field.
They are stored and applied to the next incoming image. Without any
position input, the node falls back to a vision-only verdict.
Outputs
| Output | Description |
|---|---|
result |
Float32 window-median score. Metadata carries verdict (SUCCESS/FAIL) and frame (frame counter). |
Command line options
Each option can also be set through the matching environment variable.
| Option | Environment variable | Default | Description |
|---|---|---|---|
--question |
QUESTION |
(required) | Yes/no success question asked about each image. |
--server-url |
SERVER_URL |
(unset; load model locally) | URL of dora-openarm-classifier-server. |
--window |
WINDOW |
5 |
Sliding-window size in frames. |
--threshold |
THRESHOLD |
0.5 |
P_yes threshold for SUCCESS. |
--gripper-threshold |
GRIPPER_THRESHOLD |
0.2 |
|gripper joint| above which a gripper counts as open. |
--classify-hz |
CLASSIFY_HZ |
0.0 |
Max inference rate; frames arriving faster are dropped (0 = no limit). |
The server (dora-openarm-classifier-server) accepts --host
(default 127.0.0.1), --port (default 8000), and --model-id
(default Qwen/Qwen3-VL-4B-Instruct).
License
Licensed under the Apache License 2.0. See LICENSE for details.
Copyright 2026 Enactic, Inc.
Code of Conduct
All participation in the OpenArm project is governed by our Code of Conduct.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file dora_openarm_classifier-0.1.0.tar.gz.
File metadata
- Download URL: dora_openarm_classifier-0.1.0.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
839fb0d81dc0e1a6f7ccd20d1e7498c073ecbd3008e7238811c08c422647a9e2
|
|
| MD5 |
91d8f8886a797b07ff72d202e5829db0
|
|
| BLAKE2b-256 |
7d71095d9e632a292da39d6ee47942efc0a2aa25264ad20e5275e85352389e20
|
Provenance
The following attestation bundles were made for dora_openarm_classifier-0.1.0.tar.gz:
Publisher:
package.yaml on enactic/dora-openarm-classifier
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dora_openarm_classifier-0.1.0.tar.gz -
Subject digest:
839fb0d81dc0e1a6f7ccd20d1e7498c073ecbd3008e7238811c08c422647a9e2 - Sigstore transparency entry: 2084282175
- Sigstore integration time:
-
Permalink:
enactic/dora-openarm-classifier@e47b59655b7c6cb206a57771a988aabbb9b00206 -
Branch / Tag:
refs/tags/0.1.0 - Owner: https://github.com/enactic
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
package.yaml@e47b59655b7c6cb206a57771a988aabbb9b00206 -
Trigger Event:
push
-
Statement type: