Menlo
Asimov API

Wire format

Asimov session channels, EdgeTelemetry fields, CloudCommand structure, and EdgeEvent types.

This page is a lookup for the messages exchanged between an application and Asimov 1. For value ranges, joint order, PD gains, and worked Python examples, see Protocols.

Session channels

A session is a WebRTC room (implemented via LiveKit). Inside it are three data channels plus two media tracks:

ChannelReliabilityDirectionPurpose
commandsReliable, orderedApplication → RobotSend CloudCommand — a oneof of velocity, trajectory, or mode
telemetryLossyRobot → ApplicationReceive EdgeTelemetry at 10 Hz
systemReliable, orderedRobot → ApplicationReceive EdgeEvent — robot-side events (boot, errors, alerts, mode transitions)
Video trackRobot → CloudFPV and third-person camera streams
Audio trackBidirectionalRobot microphone and speaker

Applications join the robot's LiveKit room and exchange these messages using the generated bindings supplied with the supported software release.

EdgeTelemetry

Delivered over the lossy state channel as protobuf. Each packet contains:

FieldDescription
timestamp_usEdge clock timestamp in µs (CLOCK_REALTIME)
fw_timestamp_usFirmware clock timestamp in µs
sequenceMonotonically increasing packet counter
fw_modeCurrent firmware mode (FW_MODE_DAMP / FW_MODE_STAND / FW_MODE_MOVE)
joint_posJoint positions in radians (25-element array, one per motor)
joint_velJoint velocities in rad/s
joint_currentMotor currents in amps
joint_tempMotor temperatures in °C
imu_quatIMU orientation quaternion [w, x, y, z]
imu_gyroIMU angular velocity [x, y, z] in rad/s
imu_gravityProjected gravity vector from the IMU [x, y, z]
error_flagsBitfield of active error codes
alert_countNumber of active alerts
active_alertsRepeated FirmwareAlert — the alerts themselves (motor overtemp, fall detect, CAN faults)
fw_age_msHow stale the firmware data was when the edge forwarded it (ms)
last_video_timestamp_usTimestamp of the most recent video frame (backend correlates with LiveKit RTP)
last_audio_timestamp_usTimestamp of the most recent audio frame

Use the generated EdgeTelemetry binding to decode each packet.

CloudCommand

Sent on the reliable commands channel. CloudCommand is a protobuf oneof — exactly one of the three fields is set per message:

VariantPurpose
velocityVelocityCommand with vx, vy, vyaw
trajectoryJoint-space trajectory — see TrajectoryRequest
modeFirmware mode transition (damp / stand / move)

VelocityCommand

FieldDescription
vxForward / backward velocity (m/s)
vyLeft / right lateral velocity (m/s)
vyawRotational velocity (rad/s)

EdgeEvent

Delivered over the reliable system channel. Carries boot progress, error reports, alert triggers, and mode-transition notifications from the robot. Use it to react to state changes rather than polling telemetry.

How is this guide?

On this page