Skip to main content

motor-drive-layer

Python bindings for the Motor-Drive-Layer native C++ Damiao motor driver.

The package loads the bundled C ABI library through Python ctypes and exposes SocketCAN, SocketCAN-FD, Damiao serial bridge, and optional DM_Device transports. Published wheels cover Linux x86_64/ARM64, macOS Intel/Apple Silicon, and Windows x64. The serial transport is cross-platform; SocketCAN transports remain Linux-only.

DM-USB2FDCAN Dual works with its original dual_app firmware through Controller.from_dm_device(device="usb2canfd-dual", channel=0, bitrate=1_000_000, data_bitrate=5_000_000). CH0 and CH1 are independently selectable, old positional arguments remain compatible, and the loader probes both vendor v1.0 and v1.1 ABIs. Install the separate vendor runtime with motor-drive-layer-install-dm-device --download or set MOTOR_DM_DEVICE_LIB. On final Controller close, v1.1 fully tears down its device session. The Linux v1.0 runtime instead closes the selected channels and motor-layer resources but retains its legacy context/device until process exit, allowing a later Controller.from_dm_device(...) call to reconnect reliably in the same Python process. The operating system reclaims those retained vendor objects at exit because calling the vendor destructor during static teardown can race libusb thread cleanup.

Use Motor.request_fresh_state(timeout_ms=50) when the caller must wait for a newly requested feedback frame. For multiple motors, Controller.request_feedback_all(timeout_ms=50) sends every request with the configured TX pacing and waits against one shared deadline; a timeout reports the missing motor IDs. The lower-level request_feedback(), get_state(), and poll_feedback_once() methods remain non-blocking asynchronous/cache operations.

For synchronized multi-channel control, ControllerGroup([ch0, ch1]) creates one persistent native worker per Controller. send_pos_vel([...]) and send_mit([...]) dispatch typed PosVelCommand or MitCommand values across their owning controllers, overlap independent TX pacing waits, and return after every controller finishes. Errors retain the controller/channel, motor ID, and native reason. For fixed high-rate layouts, prepare_pos_vel(motors) and prepare_mit(motors) reuse one validated ctypes command array across calls. Controller.transport_capabilities() reports the active transport's CAN-FD, channel, parallel-send, reconnect, session-reuse, and timestamp capabilities. Controller.transport_health() reports live connection state, TX/RX counters, errors, and last activity ages without adding robot-product policy to the transport layer.

The motor-drive-layer-stress command provides a feedback-only DM_Device load/reconnect test and reports latency plus Linux file-descriptor/thread counts. It never enables or commands motors.

The wheel includes py.typed and .pyi declarations for editor completion and static type checking. The main public APIs are:

  • Controller(...), from_socketcanfd(...), from_dm_serial(...), and from_dm_device(...).
  • Controller.add_damiao_motor(...), enable_all(), disable_all(), request_feedback_all(), set_tx_gap_us(), transport_capabilities(), shutdown(), and close_bus().
  • ControllerGroup(...), send_pos_vel(...), and send_mit(...) for persistent native multi-controller dispatch, plus reusable prepared batches for fixed layouts.
  • Motor.enable(), disable(), ensure_mode(), all four control-mode send methods, fresh/cached feedback methods, typed register access, parameter aliases, and store_parameters().
  • MitCommand, PosVelCommand, MotorState, FeedbackStats, Mode, register metadata/constants, and SDK exception classes.

Motor is a logical child of its creating Controller. After the parent closes, motor operations raise CallError; motor.close() can still release the handle. Both classes support context managers. Leaving a Motor context only frees its handle, while leaving a Controller context attempts to disable all motors before closing the bus.

See the project README for build instructions, architecture, configuration, safety guidance, and examples.

This package is distributed under the MIT License. The optional DM_Device vendor runtime is distributed separately and may have its own license terms.

Metadata

Release files for motor-drive-layer 0.5.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for motor-drive-layer 0.5.11
File Size Uploaded
motor_drive_layer-0.5.11.tar.gz 36.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for motor-drive-layer 0.5.11
File Interpreter ABI Platform
motor_drive_layer-0.5.11-py3-none-manylinux_2_35_x86_64.whl Python 3 none Linux glibc 2.35+ x86-64 Details

Total release size: 193.9 kB

Release files / motor_drive_layer-0.5.11.tar.gz

Download URL motor_drive_layer-0.5.11.tar.gz
Size 36.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c5376a73c0f4334693b31c60aa1ca7c047e1fa8494ec7960fc726c1aa4a37d25
BLAKE2b-256 checksum
How to use checksums
ff9a1882716d22aed34ee9fb08828d895adc8071ded5ad3cf3ae8e464f2d8506
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release files / motor_drive_layer-0.5.11-py3-none-manylinux_2_35_x86_64.whl

Download URL motor_drive_layer-0.5.11-py3-none-manylinux_2_35_x86_64.whl
Size 157.8 kB
Tags Linux glibc 2.35+ x86-64 Python 3
SHA-256 checksum
How to use checksums
24e07b9def8f5eb5cc75dca2f7f1e6933648c92191cbbacc77c2f559cd7d2648
BLAKE2b-256 checksum
How to use checksums
077236439f14cdfc696d219d816abd4826f81ee6538838371275d05e1fe1bfcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.20

Release history Release notifications | RSS feed

0.25.0

2 release files

0.24.0

2 release files

0.23.0

2 release files

0.22.5

2 release files

0.22.3

2 release files

0.22.2

2 release files

0.22.1

2 release files

0.22.0

2 release files

0.21.0

2 release files

0.19.0

2 release files

0.18.0

2 release files

0.17.0

2 release files

0.16.0

2 release files

0.15.1

2 release files

0.15.0

2 release files

0.14.1

2 release files

0.14.0

2 release files

0.13.1

2 release files

0.13.0

2 release files

0.12.9

2 release files

0.12.8

2 release files

0.12.7

2 release files

0.12.6

2 release files

0.12.5

2 release files

0.12.4

2 release files

0.12.3

2 release files

0.12.2

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.11.1

1 release file

0.11.0

1 release file

0.10.30

1 release file

0.10.29

1 release file

0.10.28

1 release file

0.10.27

1 release file

0.10.26

1 release file

0.10.25

1 release file

0.10.14

1 release file

0.10.9

2 release files

0.10.8

2 release files

0.10.7

3 release files

0.10.6

2 release files

0.10.5

1 release file

0.10.4

1 release file

0.10.3

1 release file

0.10.2

1 release file

0.10.1

2 release files

0.10.0

1 release file

0.9.4

1 release file

0.9.3

1 release file

0.9.2

1 release file

0.9.1

1 release file

0.9.0

1 release file

0.8.9

1 release file

0.8.8

1 release file

0.8.7

1 release file

0.8.5

5 release files

0.8.4

5 release files

0.8.3

5 release files

0.8.2

5 release files

0.7.9

5 release files

0.7.7

5 release files

0.7.6

5 release files

0.7.5

5 release files

0.7.4

5 release files

0.7.3

1 release file

0.7.0

1 release file

0.6.2

5 release files

0.6.1

5 release files

0.6.0

5 release files

This release

0.5.11 This release

2 release files

0.5.10

2 release files

0.5.9

5 release files

0.5.8

5 release files

0.5.7

5 release files

0.5.6

5 release files

0.5.4

5 release files

0.5.3

5 release files

0.5.2

1 release file

0.5.1

1 release file

0.5.0

1 release file

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