robot-console-cli
WorkBuddy「机器人控制台」连接器的 CLI 执行体。通过 DDS 在本地局域网控制人形 / 四足机器人,不经云端。
安装
一条命令,无需 C 编译器、无需访问 GitHub:
python -m pip install robot-console-cli
会自动带上 DDS 绑定 cyclonedds(PyPI 有各平台预编译包)。
Unitree 官方机器人驱动已内嵌在包内(robot_console/_vendor/unitree_sdk2py,BSD-3),
因此不需要另行安装 SDK。
覆盖平台:macOS(Intel / Apple Silicon)、Linux(x86_64)、Windows(x86_64)。
想接官方仿真器
unitree_mujoco或低层开发,才需要额外装官方 SDK——本连接器不需要。
命令
| 命令 | 级别 | 说明 |
|---|---|---|
robot-console list |
L0 | 列出已发现与已绑定的机器人 |
robot-console status --robot NAME |
L0 | 查询实时状态(含分层通信诊断) |
robot-console status --check --quiet |
L0 | 仅输出 bound / no_robot(供平台轮询) |
robot-console doctor |
L0 | 环境与连通性自检(含手臂动作表核对) |
robot-console bind --auto |
— | 自动发现并绑定(DDS 探活通过才允许绑定) |
robot-console unbind --all |
— | 清除绑定 |
robot-console say --robot NAME --text "..." |
L1 | 语音播报(人形机型) |
robot-console pose --robot NAME --pose stand|sit|recover |
L1 | 切换姿态 |
robot-console action --robot NAME --name wave|heart|shake_hand |
L2 | 预设动作(仅人形) |
robot-console move ... |
L2 | 移动(v1.0 默认关闭) |
robot-console estop --robot NAME |
L3 | 急停,任何状态可用 |
robot-console config --enable-move |
— | 开启移动能力开关 |
robot-console config --set-fsm G1:stand=4 |
— | 站点级 FSM 标定 |
robot-console sim --start / --stop |
— | 起停本地假机器人 |
robot-console verify --contract g1-v1 |
— | 核对实际发出的 DDS 报文 |
所有命令支持 --json 输出。
全局参数
| 参数 | 说明 |
|---|---|
--backend auto|mock|unitree|sim |
后端选择。默认 auto(真机) |
--domain N |
DDS 域。真机 0,仿真 1。不填时按后端取默认值 |
--iface NAME |
DDS 网卡,如 eth0 / lo。默认交给 DDS 自动选择 |
三层通信与 status 输出
status 会分层报告,一眼看出卡在哪一层:
G1-01(G1):在线,姿态 站立就绪
通信层:dds_lowstate√,rpc√
| 层 | 通道 | 含义 |
|---|---|---|
dds_lowstate |
订阅 rt/lowstate |
链路是否通(有没有心跳) |
dds_sportmode |
订阅 rt/sportmodestate |
仅四足有 |
rpc |
rt/api/{service}/request |
高层语义(读回 FSM 等) |
无真机验证
有两条路,互补覆盖。
路一:纯逻辑验证(--backend mock,零依赖)
robot-console --backend mock bind --auto
robot-console --backend mock pose --robot G1-01 --pose stand
robot-console --backend mock estop --robot G1-01
从源码目录直接跑时,才需要
PYTHONPATH=src(Windows:set PYTHONPATH=src)。
mock 后端的状态只存在于单次进程内,不跨命令持久化;因此每次调用看到的是全新的模拟状态。
路二:本地假机器人(--backend sim,真 DDS,走真机后端代码)
在单机内实现 sport / arm / voice 三个 RPC 服务端 + 遥测发布,
走的是 backends/unitree.py 这份真机后端代码,只差 DDS 域号。
robot-console sim --start --model G1 # 起假机器人(DDS 域 1)
robot-console --backend sim bind --auto
robot-console --backend sim status --robot G1-01
robot-console --backend sim pose --robot G1-01 --pose stand
robot-console --backend sim say --robot G1-01 --text "大家好"
robot-console --backend sim action --robot G1-01 --name wave
robot-console --backend sim estop --robot G1-01
robot-console verify --contract g1-v1 # 核对实际发出的报文
robot-console sim --stop
故障注入(真机上几乎无法稳定复现):
robot-console sim --start --fault 7101=7302
robot-console --backend sim pose --robot G1-01 --pose stand
# → 错误:[7302] 无效的 FSM ID
一键全量验证
python tests/offline_e2e.py --model G1
python tests/offline_e2e.py --model GO2
会依次完成:起桩 → 发现绑定 → 三层状态 → 按契约跑全部命令 → 契约核对 →
护栏校验(拦截 / 限速 / 幂等 / 标定)→ 故障注入 → doctor,最后给出通过率。
也支持官方仿真器 unitree_mujoco
同一个 --backend sim 也能连官方仿真器(域 1 + 回环),无需改配置:
cd unitree_mujoco/simulate_python && python3 unitree_mujoco.py
robot-console --backend sim bind --auto # L1/L2 通过
官方仿真器只仿低层(
rt/lowcmd/rt/lowstate),不实现内置高层服务, 因此pose/say/action会返回3104超时或3203未实现——这是预期行为。 高层语义请用上面的本地假机器人验证。
真机注意
- FSM 编号与动作 ID 已逐行对照官方源码定案,见
src/robot_console/constants.py。 - 不同固件的 FSM 编号可能漂移(社区实测 G1 的"站立"出现过
4与500)。 现场用config --set-fsm G1:stand=4标定即可,不需要改代码。 - 机器人若处于调试模式,内置运控退出,高层接口会失效。
ChannelFactory是进程级单例,一个进程只能连一个 DDS 域; 要同时连真机(域 0)与仿真器(域 1),必须拆成两个进程。
目录与安全
- 配置、审计日志默认落在
~/.robot-console/(可用ROBOT_CONSOLE_CONFIG_DIR覆盖)。 - 所有控制指令写入
audit.jsonl,敏感字段自动脱敏。 - 硬约束:
duration0.5–3 s,线速度 ≤0.5 m/s,角速度 ≤0.5 rad/s,越界直接拒绝而非截断。 - 高风险命令(
move/action)带幂等键,避免重试造成重复动作。 - 全部通信在本地局域网内完成,不经云端。
Metadata
Release files for robot-console-cli 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| robot_console_cli-1.0.0.tar.gz | 85.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| robot_console_cli-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 248.1 kB
Release files / robot_console_cli-1.0.0.tar.gz
| Download URL | robot_console_cli-1.0.0.tar.gz |
|---|---|
| Size | 85.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
611e3d5ab6a690af2632e47787b91baaa095fa11d578fb9ebfef87b995c2b48e
|
|
BLAKE2b-256 checksum How to use checksums |
de3a611339860ee330d8bd1f046cb470943278fe34cd8bdc5fcb402bf17cc7bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / robot_console_cli-1.0.0-py3-none-any.whl
| Download URL | robot_console_cli-1.0.0-py3-none-any.whl |
|---|---|
| Size | 162.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b1c74eabd54db4718dc2c4fa07ea6eae80e02df2a6bcb7f0a0353815bb6b148b
|
|
BLAKE2b-256 checksum How to use checksums |
a00b50f73ab108c2da29b9e315bc566c32d8928b548a96dcac03050f70f46903
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|