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·
✅ inspecting a topic the SDK doesn't surface · prototyping before a composed tool · debugging why an RPC isn't reaching the MCU
❌ bypassing safety · publishing motor commands manually · anything
use_unitree already covers
See DDS topics for the full schema list.