3ad29356c9
集成通用机器人数值接口、本机控制桥、LeRobot 插件和统一键盘遥操作。采用离线 CoACD 全臂碰撞配方 revision 4、局部装配区切分与结构自接触,限制直接关节位姿写入并保留安全看门狗。同步版本号、变更记录、来源许可证和兼容性验证。
本机机器人控制桥接
独立于 training_server 的实时数值接口。默认监听 127.0.0.1:8766;不导入 LeRobot、PyTorch 或训练任务,不执行代码、Shell 或服务器文件路径。
启动
从仓库根目录执行(Python 3.12):
source .venv/bin/activate
python -m pip install -e ./control_bridge
python -m mujoco_control_bridge
# 或 npm run control-bridge
未设置 MUJOCO_CONTROL_TOKEN 时,服务生成至少 256 bit 随机 token,只在启动终端显示一次。也可通过该环境变量提供自己的 token(16–4096 个可打印 ASCII 字符,不含空白)。--port 0 自动分配端口,仅测试需要;不能配置非回环监听地址。
- 在本机 HTTP 工作台加载受支持的机器人,显式选择 profile 并通过编译校验。
- 在“控制台 → 开源项目 / 外部控制”填写地址和 token,连接桥接。
- 播放,然后点击“允许外部控制”。接管会停止 Python/ONNX、锁定 1×并禁止冲突写入。
- 在另一终端给 SDK 设置相同 token(不要把 token 放进 URL、源码或命令历史):
read -rsp '控制 token: ' MUJOCO_CONTROL_TOKEN; echo
export MUJOCO_CONTROL_TOKEN
export MUJOCO_CONTROL_ENDPOINT=http://127.0.0.1:8766
通用 Python SDK
客户端路径仅使用 Python 标准库;HTTP 不使用环境代理,也不跟随重定向。接口不依赖 LeKiwi 的通道名称或数量。
import os
import time
from mujoco_control_bridge import SimRobotClient
with SimRobotClient(os.environ["MUJOCO_CONTROL_ENDPOINT"]) as robot:
descriptor = robot.describe()
values = {
channel["id"]: min(channel["max"], max(channel["min"], 0.0))
for channel in descriptor["actionChannels"]
}
start = time.monotonic()
for i in range(90):
measured = robot.get_observation() # 实际状态,不是目标回显
accepted = robot.send_action(values) # 物理步后确认,包含已接受的限幅目标
time.sleep(max(0, start + (i + 1) / 30 - time.monotonic()))
通用 SDK 要求提交完整通道集合;部分动作的保持/默认语义由具体插件处理。robot.reset() 返回新 modelEpoch 的暂停观测,并清除租约;必须在浏览器重新播放、授权,再连接。is_connected 不是永久健康承诺:距成功动作超过 500 ms 会在本地失效。
边界与故障处理
- HTTP Bearer token;WS 首帧认证。校验本机 Host/Origin,拒绝查询字符串 token、远程页面和未经认证的预检/连接。
- 一个浏览器后端、一个 Python 写入者;读取状态不取得写权限。不能自动抢占已有控制者。
- 64 KiB 帧/请求、每租约至多 100 动作/秒、8 个在途 RPC、一个最新待应用动作;旧目标被替换时返回
SUPERSEDED,不会堆积无限队列。 - 浏览器注册/认证有绝对超时;1 秒 RPC 确认期限、500 ms 动作/观测新鲜度边界。同序号心跳不刷新观测年龄。
- 暂停、断连、进程崩溃、重载、页面隐藏、冻结超时均撤销授权。轮目标归零、臂/夹爪保持实测姿态,并暂停外控仿真;不是把所有位置伺服置零。
- 回到页面或重新连接不会恢复旧命令。先检查错误、恢复关节限位,再播放/授权。
- 无 HTTPS/WSS、跨机器访问、锁步、图像流、LeRobot 数据集或训练 API。不要使用端口转发或反向代理扩大此 V1 的信任边界。
- 浏览器控制 token 仅在页面内存;不写入
localStorage/sessionStorage、工程导出或应用日志。拥有 token 的本机进程仍被视为可信控制者。
测试:python -m unittest discover -s control_bridge/tests -v。完整消息结构、错误码和扩展点见 机器人接口;LeRobot 用法见 LeKiwi 示例。