Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Menlo

menlo-sdk

Drive an Asimov robot from Python. One Robot, five verbs, waits that read the robot's own report, and camera, microphone and speaker on the same connection.

pip install menlo-sdk              # UDP on the LAN; Python 3.12+
pip install "menlo-sdk[livekit]"   # + video, audio and remote connections

Quickstart

Once per machine, save a robot. The credential is minted on the robot (asimovctl sdk-token create --role control, or its web UI's SDK page):

menlo login http://asimov.local --credential <credential>

Then a script is just:

from menlo.asimov import Mode, Robot

with Robot().connect() as robot:  # the robot you logged in to
    if robot.state.mode is Mode.DAMP:  # wake up: STAND is the only way out of DAMP
        robot.stand()
        robot.wait_for(Mode.STAND, timeout=15)
    robot.set_velocity(vx=0.25, duration=4.0, wait=True)  # walk 0.25 m/s for 4 s, then zero
    robot.wait_for(Mode.MOVE)  # ends in MOVE at zero velocity: standing still
    print(robot.state.joint("L_Knee").pos, robot.state.battery)
    print(robot.camera.photo().to_jpeg()[:4])  # needs [livekit] and Pillow

Robot() finds the robot from MENLO_MANAGER_URL + MENLO_CREDENTIAL, else from ~/.menlo/robots.toml (menlo robots, menlo use <name>, menlo logout <name>). Or say where it is: Robot(ConnectionConfig(udp=UdpConfig("asimov.local"))).connect("udp").

The verbs

Verb What it does
set_velocity(vx, vy, vyaw, duration=, wait=) walk; held at 10 Hz until superseded, stop(), or duration
stop() zero velocity; the robot keeps balancing in MOVE
stand() stiffen into the standing pose; the wake-up verb, no balance loop
damp() motors compliant now; a standing robot folds. The emergency verb
goto(positions, duration=) / trajectory(positions) joint targets, radians, policy off

Every verb returns a Sent at once. wait_for(Mode.X) and wait_until(pred) block on the robot's report and raise RobotFaultedError, StateStaleError or WaitTimeoutError instead of guessing. robot.state is the latest sample: mode, joints, IMU, alerts, battery.

Three lanes, one API

connect(mode) control + state video + audio when
"udp" UDP 8850 / 8851 — on the robot's LAN, no camera needed
"hybrid" UDP LiveKit on the LAN, with camera
"livekit" LiveKit LiveKit from anywhere the robot's manager is reachable

ManagerConfig(url, credential) asks the robot's manager for the room and a fresh join token on every connect; the SDK never holds a LiveKit secret.

Read before you let go of the robot

  • A walk ends in MOVE at zero velocity, not in stand(). STAND is a stiffen with no balance loop; asking a free-standing biped to stiffen after walking tips it over.
  • The SDK sends zero when your script stops. close(), the end of a with block, a lost link and a fault-DAMP all release a held velocity. The edge DAMPs on its own about two seconds after the last command it heard.
  • damp() folds the robot. It is never implied by anything else.
  • Speeds are clamped client-side (0.6 m/s, 1.5 rad/s by default) and the clamp is visible on Sent.clamped.

More

  • Reference: every option, the safety model in full, the wire, errors, development.
  • SKILL.md: the two-page brief for an agent writing a script against this SDK.
  • Examples and the changelog.
  • Versions follow PEP 440; pre-releases (0.1.0rc1) install only with pip install --pre. How releases are cut: RELEASING.md.

License

MIT. The wire types come from asimov-protocol (MIT).

Release files for menlo-sdk 0.1.0rc2

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

Source distribution (sdist)

Source distribution for menlo-sdk 0.1.0rc2
File Size Uploaded
menlo_sdk-0.1.0rc2.tar.gz 183.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for menlo-sdk 0.1.0rc2
File Interpreter ABI Platform
menlo_sdk-0.1.0rc2-py3-none-any.whl Python 3 none any Details

Total release size: 259.1 kB

Release files / menlo_sdk-0.1.0rc2.tar.gz

Download URL menlo_sdk-0.1.0rc2.tar.gz
Size 183.5 kB
Tags Source
SHA-256 checksum
How to use checksums
f190a8b363f2500babecf9e0aab3d2f1b8d4115249d94be7fcb816dc3072a5c9
BLAKE2b-256 checksum
How to use checksums
b6d683f3d4ba44e6d530d0109912e92c2bdb5e154320517b1c7cbe449147e01b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release files / menlo_sdk-0.1.0rc2-py3-none-any.whl

Download URL menlo_sdk-0.1.0rc2-py3-none-any.whl
Size 75.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
88a0f1bd369245ac71959f0c632f3bd063b2e7c108b6aab5b64b25b5c90c49e5
BLAKE2b-256 checksum
How to use checksums
03d37182adcba44e00f315a180e800378d60e4c33bf1d38c758ee3cb058f9a28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0rc2 This release

2 release 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