A small, opinionated, human-readable language for describing robot intent.
urml-cobot-runtime
Collaborative-arm reference runtime for URML — UrRtdeAdapter (Universal Robots / RTDE) + FrankaFciAdapter (Franka / FCI via panda-py), zero ROS.
The two most-deployed cobots, driven by their native SDKs with no ROS — the proof that the popular real arms need no ROS. industrial-arm-runtime's Ur/FrankaAdapter compose RclpyAdapter (ROS 2 + MoveIt 2); these are the ROS-free siblings, exactly as marine-runtime is the ROS-free sibling of ros2-runtime. Both mirror BlueRovAdapter: lazy vendor SDK, cached lazy connection, failures returned not raised. Built against the frozen Protocol per RFC-0014.
Method coverage (both adapters)
| URML primitive | v0.1 |
|---|---|
move_to / hover |
drive the TCP to a configured pose (UR moveL / Franka joint move) |
grasp / release |
gripper command; scalar force_n honoured at v0.1 fidelity |
wait |
hold (success) |
measure / wait_for |
TCP force / robot state read |
report |
structured record to a local sink (no cloud) |
scan |
documented stub success |
dock, detect, capture, speak, listen return not_supported_on_bare_cobot (pair a station/vision/HMI companion). The drone trio returns not_applicable_cobot.
Spec gaps (RFC-0014 protocol)
One genuinely inexpressible need filed as RFC-0017 (Draft) — raw digital-I/O tool actuation (not grasp, not a station service). Force/impedance beyond scalar force_n is a documented watch-item (no RFC); joint-space waypoints are absorbed by config (no gap). See SPEC-GAPS.md.
Install / use
pip install -e reference/cobot-runtime[ur] # Universal Robots (ur_rtde)
pip install -e reference/cobot-runtime[franka] # Franka (panda-python, Apache-2.0)
from urml_cobot_runtime import UrRtdeAdapter, CobotConfig
from urml_cobot_runtime.adapter import Pose
cfg = CobotConfig(robot_ip="192.168.1.10",
location_to_pose={"pick": Pose(vector=[0.4, -0.3, 0.1, 0, 3.14, 0])})
with UrRtdeAdapter(cfg) as ur:
assert ur.send_navigation_goal(location="pick").success
Status
v0.1 (this release):
UrRtdeAdapter+FrankaFciAdapter+CobotConfig(native SDKs, no ROS).cobot_cellUS-provenance manifest +conformance/fixtures/industrial/08_cobot_cell_positive.yaml(RFC-0013pick_from/place_at) verified through the runner (hermetic againstMockROSAdapter; adapter-agnostic against the cobot adapters).- Hermetic unit tests for both adapters: nav (configured + unmapped), grasp/release, measure, scan-stub, lifecycle, the not-supported / not-applicable sentinels, the missing-
[ur]/[franka]-extra errors, the conformance hook — no vendor SDK install required. - Gated
.github/workflows/cobot-integration.yml:cobot-smoke(real SDKs),cobot-arm64-build(Jetson-class QEMU),cobot-controller-e2eplaceholder against a real UR/Franka (first run is a calibration run by design).
Follow-ups (not yet): RFC-0017 outcome (digital I/O); real Robotiq/Franka-gripper wiring beyond the v0.1 gripper command.
Core Commitment
Apache 2.0. Outside the Core Commitment boundary (only ROS 2 + PX4 are named there) but carries the same no-vendor-coupling, no-cloud, no-enterprise-edition posture. panda-py is Apache-2.0; ur_rtde is an optional [ur] extra imported lazily, never at module load (the rclpy/pymavlink posture).
Related documents
/reference/marine-runtime/— the zero-ROS sibling whose structure this mirrors./reference/industrial-arm-runtime/— the ROS 2 + MoveIt 2 Ur/Franka adapters this is the ROS-free sibling of./docs/rfcs/0017-digital-io-actuation.md— the surfaced spec gap.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file urml_cobot_runtime-0.4.0-py3-none-any.whl.
File metadata
- Download URL: urml_cobot_runtime-0.4.0-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a576d505bfacaebc6f28a89177146ebf9b49dbf99f0d720ee434f0f73156d85a
|
|
| MD5 |
6a3bc7105d51b17a622a1275646ef0c3
|
|
| BLAKE2b-256 |
09573e924bd944dc83d9ec755a748c62bb89a29e2d8304739444d8508a8d9362
|