Skip to main content

airo-fanuc

A standalone driver for FANUC industrial arms: a compiled real-time core speaking Stream Motion (UDP, 125 Hz / 8 ms) plus an RMI JSON client (TCP), behind a Python API.

The Python surface is split the conventional way for an industrial-arm client library: a receive half — state getters that never block, never raise, and never lie, every value carrying its age — and a control half, usable blocking or non-blocking. FanucDriver presents both on one construct-and-go object: the constructor brings the robot up to commandable or raises with a real reason, move_trajectory / move_j / servo_j are the only motion surfaces, and stop_j() is the universal preempt.

Everything timing-critical is C++: the 125 Hz tick loop, cubic-Hermite trajectory playback, the Ruckig-based brake/servo/capture profiles, the slew clip and the safety state machine. Python owns lifecycle, recovery policy, validation and the RMI session, and is never in the control loop.

One runtime dependency: numpy. Everything environment-specific is injected — the collision check, a state sink, the arm's motion envelope, the gripper's register protocol — so installing this driver does not drag in a robotics stack.


Install

pip install airo-fanuc

A download on Linux x86_64 and aarch64, CPython 3.10-3.14: the published wheels carry the compiled real-time core, so no compiler, no CMake and no headers are involved. uv add airo-fanuc / uv pip install airo-fanuc take the same wheel.

Linux only, and not a preference — the RT thread is timerfd_create + epoll + SCHED_FIFO, with no portable fallback.

Anywhere else — another platform, or a free-threaded interpreter — pip falls back to the sdist and compiles the extension, which needs a C++20 compiler, CMake ≥ 3.22, the Python development headers, and network access to fetch ruckig and pybind11.

The package ships no arm profile — you supply a RobotProfile, and most of it comes out of the controller itself. See configuration.

Will it work on your robot?

Stream Motion and RMI are FANUC's own protocols, not a collaborative-robot feature; what is required is controller option S636. The 8 ms interpolation period is an R-30iB fact, so this covers FANUC's mainstream controller class rather than only cobots.

Four things are not generic: the arm's envelope (injected, no default), the interpolation period (configured, and bring-up refuses a mismatch), the six-joint count (compile-time), and the gripper (parameterised, but its Teach-Pendant program is yours to install). Read this before planning a bring-up.

Developed and measured against a FANUC CRX-10iA/L on an R-30iB-class controller.

Usage

import numpy as np
from airo_fanuc import DriverConfig, DriverPolicy, FanucDriver, MotionResult

from crx10ial import CRX10IAL   # your arm's RobotProfile — examples/crx10ial.py

policy = DriverPolicy(config=DriverConfig(profile=CRX10IAL), enable_gripper=False)

# construct-and-go: blocks until the robot is commandable, or raises with a real reason
with FanucDriver("192.168.1.100", policy) as driver:
    q0 = np.asarray(driver.get_state()["q_cmd"], dtype=float)
    q1 = q0.copy()
    q1[5] += np.radians(10.0)                       # J6 by +10 deg

    result = driver.move_j(q1, joint_speed=0.2).wait(timeout=9.0)
    assert result == MotionResult.DONE

move_j plans a jerk-limited point-to-point profile and submits it; joint_speed is the leading-axis speed in rad/s, and every joint is time-synchronised to land together. It requires the arm to be at rest. move_trajectory(times, q, qd=None) takes a fully time-parameterised timeline instead — int64 nanoseconds, radians, velocities optional (omit them and the driver derives the knot tangents) — and the C++ core owns playback from submission, so a late Python thread costs nothing. servo_j(q, duration) is the replace-not-queue streaming path, best-effort in the sense UR's servoj is.

Every motion returns a MotionHandle immediately. .wait(timeout) blocks and resolves to a non-raising MotionResult; skip it and poll .done() / .result().

Runnable, including a --fake mode that needs no hardware:

uv run python examples/move_joints.py --fake      # single-joint rest-to-rest move
uv run python examples/sine_wave.py --fake        # dense-knot trajectory, all joints
uv run python examples/servo_stream.py --fake     # the same path streamed via servo_j

Those are also bring-up validation scripts: each reports what the controller said, moves, and ends in a PASS/FAIL verdict with the real-time loop's measured timing.

Documentation

docs/README.md is the index. The ones you are most likely to want:

License

Apache-2.0 — see LICENSE. The vendored FANUC Stream Motion codec headers are Apache-2.0 too, with no modifications (PATCHES.md). Ruckig (MIT) and pybind11 (BSD-3-Clause) are compiled into the _core extension, so the wheel redistributes both; their texts are in LICENSES/ and every component is attributed in NOTICE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

