Skip to content

About

OpenArm CAN control library

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

 
 

Repository files navigation

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
  • 26.04 Resolute Raccoon
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)
openarm-can-configure-socketcan can0

# CAN-FD with 5Mbps data rate
openarm-can-configure-socketcan can0 -fd

3. CLI Tool

openarm-can-cli provides a command-line interface for motor configuration and diagnostics.

# Configure CAN interface (default: 1Mbps nominal, 5Mbps data, CAN-FD)
openarm-can-cli -i can0 can_configure

# Configure with 1Mbps data rate (Classic CAN)
openarm-can-cli -i can0 can_configure -d 1000000 --no-fd

# Discover motors on the bus
openarm-can-cli -i can0 discover

# Monitor motor status (arm motors 1-8 by default)
openarm-can-cli -i can0 monitor

# Monitor specific motors
openarm-can-cli -i can0 monitor --id 1,2,3

Run openarm-can-cli -h for full usage.

4. 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

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

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

pip install .

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.

Related links

License

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

Copyright 2025-2026 Enactic, Inc.

Code of Conduct

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

About

OpenArm CAN control library

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages