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