airo_fanuc-0.1.0.tar.gz (577.1 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

airo_fanuc-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (486.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

airo_fanuc-0.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (454.2 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

airo_fanuc-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (486.7 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

airo_fanuc-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (453.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

airo_fanuc-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (486.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

airo_fanuc-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (453.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

airo_fanuc-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (485.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

airo_fanuc-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (453.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

airo_fanuc-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (484.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

airo_fanuc-0.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl (452.6 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.26+ ARM64manylinux: glibc 2.28+ ARM64

File details

Details for the file airo_fanuc-0.1.0.tar.gz.

File metadata

  • Download URL: airo_fanuc-0.1.0.tar.gz
  • Upload date:
  • Size: 577.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for airo_fanuc-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a62a8d44e381cfa697424bb7c808320a749ce80218264a7364447d372dd11ce0
MD5 d596643860da45933b6ade43bfd2ed5f
BLAKE2b-256 ca3216a5b63c81d27058e3f8995dd65dbf77c62c594e60b74174a19759c1b27e

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0.tar.gz:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 659b1645469e9995b3aa2045697f67184c8bb779487b6f349fd8fab21918f7f6
MD5 ad21107be3f15f58b82bf88c04ce86a6
BLAKE2b-256 3ecad43b55a42d8aa5de744c0c834b73beb6f4e3a70d62760b5ff2849a8928d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b7144fd649c39d3460ed9f0ea7f7fd4c042edf6583d630e3c7339d3980a555ad
MD5 41dbb7f0ced513b7dae9544b4f06d2e6
BLAKE2b-256 06762eb5426c1727d502d1a3f88741629b483998c45680ceed8e323920063546

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ddcaa1225dd2d01a9aa13659a2e73e97ff3d2b8d438a24b17b65ec85a81ea402
MD5 7652eb52636dc5dd4d2d132fcca719bc
BLAKE2b-256 256a9bbe5cee27461efa0d6fab0e5ae0e7a1b9183aa0196a1c34c80ae4db9fcb

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a127aa720cc05319370127b6c4659c8774337397e5f2b864c04620ff95b4e7f7
MD5 090901ce1023c5726220936afe523560
BLAKE2b-256 8c1d9a61bbe7e05a1ad4dc9a93372c83a8e062870bd86e31cdec0d581f4c746d

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e8417f2492d2ed55cbd6a2224cc598a7c5893ad9c499359dad9853b6b140c37e
MD5 19565fca0cb4c4a10733c4d164db895a
BLAKE2b-256 9b3906a598e20ca8092985d0b45c80e1f2a8c3e0e1c1a63eae75168e096f8479

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 59384985eacfbaf883c3cf83e37f30eae10130890186d79a1ce3afa4ee802651
MD5 74b89adf63acf766b24dafa0733306eb
BLAKE2b-256 09c44f9bb1ea95d88d8a20538a0d8587c700d2986829a4253491a11794958461

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 5abc8847926dce524f8bda85d3a7fba353908f553013808fa82ba7b64d3d5a0a
MD5 9d0838983d02a1e43ccbb3b83a6d25e0
BLAKE2b-256 e7801b624eebd1d7e4292ac5b4f3b6d4232731ee25c782c3c09322ef0098eef4

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 5a768fd8b64951bde9ca901ec3413bc10564dbc7194bf408d80e6dd43bc9c1d0
MD5 f984ade4992cd773e7474b656ec6ec58
BLAKE2b-256 f9fcd4d76afa1b41a8b60db9a75680086caedbc66a35e4aad45cc00647d562ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 488c3519edf99384e2cb9e0780cc84c18e2014029a7dcf4b64cd8b58d622fb5b
MD5 bff0edcc08b3a6ce83b5704e6df167b6
BLAKE2b-256 a7b12f1e222c2b56f49882616ffc9e541bc09852fb479124191993253bf35f2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file airo_fanuc-0.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for airo_fanuc-0.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 eb5d59598fe9e3792347e2518cfcc3a5b023e7439e1c64eab4762963591c26f4
MD5 ef735fc71da7ff83ae1a809e1d464d5e
BLAKE2b-256 bb7a745bfbe6b19ed4da5b3ac5fa516492f4a8b1744e50f5f4911bb7cb39068d

See more details on using hashes here.

Provenance

The following attestation bundles were made for airo_fanuc-0.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl:

Publisher: release.yml on airo-ugent/airo-fanuc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.0 This release

11 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page