Skip to main content
Pre-release

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

Menlo

menlo-sdk

Python SDK for Menlo robots: Asimov 1.

You drive the robot with one Robot class and the robot's own verbs: stand, set_velocity, stop, damp, goto and trajectory.

Installation

pip install menlo-sdk
# or, with uv
uv add menlo-sdk

Quickstart

Stand the robot up, walk forward for 3 s, and stop. The robot must be on its feet, hanging from its gantry hook, with 2 m of clear floor ahead.

from menlo.asimov import ConnectionConfig, Mode, Robot, UdpConfig

config = ConnectionConfig(udp=UdpConfig(host="192.168.22.32"))  # the robot's address

with Robot(config).connect("udp") as robot:
    if robot.state.mode is Mode.DAMP:
        robot.wait_ready("stand")  # fresh state, no fault, battery and actuators ok
        robot.stand()
        robot.wait_for(Mode.STAND)
    robot.wait_ready("move")  # armed: STAND held upright for 0.5 s
    robot.set_velocity(vx=0.3, duration=3.0, wait=True)
    robot.stop()  # zero velocity: the robot stays in MOVE and balances in place

To keep the address out of the code, set MENLO_UDP_HOST=192.168.22.32 and use Robot().connect().

The udp connection mode needs two Asimov Edge parameters, set in Asimov Manager: udp-control on, and udp-state-host set to your computer's address.

Examples

The examples are short scripts, one purpose each. Settings are constants at the top of each file. Every script that moves the robot checks it first, with require_ready() from check.py.

git clone https://github.com/menloresearch/menlo-sdk
cd menlo-sdk
export MENLO_UDP_HOST=192.168.22.32   # or save the robot with `menlo setup`
python examples/check.py              # is the robot ready? sends nothing
python examples/stand.py              # DAMP to STAND, then wait until armed
python examples/walk.py               # walk forward for 3 s, then stop
python examples/damp.py               # asks first; the robot must be supported

The examples page walks through each one.

Safety

Read the safety page before you run a script on a robot.

  • Nothing in the SDK is an emergency stop. Use the E-Stop in Asimov Manager, or cut power at the battery unit.
  • Call stand() only from DAMP. End a walk with stop(): the robot stays in MOVE and keeps balancing.
  • Keep the robot supported, hanging from its gantry hook or seated on a bench, for damp() and for joint control (goto, trajectory).
  • The firmware caps velocity at 0.4 m/s forward and sideways and 0.8 rad/s turning.
  • robot.preflight(action) reports what stands in the way of a stand, a walk or a trajectory, and sends nothing.

Connection modes

connect(mode) selects how commands, state and media reach the robot. The API is the same in every mode.

Mode Carries Needs
"udp" control and state over UDP the robot's address
"hybrid" control and state over UDP, camera and audio over LiveKit the robot's address, the Asimov Manager URL and an SDK credential
"livekit" everything through the robot's LiveKit room the Asimov Manager URL and an SDK credential

The SDK credential comes from the Developer page of Asimov Manager. connect.py shows each mode.

Command line

The menlo command saves robots, shows readiness and runs the basic verbs. Robot() and the examples use the saved robot when no MENLO_* variable says otherwise.

menlo setup                          # save a robot: name, connection mode, live checks
menlo status --watch                 # READY, NOT READY or FAULTED; sends nothing
menlo stand                          # DAMP to STAND, then wait until armed; asks first
menlo walk --vx 0.3 --duration 3     # walk, then stop(); asks first
menlo stop                           # zero velocity, only in MOVE
menlo damp                           # every actuator limp; asks first

Every command and flag is on the command line page.

Documentation

Requirements

  • Python 3.12 or newer.
  • An Asimov 1 robot. For hybrid and livekit, an SDK credential from Asimov Manager.
  • Optional, only for the calls that use them: Pillow for Frame.to_jpeg(), numpy for Frame.to_numpy(), opencv-python for Clip.save_mp4().

Contributing

Issues and pull requests are welcome at https://github.com/menloresearch/menlo-sdk. CONTRIBUTING.md describes the development setup and the checks a change must pass.

Security

Report a vulnerability privately to security@menlo.ai, not in a public issue. See SECURITY.md.

License

MIT. See LICENSE.

Metadata

Release files for menlo-sdk 0.1.0rc7

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.0rc7
File Size Uploaded Provenance Actions
menlo_sdk-0.1.0rc7.tar.gz 230.4 kB With provenance Details for menlo_sdk-0.1.0rc7.tar.gz

Built distribution (wheel)

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

Total release size: 331.0 kB

Release files / menlo_sdk-0.1.0rc7.tar.gz

Download URL menlo_sdk-0.1.0rc7.tar.gz
Size 230.4 kB
Tags Source
SHA-256 checksum
How to use checksums
0bd5a72aac43884d6e292f2f09fa870f9c2b09f193a3a9423b13a826e5069933
BLAKE2b-256 checksum
How to use checksums
bb541f268fd14900406d2509fa4a2e83e0c930f1d490095c568e11c8e7e959f0
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 30, 2026.

Transparency log

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

Download URL menlo_sdk-0.1.0rc7-py3-none-any.whl
Size 100.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a54e1dd204587ef581325744dd7b1b62b416bb880ec5798f7d0205ecb7e946bd
BLAKE2b-256 checksum
How to use checksums
06ee113a564899c143683cd1e6f05a3acab770288af213c9799df8684f97f24d
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 30, 2026.

Transparency log

Security for menlo-sdk 0.1.0rc7

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for menlo_sdk-0.1.0rc7.tar.gz

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 30, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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