Skip to content

Repository files navigation

OpenArm Driver

A Python library for controlling OpenArm, using OpenArm CAN.

Quick start

TODO

Install

pip install openarm-driver

Sample usage

import openarm_driver

arm = openarm_driver.SingleArmDriver("right_arm")
# You can also use your own config file as well.
# config = openarm_driver.Config("/path/to/config.yaml")
# arm = openarm_driver.SingleArmDriver("right_arm", config)

try:
    arm.start()
    while True:
        cur_position = arm.fetch_position()
        # Some process to calculate the next steps.
        next_positions = inference(cur_position)
        for next_postion in next_positions:
            arm.smooth_move(next_postion, hz=50, duration=1)
            # you can use simple command as well (Please be careful not to move the arm too much).
            # arm.send_position(next_postion)
finally:
    arm.stop()

Config

Please refer to the default configuration.

The default safety checks run in this order:

  1. JointPosChecker clips commands to joint position limits.
  2. JointDeltaPosChecker rejects excessive single-command jumps.
  3. JointVelocityChecker limits the remaining command using the elapsed time.

joint_velocity_limits is specified in rad/s. send_position() measures the elapsed command time automatically, so callers do not need to provide the node control frequency. Custom configurations may omit this field to disable command velocity limiting.

Development

Test

uv sync
uv run pytest

Release

git clone git@github.com:enactic/openarm_driver.git
cd openarm_driver
dev/release.sh ${VERSION} # e.g. dev/release.sh 1.0.0

Related links

License

Licensed under the Apache License 2.0. See LICENSE.txt for details.

Copyright 2026 Enactic, Inc.

Code of Conduct

All participation in the OpenArm project is governed by our Code of Conduct.

About

High level API to control OpenArm

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages