Discovery (mDNS)

Find robots on your local network without cloud connectivity.

Service Type

RCAN robots announce themselves using mDNS with the service type:

_rcan._tcp.local.

TXT Records

Robots broadcast metadata in DNS TXT records:

ruri=rcan://continuon.cloud/continuon/companion-v1/d3a4b5c6
model=companion-v1
caps=arm,vision,chat,teleop
roles=owner,user,guest
version=1.0.0
name=Living Room Companion
status=idle

Record Fields

Field Description
ruri Full Robot URI
model Robot model identifier
caps Comma-separated capabilities
roles Available access roles
version RCAN protocol version
name Human-readable name
status Current robot status

Discovering Robots

Using avahi-browse (Linux)

avahi-browse -r _rcan._tcp

Using dns-sd (macOS)

dns-sd -B _rcan._tcp local.

Using Python (zeroconf)

from zeroconf import ServiceBrowser, Zeroconf

class RCANListener:
    def add_service(self, zc, type, name):
        info = zc.get_service_info(type, name)
        if info:
            ruri = info.properties.get(b'ruri', b'').decode()
            print(f"Found robot: {ruri}")

zeroconf = Zeroconf()
browser = ServiceBrowser(zeroconf, "_rcan._tcp.local.", RCANListener())

Local Supremacy

A key RCAN principle: local discovery always works, even if:

  • Internet is unavailable
  • Cloud registry is down
  • Robot's registry ID was deleted

This ensures robots remain controllable in disconnected environments.

Status Values

Status Meaning
idle Ready and awaiting commands
busy Executing a task
charging On charger, not operational
error Fault condition
offline Not accepting connections