{"id":37412930,"url":"https://github.com/enactic/openarm_can","last_synced_at":"2026-02-18T04:00:59.407Z","repository":{"id":305876708,"uuid":"1024041314","full_name":"enactic/openarm_can","owner":"enactic","description":"OpenArm CAN control library","archived":false,"fork":false,"pushed_at":"2026-01-13T05:13:03.000Z","size":181,"stargazers_count":32,"open_issues_count":7,"forks_count":41,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-13T08:35:07.748Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enactic.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-22T05:24:55.000Z","updated_at":"2026-01-13T05:13:05.000Z","dependencies_parsed_at":"2025-08-29T10:25:41.945Z","dependency_job_id":"338fee8b-cc3c-4a21-b871-950f3600fc7d","html_url":"https://github.com/enactic/openarm_can","commit_stats":null,"previous_names":["enactic/openarm_can"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/enactic/openarm_can","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_can","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_can/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_can/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_can/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enactic","download_url":"https://codeload.github.com/enactic/openarm_can/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enactic%2Fopenarm_can/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477507,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-16T05:57:11.468Z","updated_at":"2026-01-16T05:57:11.577Z","avatar_url":"https://github.com/enactic.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenArm CAN Library\n\nA C++ library for CAN communication with OpenArm robotic hardware, supporting Damiao motors over CAN/CAN-FD interfaces.\nThis library is a part of [OpenArm](https://github.com/enactic/openarm/). See detailed setup guide and docs [here](https://docs.openarm.dev/software/can).\n\n\n## Quick Start\n\n### Prerequisites\n\n- Linux with SocketCAN support\n- CAN interface hardware\n\n### 1. Install\n\n#### Ubuntu\n\n* 22.04 Jammy Jellyfish\n* 24.04 Noble Numbat\n\n```bash\nsudo apt install -y software-properties-common\nsudo add-apt-repository -y ppa:openarm/main\nsudo apt update\nsudo apt install -y \\\n  libopenarm-can-dev \\\n  openarm-can-utils\n```\n\n#### AlmaLinux, CentOS, Fedora, RHEL, and Rocky Linux\n\n1. Enable [EPEL](https://docs.fedoraproject.org/en-US/epel/). (Not required for [Fedora](https://fedoraproject.org/))\n   * AlmaLinux 8 / Rocky Linux 8\n     ```bash\n     sudo dnf install -y epel-release\n     sudo dnf config-manager --set-enabled powertools\n     ```\n   * AlmaLinux 9 \u0026 10 / Rocky Linux 9 \u0026 10\n     ```bash\n     sudo dnf install -y epel-release\n     sudo crb enable\n     ```\n   * CentOS Stream 9\n     ```bash\n     sudo dnf config-manager --set-enabled crb\n     sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel{,-next}-release-latest-9.noarch.rpm\n     ```\n   * CentOS Stream 10\n     ```bash\n     sudo dnf config-manager --set-enabled crb\n     sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-10.noarch.rpm\n     ```\n   * RHEL 8 \u0026 9 \u0026 10\n     ```bash\n     releasever=\"$(. /etc/os-release \u0026\u0026 echo $VERSION_ID | grep -oE '^[0-9]+')\"\n     sudo subscription-manager repos --enable codeready-builder-for-rhel-$releasever-$(arch)-rpms\n     sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-$releasever.noarch.rpm\n     ```\n2. Install the package.\n   ```bash\n   sudo dnf update\n   sudo dnf install -y \\\n     openarm-can-devel \\\n     openarm-can-utils\n   ```\n\n### 2. Setup CAN Interface\n\nConfigure your CAN interface using the provided script:\n\n```bash\n# CAN 2.0 (default)\nopenarm-can-configure-socketcan can0\n\n# CAN-FD with 5Mbps data rate\nopenarm-can-configure-socketcan can0 -fd\n```\n\n### 3. C++ Library\n\n```cpp\n#include \u003copenarm/can/socket/openarm.hpp\u003e\n#include \u003copenarm/damiao_motor/dm_motor_constants.hpp\u003e\n\nopenarm::can::socket::OpenArm arm(\"can0\", true);  // CAN-FD enabled\nstd::vector\u003copenarm::damiao_motor::MotorType\u003e motor_types = {\n    openarm::damiao_motor::MotorType::DM4310, openarm::damiao_motor::MotorType::DM4310};\nstd::vector\u003cuint32_t\u003e send_can_ids = {0x01, 0x02};\nstd::vector\u003cuint32_t\u003e recv_can_ids = {0x11, 0x12};\n\nopenarm.init_arm_motors(motor_types, send_can_ids, recv_can_ids);\nopenarm.enable_all();\n```\n\nSee [dev/README.md](dev/README.md) for how to build.\n\n### 4. Python (🚧 EXPERIMENTAL - TEMPORARY 🚧)\n\n\u003e [!WARNING]\n\u003e\n\u003e ⚠️ **WARNING: UNSTABLE API** ⚠️\n\u003e Python bindings are currently a direct low level **temporary port**, and will change **DRASTICALLY**.\n\u003e The interface is may break between versions.Use at your own risk! Discussions on the interface are welcomed.\n\n**Build \u0026 Install:**\n\nPlease ensure that you install the C++ library first, as `1. Install` or [dev/README.md](dev/README.md).\n\n```bash\ncd python\n\n# Create and activate virtual environment (recommended)\npython -m venv venv\nsource venv/bin/activate\n\npip install .\n```\n\n**Usage:**\n\n```python\n# WARNING: This API is unstable and will change!\nimport openarm_can as oa\n\narm = oa.OpenArm(\"can0\", True)  # CAN-FD enabled\narm.init_arm_motors([oa.MotorType.DM4310], [0x01], [0x11])\narm.enable_all()\n```\n\n### Examples\n\n- **C++**: `examples/demo.cpp` - Complete arm control demo\n- **Python**: `python/examples/example.py` - Basic Python usage\n\n## For developers\n\nSee [dev/README.md](dev/README.md).\n\n## Related links\n\n- 📚 Read the [documentation](https://docs.openarm.dev/software/can/)\n- 💬 Join the community on [Discord](https://discord.gg/FsZaZ4z3We)\n- 📬 Contact us through \u003copenarm@enactic.ai\u003e\n\n## License\n\nLicensed under the Apache License 2.0. See `LICENSE.txt` for details.\n\nCopyright 2025 Enactic, Inc.\n\n## Code of Conduct\n\nAll participation in the OpenArm project is governed by our [Code of Conduct](CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenactic%2Fopenarm_can","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenactic%2Fopenarm_can","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenactic%2Fopenarm_can/lists"}