Skip to main content
Live connection to a remote robot, with its methods exposed as Python attributes. Created by connect() when no program is provided. The robot is the root of a recursive component tree discovered at construction time: robot methods are direct calls (robot.set_velocity(0.5)), and every named subcomponent — sensors, end effector, arms, and their own children — is a RemoteComponent reachable both via the subcomponents mapping and as an attribute (robot.left_arm.wrist_cam.getImage()). The driver’s @property values are advertised too, at every level: reading one runs the getter on the robot, and assigning to one runs the setter there. Assigning to any other public name raises AttributeError instead of creating a local attribute. The names below, plus session, robot_name, zenoh_session_config, monitor and shutdown, belong to this class — a robot method or property of the same spelling is not reachable by attribute access.

Fields

Name of the Python driver class the robot runs as ("UR5e", "Go2"), or "" when it advertised none.
Dict of child name → RemoteComponent for every top-level child of the robot.
Derived dict of the children whose remote role is sensor.
Derived RemoteComponent for the child end effector, or None.
Hardware identity (serial number, model, controller version) of the root node alone — advertised per node, so every component in the tree carries its own and none aggregates its children’s. A composite robot whose serial lives on a subcomponent reports {} here; walk subcomponents and apply your own policy to decide which serial identifies the robot. {} also means unknown.

Constructor

Signature

Properties

RemoteComponent | None
The child end effector, or None (derived view).Prefers the child named "end_effector", else the first child whose remote role is end effector.
dict[str, str]
Hardware identity of the physical unit behind this node.The manufacturer identity the robot reported when this connection introspected it — serial_number, model, controller_version — each key present only when the robot could read it, so an empty dict means unknown. Absence is never evidence of difference: two components that both report no serial are not thereby the same unit, nor thereby distinct ones.Read from the introspection payload at connect time, so it costs no round-trip and does not change for the life of the connection; call getIdentity() on the component for a live read.Per-node, never aggregated. It reports what this node itself advertised and nothing about its children: a composite robot whose serial lives on its arm reports {} at the root while robot.subcomponents["arm"].identity carries the serial. A caller that wants “the robot’s serial” walks subcomponents and picks by its own policy — which node’s serial counts as the robot’s is a decision this client does not make.
MonitorClient
str
dict[str, RemoteComponent]
Child components whose remote role is sensor (derived view).
RobotHandle
The underlying low-level robot handle (Zenoh session).
dict[str, RemoteComponent]
Named child components of this node (snapshot dict).
str
Name of the Python class this node runs as on the robot.The driver class the edge introspected ("UR5e", "Go2"), read from the introspection payload at connect time, so it costs no round-trip and does not change for the life of the connection. It says what the component is, not which unit it is — see identity for that.
str

Methods

shutdown()

Signature
Close this Python handle’s local resources and owned signaling session.