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