Go to file
shen c059e08e9b
Some checks failed
Package / Source (push) Has been cancelled
Test / Lint (push) Has been cancelled
Test / Build (ubuntu-22.04) (push) Has been cancelled
Test / Build (ubuntu-24.04) (push) Has been cancelled
Package / Build (ubuntu-jammy-amd64) (push) Has been cancelled
Package / Build (ubuntu-jammy-arm64) (push) Has been cancelled
Package / Build (ubuntu-noble-amd64) (push) Has been cancelled
Package / Build (ubuntu-noble-arm64) (push) Has been cancelled
增加腰关节
2026-03-26 14:30:43 +08:00
.github Bump actions/upload-artifact from 4 to 5 (#63) 2025-10-28 08:11:43 +09:00
dev readme: use package (#53) 2025-10-10 18:22:12 +09:00
examples 增加腰关节 2026-03-26 14:30:43 +08:00
include/openarm 增加腰关节 2026-03-26 14:30:43 +08:00
packages Add installation of executables (#59) 2025-10-16 15:24:17 +09:00
python Update version info to 1.0.0 (2025-10-10) 2025-10-10 15:49:53 +09:00
setup 增加腰关节 2026-03-26 14:30:43 +08:00
src/openarm 增加腰关节 2026-03-26 14:30:43 +08:00
.clang-format Import 2025-07-22 15:15:21 +09:00
.cmake-format.py Import 2025-07-22 15:15:21 +09:00
.editorconfig Add shell linter and formatter (#4) 2025-07-22 17:28:32 +09:00
.gitignore Add support for .deb packages for ubuntu-noble-amd64 (#32) 2025-09-26 14:56:28 +09:00
.packit.yaml Create Fedora RPM packages (#31) 2025-10-01 10:26:23 +09:00
.pre-commit-config.yaml Add shell linter and formatter (#4) 2025-07-22 17:28:32 +09:00
CMakeLists.txt 增加腰关节 2026-03-26 14:30:43 +08:00
CODE_OF_CONDUCT.md Import 2025-07-22 15:15:21 +09:00
CONTRIBUTING.md Import 2025-07-22 15:15:21 +09:00
helper.rb Make release process more robust (#51) 2025-10-10 16:23:00 +09:00
LICENSE.txt Import 2025-07-22 15:15:21 +09:00
openarm-can.pc.in Import 2025-07-22 15:15:21 +09:00
OpenArmCANConfig.cmake.in Import 2025-07-22 15:15:21 +09:00
Rakefile Make release process more robust (#51) 2025-10-10 16:23:00 +09:00
README.md readme: Fedora and EPEL RPM package installation instructions (#57) 2025-10-23 10:06:12 +09:00

OpenArm CAN Library

A C++ library for CAN communication with OpenArm robotic hardware, supporting Damiao motors over CAN/CAN-FD interfaces. This library is a part of OpenArm. See detailed setup guide and docs here.

Quick Start

Prerequisites

  • Linux with SocketCAN support
  • CAN interface hardware

1. Install

Ubuntu

  • 22.04 Jammy Jellyfish
  • 24.04 Noble Numbat
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:openarm/main
sudo apt update
sudo apt install -y \
  libopenarm-can-dev \
  openarm-can-utils

AlmaLinux, CentOS, Fedora, RHEL, and Rocky Linux

  1. Enable EPEL. (Not required for Fedora)
    • AlmaLinux 8 / Rocky Linux 8
      sudo dnf install -y epel-release
      sudo dnf config-manager --set-enabled powertools
      
    • AlmaLinux 9 & 10 / Rocky Linux 9 & 10
      sudo dnf install -y epel-release
      sudo crb enable
      
    • CentOS Stream 9
      sudo dnf config-manager --set-enabled crb
      sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel{,-next}-release-latest-9.noarch.rpm
      
    • CentOS Stream 10
      sudo dnf config-manager --set-enabled crb
      sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm
      
    • RHEL 8 & 9 & 10
      releasever="$(. /etc/os-release && echo $VERSION_ID | grep -oE '^[0-9]+')"
      sudo subscription-manager repos --enable codeready-builder-for-rhel-$releasever-$(arch)-rpms
      sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$releasever.noarch.rpm
      
  2. Install the package.
    sudo dnf update
    sudo dnf install -y \
      openarm-can-devel \
      openarm-can-utils
    

2. Setup CAN Interface

Configure your CAN interface using the provided script:

# CAN 2.0 (default)
/usr/libexec/openarm-can/configure_socketcan.sh can0

# CAN-FD with 5Mbps data rate
/usr/libexec/openarm-can/configure_socketcan.sh can0 -fd

3. C++ Library

#include <openarm/can/socket/openarm.hpp>
#include <openarm/damiao_motor/dm_motor_constants.hpp>

openarm::can::socket::OpenArm arm("can0", true);  // CAN-FD enabled
std::vector<openarm::damiao_motor::MotorType> motor_types = {
    openarm::damiao_motor::MotorType::DM4310, openarm::damiao_motor::MotorType::DM4310};
std::vector<uint32_t> send_can_ids = {0x01, 0x02};
std::vector<uint32_t> recv_can_ids = {0x11, 0x12};

openarm.init_arm_motors(motor_types, send_can_ids, recv_can_ids);
openarm.enable_all();

See dev/README.md for how to build.

4. Python (🚧 EXPERIMENTAL - TEMPORARY 🚧)

⚠️ WARNING: UNSTABLE API ⚠️ Python bindings are currently a direct low level temporary port, and will change DRASTICALLY. The interface is may break between versions.Use at your own risk! Discussions on the interface are welcomed.

Build & Install:

Please ensure that you install the C++ library first, as 1. Install or dev/README.md.

cd python

# Create and activate virtual environment (recommended)
python -m venv venv
source venv/bin/activate

./build.sh

Usage:

# WARNING: This API is unstable and will change!
import openarm_can as oa

arm = oa.OpenArm("can0", True)  # CAN-FD enabled
arm.init_arm_motors([oa.MotorType.DM4310], [0x01], [0x11])
arm.enable_all()

Examples

  • C++: examples/demo.cpp - Complete arm control demo
  • Python: python/examples/example.py - Basic Python usage

For developers

See dev/README.md.

License

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

Copyright 2025 Enactic, Inc.

Code of Conduct

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