A Python library for controlling OpenArm, using OpenArm CAN.
TODO
pip install openarm-driverimport 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()Please refer to the default configuration.
The default safety checks run in this order:
JointPosCheckerclips commands to joint position limits.JointDeltaPosCheckerrejects excessive single-command jumps.JointVelocityCheckerlimits 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.
uv sync
uv run pytestgit clone git@github.com:enactic/openarm_driver.git
cd openarm_driver
dev/release.sh ${VERSION} # e.g. dev/release.sh 1.0.0- 📚 Read the documentation
- 💬 Join the community on Discord
- 📬 Contact us through openarm@enactic.ai
Licensed under the Apache License 2.0. See LICENSE.txt for details.
Copyright 2026 Enactic, Inc.
All participation in the OpenArm project is governed by our Code of Conduct.