Skip to content

enactic/dora-openarm

Repository files navigation

dora-openarm

A Dora node that controls OpenArm.

Usage

Use this node from a dora-rs dataflow configuration. For a full configuration example, see enactic/dora-openarm-data-collection.

nodes:
  # ...
  - id: follower-right
    build: pip install dora-openarm
    path: dora-openarm
    args: "--side right --align-trigger gripper"
    inputs:
      # Only the event ID is used. The event value is ignored.
      request_position: leader/right_follower_position
      move_position: leader/right_follower_position
    outputs:
      - position
      - status

  - id: follower-left
    build: pip install dora-openarm
    path: dora-openarm
    args: "--side left --align-trigger gripper"
    inputs:
      # Only the event ID is used. The event value is ignored.
      request_position: leader/left_follower_position
      move_position: leader/left_follower_position
    outputs:
      - position
      - status
  # ...

Node arguments

Argument Description
--side OpenArm side to control. Default: right.
--config Path to the OpenArm configuration file. Default: openarm_cell.yaml.
--align-trigger Optional trigger for the initial alignment step. Supported value: gripper.
--align-threshold Alignment threshold in radians. Default: 0.1.
--align-delta-limit Maximum joint delta per initial-alignment command in radians. Default: 0.001.
--[no-]align Whether to align to incoming position commands after the arm starts. Default: enabled.
--[no-]stop Whether to stop the arm when the node exits. Default: controlled by the STOP environment variable, or true when it is unset.
--[no-]refresh-every-request Whether to refresh OpenArm state before each request. Default: controlled by the REFRESH environment variable, or true when it is unset.

Inputs

Input Description
request_position Requests the current arm position. The event ID is used and the event value is ignored.
request_state Requests the current arm state. The event ID is used and the event value is ignored.
move_position Sends a new target position to the arm. The value may be a struct containing qpos ([{"qpos": [...]}]), a position array directly, or a legacy struct containing new_position. When initial alignment is enabled, this input drives the alignment until it completes.

Outputs

Output Description
position Current arm position as a length-1 struct containing a float32 array: [{"qpos": [...]}].
state Current arm state as a length-1 struct with list fields: [{"qpos": [...], "qvel": [...], "qtorque": [...], "tmos": [...], "trotor": [...]}]. qpos, qvel, and qtorque are float32 lists; tmos (MOS temperature) and trotor (rotor temperature) are int32 lists per motor, in °C.
status Current control state as a string array: stopped, started, or aligned. With alignment enabled, aligned is emitted once initial alignment completes.

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.

About

dora-rs node to control OpenArm

Resources

Code of conduct

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages