Skip to content

use_dds·

60s, escape hatch

Raw DDS on any topic, for monitoring, debugging, or publishing what the SDK doesn't wrap.

tool what
g1_dds_list_topics curated G1 topic catalog
g1_dds_discover(timeout=5.0) full live topic set (no arg)
g1_dds_snapshot(topic) read ONE sample
g1_dds_subscribe(topic, max_buffer=20) buffered subscription
g1_dds_read(topic, n=10) pop latest N
g1_dds_unsubscribe(topic) stop
g1_dds_stats() active subs/pubs + counts
g1_dds_publish(topic, payload, unsafe=True) raw publish

read flow·

> list all DDS topics rt/lowstate, rt/bmsstate, rt/armsdk, rt/lowcmd, ... > snapshot rt/lowstate { timestamp, imu_state, motor_state[29] } > subscribe rt/bmsstate, read last 3 [{soc:86, current:-2.1}, {...}, {...}]

publishing, the dangerous part·

rt/*cmd topics are single-writer, owned by the motor controller. Publishing without coordination WILL cause motor failures.

# safe topic — no flag:
g1_dds_publish(topic="rt/utlidar/switch", payload={"data": "ON"})
# dangerous topic — REQUIRES unsafe=True:
g1_dds_publish(topic="rt/armsdk", payload={...}, unsafe=True)

unsafe=True required for: rt/lowcmd, rt/user_lowcmd, rt/armsdk · rt/bmscmd, rt/inspire/cmd. The flag forces explicit intent, the LLM can't publish to these "by accident".

when to reach for this·

For: inspecting a topic the SDK does not surface, prototyping before a composed tool, debugging why an RPC is not reaching the MCU.

Not for: bypassing safety, publishing motor commands by hand, anything use_unitree already covers.

See DDS topics for the full schema list.

Edit page