From 8e871d5051d9c43776d7945d80f1e819e7ec9c36 Mon Sep 17 00:00:00 2001 From: LengedZhao <867178694@qq.com> Date: Mon, 10 Aug 2026 13:47:51 +0800 Subject: [PATCH] docs: add local OmniSocket hub deployment --- README.md | 6 +- docs/天工3.0本地同构臂遥操迁移部署指南.md | 365 ++++++++++++++++-- tg3_local_teleop/README.md | 11 +- tg3_omnisocket_transport/README.md | 8 +- .../tg3-omnisocket-hub.service | 14 + 5 files changed, 373 insertions(+), 31 deletions(-) create mode 100644 tg3_omnisocket_transport/tg3-omnisocket-hub.service diff --git a/README.md b/README.md index 9ca0d4b..2f9ac88 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,8 @@ ## 目录 - `tg3_omnisocket_transport/`:部署到 EAI 工控机;从 xTELE 的本机 5003/5001 - 读取数据,仅在左 Z + 右 C 连续 3 秒开启后注册并发送,STOP 后立即断开。 + 读取数据,仅在左 Z + 右 C 连续 3 秒开启后注册并发送,STOP 后立即断开;还包含 + 不走公网时在 EAI 运行 `kcpserver` 的本地 Hub 用户服务模板。 - `tg3_local_teleop/`:部署到机器人 Nvidia;直接接收 OmniSocket 数据,发布双臂、 双手及 `/hric/robot/cmd_vel`,并提供限速回 Home。 - `docs/`:可提交的跨机器人迁移步骤。含实测帧和现场拓扑的汇报/证据文档只保留在 @@ -22,7 +23,8 @@ https://gitea.public.snrc.site/limingjie/OmniSocketGo.git commit de3f5c96779dbe1571c10feb22fc7f2331b6b222 ``` -EAI 还需已安装并运行 xTELE;机器人端需已有 ROS 2 Jazzy、厂家消息包与驱动。 +EAI 还需已安装并运行 xTELE;本地 Hub 模式必须保留完整 OmniSocketGo 源码并编译 +`bin/kcpserver`。机器人端需已有 ROS 2 Jazzy、厂家消息包与驱动。 详见 [`docs/天工3.0本地同构臂遥操迁移部署指南.md`](docs/天工3.0本地同构臂遥操迁移部署指南.md)。 diff --git a/docs/天工3.0本地同构臂遥操迁移部署指南.md b/docs/天工3.0本地同构臂遥操迁移部署指南.md index 7beb68a..179a7c8 100644 --- a/docs/天工3.0本地同构臂遥操迁移部署指南.md +++ b/docs/天工3.0本地同构臂遥操迁移部署指南.md @@ -8,8 +8,8 @@ BrainCo Revo2 的情况。 | 地址/标识 | 示例 | IP 变化时是否修改运行配置 | |---|---|---| | 新机器人 SSH 地址 | `nvidia@192.168.41.2` | 只影响安装、维护命令;公网 OmniSocket 运行时不使用这个地址 | -| EAI SSH 地址/局域网 IP | `eai` / `192.168.5.14` | 公网 OmniSocket 模式只影响运维;第 6 节纯 ZMQ 直连时必须写入机器人 `iarm_endpoint` | -| OmniSocket Hub 地址 | `175.178.116.187:14049` | 必须同时修改 EAI 发送服务和机器人 `config.toml` | +| EAI SSH 地址/局域网 IP | `eai` / `192.168.5.14` | 公网模式只影响运维;第 6 节本地 OmniSocket Hub 模式下,机器人必须连接该局域网 IP | +| OmniSocket Hub 地址 | `175.178.116.187:14049` | 公网模式两端使用公网地址;本地模式 EAI sender 用回环地址、机器人用 EAI 局域网地址 | | OmniSocket Peer ID | `tg3-...-iarm/robot` | 每套链路必须成对匹配;换机器人时建议使用新的机器人唯一 ID | 当前公网模式下,机器人从 Wi-Fi 换到有线、DHCP 地址变化或 EAI 局域网地址变化,通常都 @@ -35,9 +35,12 @@ EAI 发送端:tg3-<机器人编号>-iarm ```text EAI --peer-id == 机器人 omnisocket_expected_sender EAI --target-peer == 机器人 omnisocket_peer_id -EAI --server == 机器人 omnisocket_server +公网模式:EAI --server == 机器人 omnisocket_server ``` +第 6 节本地 Hub 模式是地址表示的例外:EAI 用 `127.0.0.1:14049`,机器人用 +`:14049`,两者必须指向同一个 EAI 本机 Hub 进程。 + 同一台 EAI 同一时刻只应控制一台机器人。现有发送服务只有一个 `--target-peer`,迁移到 另一台机器人后要修改目标 Peer 并重启发送服务,不要用一套 TS1P 同时向多台机器人发指令。 @@ -256,7 +259,7 @@ foreign_hand_source_seen = false `iarm_age_s` 为空或逐渐变旧属于预期。身份、频率和扳机原始值先在 EAI 本机检查,完整 启动门控在 START 首帧到达机器人后执行。 -然后再保存新 Home、核对手部打开位,并按第 7 节进行现场验收。 +然后再保存新 Home、核对手部打开位,并按第 8 节进行现场验收。 ## 4. 场景 B:EAI 工控机也更换 @@ -300,6 +303,8 @@ ssh <新EAI用户>@<新EAI地址> \ ```text /home/eai/tg3_omnisocket_transport/ omnisocket_xtele_sender.py + tg3-omnisocket-sender.service + tg3-omnisocket-hub.service # 仅局域网本地 Hub 模式需要 README.md ``` @@ -386,7 +391,305 @@ omnisocket_server = "203.0.113.10:15000" 2. EAI `tg3-omnisocket-sender.service`; 3. 机器人接收端。2 秒业务帧看门狗只在活动会话内生效,待机不会反复重启。 -## 6. 场景 C:完全不经过 Hub 的局域网 ZMQ 直连 +## 6. 场景 C:局域网本地 OmniSocket Hub(推荐) + +这里的“本地链路”仍使用现有 OmniSocket sender 和机器人 receiver,只把公网 Hub +替换成运行在 EAI 工控机上的局域网 KCP Hub: + +```text +TS1P + -> EAI xTELE 127.0.0.1:5003 + 127.0.0.1:5001 + -> tg3-omnisocket-sender(合并双手目标、Z+C session 门控) + -> EAI 本机 kcpserver Hub,127.0.0.1:14049 + -> 同一可信局域网 UDP/KCP + -> 机器人从 :14049 接收 + -> tg3_local_teleop,transport="omnisocket" +``` + +公网服务器可以完全关闭。该方案保留 5001 六维手势合并、Peer 路由、session ID、 +START/ACTIVE/STOP、晚包过滤和现有断线处理,比第 7 节纯 ZMQ 回退更完整。 + +### 6.1 本地与公网配置映射 + +当前现场局域网地址: + +```text +EAI Wi-Fi: 192.168.5.14 +机器人 Nvidia wlan0:192.168.5.15 +本地 Hub UDP 端口: 14049 +``` + +两端填写的地址不同,但实际指向同一个 EAI Hub: + +| 配置位置 | 公网模式 | 本地 Hub 模式 | +|---|---|---| +| EAI sender `--server` | `175.178.116.187:14049` | `127.0.0.1:14049` | +| 机器人 `omnisocket_server` | `175.178.116.187:14049` | `192.168.5.14:14049` | +| 机器人 `network.transport` | `omnisocket` | `omnisocket`,不要改成 `zmq` | +| EAI/机器人 Peer ID | 当前成对 ID | 完全保持不变 | +| 5003+5001 合并和右 B 抑制 | 保留 | 保留 | + +EAI sender 使用回环地址,避免 EAI 自己向 Hub 的数据绕行 Wi-Fi;机器人使用 EAI 的真实 +局域网地址。Hub 必须监听 `0.0.0.0:14049` 才能同时接收回环和局域网客户端。若把 Hub +只绑定到 `192.168.5.14:14049`,EAI sender 也必须改用该地址,不能再写 +`127.0.0.1:14049`。 + +### 6.2 在 EAI 准备完整 OmniSocketGo 和 kcpserver + +本地 Hub 必须是独立的 `kcpserver -mode hub` 进程。Python `omnisocket.Session` 只有 +客户端 API,现有 sender 进程不能兼任 Hub;也不要使用 `-mode relay`,relay 仍需要另一个 +远端 Hub。 + +固定使用已验证提交: + +```text +de3f5c96779dbe1571c10feb22fc7f2331b6b222 +``` + +当前 EAI 的 `/home/eai/OmniSocketGo` 是为了 Python 扩展裁剪过的副本,缺少 `cmd/` 和 +`bin/kcpserver`,不能直接启动 Hub。应直接从上述提交导出干净源码,避免把本机 +OmniSocketGo 工作区中未提交的实验改动带到 EAI: + +```bash +git -C /home/ps/Desktop/OmniSocketGo \ + archive de3f5c96779dbe1571c10feb22fc7f2331b6b222 \ + | ssh eai 'mkdir -p /home/eai/OmniSocketGo && tar -x -C /home/eai/OmniSocketGo' + +ssh eai 'cd /home/eai/OmniSocketGo && make bin/kcpserver' +ssh eai '/home/eai/OmniSocketGo/bin/kcpserver --help' +``` + +如果执行命令的开发机没有该 Git 仓库,先从项目根 README 中的 Gitea 地址 clone, +然后用 `git archive <固定提交>` 导出;不要复制其他平台已编译的 `.so` 或 `bin/`。 + +新 EAI 还需按第 4 节执行 `make python-ext`。当前 EAI 已具备 gcc、make 和 build-essential; +`kcpserver` 本身只依赖系统 libc,不需要 Go 运行时或 FFmpeg。 + +### 6.3 为本地 Hub 创建用户服务 + +项目已提供模板: + +```text +tg3_omnisocket_transport/tg3-omnisocket-hub.service +``` + +把它安装到 EAI: + +```text +/home/eai/.config/systemd/user/tg3-omnisocket-hub.service +``` + +用户名不是 `eai` 时同步修改模板中的路径。模板内容: + +```ini +[Unit] +Description=TG3 local OmniSocket KCP hub + +[Service] +Type=simple +WorkingDirectory=/home/eai/OmniSocketGo +ExecStart=/home/eai/OmniSocketGo/bin/kcpserver -mode hub -listen 0.0.0.0:14049 +Restart=always +RestartSec=1 +KillSignal=SIGTERM +TimeoutStopSec=5 + +[Install] +WantedBy=default.target +``` + +在部署机的 TG3 项目根目录执行,直接把模板安装到 EAI 用户服务目录: + +```bash +ssh eai 'mkdir -p /home/eai/.config/systemd/user' +scp tg3_omnisocket_transport/tg3-omnisocket-hub.service \ + eai:/home/eai/.config/systemd/user/tg3-omnisocket-hub.service +``` + +默认不要开启 latency、packet-debug 或 session-stats 日志,避免长期高频写盘。然后登录 EAI, +在 `eai` 用户会话中加载并启动: + +```bash +systemctl --user daemon-reload +systemctl --user enable --now tg3-omnisocket-hub.service +systemctl --user --no-pager status tg3-omnisocket-hub.service +ss -lunp | grep ':14049' +``` + +应看到 UDP `0.0.0.0:14049`。若希望 EAI 未图形登录也能自动运行用户服务,需要管理员执行: + +```bash +sudo loginctl enable-linger eai +``` + +### 6.4 Wi-Fi、有线和防火墙 + +机器人必须能访问 EAI 的本地 Hub: + +```bash +# 在机器人执行 +ping -c 3 192.168.5.14 +``` + +当前 Wi-Fi 已确认机器人 `192.168.5.15` 能到达 EAI `192.168.5.14`,但无线 RTT 仍会有 +波动。有线直连时应使用未被厂家占用的网卡建立独立静态网段,例如 EAI +`192.168.50.1/24`、机器人 `192.168.50.2/24`,机器人配置相应写成 +`192.168.50.1:14049`。不要修改 Ubuntu `192.168.41.1` 与 Nvidia +`192.168.41.2` 之间的厂家内部链路。 + +KCP 使用 UDP,不是 TCP。不要开放 TCP 14049,也不需要让机器人访问 EAI 的 5001/5003; +这两个 xTELE 端口只由同机 sender 通过回环地址读取。若 EAI 启用 UFW,Wi-Fi 当前可限制为: + +```bash +sudo ufw status verbose +sudo ufw allow in on wlp172s0 from 192.168.5.15 to any port 14049 proto udp +``` + +有线时把网卡名和机器人地址替换成现场值。还应检查现有 UFW/云网关规则,确认没有更宽的 +UDP 14049 放行规则覆盖上述限制。OmniSocket Peer ID 不是密码或加密认证;Hub 只应监听隔离、 +可信的控制网,不要做公网端口映射。 + +### 6.5 从公网安全切换到本地 Hub + +1. 先用 Z+C 3 秒正常 STOP,等待自动 Home 完成,在机器人确认 `armed=false`、 + `returning_home=false`; +2. 确认 EAI 本地 Hub 已经 `active` 且 UDP 14049 正在监听; +3. 停止 EAI sender,防止修改期间创建会话: + +```bash +systemctl --user stop tg3-omnisocket-sender.service +``` + +4. 编辑 EAI: + +```text +/home/eai/.config/systemd/user/tg3-omnisocket-sender.service +``` + +只把: + +```text +--server 175.178.116.187:14049 +``` + +改为: + +```text +--server 127.0.0.1:14049 +``` + +`--peer-id`、`--target-peer`、5003/5001、所有超时和按键参数都保持不变。 + +5. 编辑机器人: + +```text +/home/nvidia/tg3_local_teleop/config.toml +``` + +确认: + +```toml +[network] +transport = "omnisocket" +omnisocket_server = "192.168.5.14:14049" # 或实际 EAI 有线地址 +``` + +Peer ID、`expected_iarm_id`、Home、手部、行走和厂家保护都不要改。`iarm_endpoint` 在 +OmniSocket 模式不使用。 + +6. 按“本地 Hub → 机器人 receiver → EAI sender”的顺序应用: + +```bash +# EAI:Hub 已在运行 +systemctl --user is-active tg3-omnisocket-hub.service + +# 机器人 +systemctl --user restart tg3-local-teleop.service + +# EAI +systemctl --user daemon-reload +systemctl --user restart tg3-omnisocket-sender.service +``` + +服务启动只进入待机,不会自动武装;仍需新的 Z+C 3 秒 START。 + +### 6.6 切换后验证 + +EAI Hub: + +```bash +systemctl --user is-active tg3-omnisocket-hub.service +ss -lunp | grep ':14049' +``` + +机器人待机状态应看到: + +```text +armed = false +iarm_transport = omnisocket +iarm_endpoint = omnisocket://192.168.5.14:14049/tg3-009027fa8190-robot +iarm_transport_status.connected = true +iarm_transport_status.registered = true +foreign_source_seen = false +foreign_hand_source_seen = false +``` + +EAI sender 待机时仍持续读取本机 5003/5001,但应为: + +```text +teleop_active = false +application_data_sending = false +connected = 0 +frames_sent 不增长 +``` + +然后按第 8 节从小幅双臂、扳机、右 B、其他 5001 手势到行走逐项验收。由于 sender 与 +机器人仍走原来的 OmniSocket 协议,操作按键和数据格式不变。 + +### 6.7 本地 Hub 的断线与重启行为 + +- EAI sender 活动期间仍检查 KCP feedback、发送队列和本机 5003 时间戳;异常会作废 + session,必须松开后重新 Z+C; +- 机器人仍拒绝错误 Peer、乱序和相对基线额外排队超过 300 ms 的包; +- 按现场要求删除的 0.25 秒输入陈旧解除不会恢复;活动会话连续约 2 秒收不到帧时,机器人 + OmniSocket 看门狗重启我们自己的桥并停止发布; +- 意外断网不会自动 Home,只有收到匹配的操作员 STOP 才自动回 Home; +- 本地 Hub 重启后,机器人在空闲时最多可能等待 30 秒刷新注册。最确定的恢复顺序是先 + 重启 Hub,再重启 `tg3-local-teleop.service`,确认 registered 后重新长按 START; +- 无线本地链路去掉了公网排队,但 Wi-Fi 本身仍可能抖动;正式运行优先使用隔离有线网。 + +### 6.8 恢复公网 Hub + +先正常 STOP、完成 Home,并确认公网 Hub 已启动。停止 EAI sender,把其 `--server` 恢复为: + +```text +175.178.116.187:14049 +``` + +机器人恢复为: + +```toml +[network] +transport = "omnisocket" +omnisocket_server = "175.178.116.187:14049" +``` + +然后先重启机器人 receiver,再重启 EAI sender: + +```bash +# 机器人 +systemctl --user restart tg3-local-teleop.service + +# EAI +systemctl --user daemon-reload +systemctl --user restart tg3-omnisocket-sender.service +systemctl --user disable --now tg3-omnisocket-hub.service +``` + +本地 Hub 文件可以保留。确认机器人已注册公网 Hub 且 `armed=false` 后,才做新的 Z+C 3 秒 +START。 + +## 7. 备选:完全不经过 Hub 的局域网 ZMQ 直连(当前仅 monitor-only) 这一路径不启动公网或本地 OmniSocket Hub,也不经过 `tg3-omnisocket-sender.service`: @@ -403,7 +706,7 @@ TS1P `tcp://127.0.0.1:5003` 原样写到机器人。机器人配置中的 `127.0.0.1` 会指向机器人自身, 无法访问 EAI。 -### 6.1 适用条件和网络检查 +### 7.1 适用条件和网络检查 - EAI 与机器人必须在同一可信 Wi-Fi、有线路由可达网段,或使用两端静态地址的直连网线; - EAI 地址应固定,至少配置 DHCP 保留;地址变化后必须同步修改机器人 @@ -460,7 +763,7 @@ Wi-Fi 和有线的配置方法相同,`iarm_endpoint` 始终填写“机器人 `iarm_endpoint` 改为 `tcp://192.168.50.1:5003`。网卡名必须现场确认;不要改动机器人 Ubuntu `192.168.41.1` 与 Nvidia `192.168.41.2` 之间的厂家内部链路。 -### 6.2 切换前停止公网链路 +### 7.2 切换前停止公网链路 先用正常 Z+C 3 秒 STOP 结束当前遥操,等待自动 Home 完成,并在机器人确认: @@ -478,7 +781,7 @@ systemctl --user is-active tg3-omnisocket-sender.service 第二条应输出 `inactive`。不要删除 sender、OmniSocketGo 或原来的 service;保留它们用于 回切公网模式。纯 ZMQ 模式下 EAI 的 sender `status.json` 不再是运行状态依据。 -### 6.3 修改机器人配置 +### 7.3 修改机器人配置 在机器人编辑: @@ -506,7 +809,7 @@ iarm_endpoint = "tcp://192.168.5.14:5003" # 改成实际 EAI 局域网 IP enabled = false ``` -这会禁用我们桥发布的 HBWALK 速度。完成第 6.5 节所述本地断流保护之前,双臂、手和 +这会禁用我们桥发布的 HBWALK 速度。完成第 7.5 节所述本地断流保护之前,双臂、手和 行走都只能做无发布监测,不能长按 Z+C 武装。 不要立即启动带 `--allow-publish` 的 systemd 服务。先停止并暂时禁用我们自己的机器人桥, @@ -541,9 +844,9 @@ mode = monitor-only 服务重启和检查期间必须保持 Z+C 完全松开。ZMQ 回退门控在机器人端计时,若服务启动时 已经按住 Z+C,连续 3 秒后也可能被当成新的启动请求。 -### 6.4 直连模式下协议字段与功能差异 +### 7.4 直连模式下协议字段与功能差异 -下表说明数据和代码路径是否存在,不代表当前版本已经允许运动。第 6.5 节的 ZMQ 断流门控 +下表说明数据和代码路径是否存在,不代表当前版本已经允许运动。第 7.5 节的 ZMQ 断流门控 完成前,所有运动项都保持 monitor-only。 | 功能 | 纯 ZMQ 直连的数据/代码情况 | @@ -561,7 +864,7 @@ mode = monitor-only 5003+5001 合并代理,或在局域网内运行 OmniSocket Hub;后者不经过公网,但仍属于本地 Hub 模式,不是本节的“完全无 Hub”直连。 -### 6.5 当前版本的断流风险 +### 7.5 当前版本的断流风险 此前按现场要求删除了机器人桥“输入陈旧超过 0.25 秒立即解除遥操”的自定义门控;而 `omnisocket_restart_after_stale_s=2.0` 只在 `transport="omnisocket"` 时生效。 @@ -573,7 +876,7 @@ Hub 模式,不是本节的“完全无 Hub”直连。 - 网络恢复后会直接继续当前 armed 会话,不要求重新 Z+C; - `connected=true` 不能证明数据仍然新鲜。 -所以当前纯直连配置只能按第 6.3 节以 monitor-only 验证链路。正式启用前必须实现仅作用于 +所以当前纯直连配置只能按第 7.3 节以 monitor-only 验证链路。正式启用前必须实现仅作用于 `transport="zmq"` 的断流门控,至少满足: 1. 陈旧样本不得继续 Z+C 或右 B 计时; @@ -585,7 +888,7 @@ Hub 模式,不是本节的“完全无 Hub”直连。 这不是厂家默认保护的变化;厂家关节限位、电机、碰撞和手部保护仍保持原样。 -### 6.6 从纯直连恢复公网 OmniSocket +### 7.6 从纯直连恢复公网 OmniSocket 先正常 STOP、完成 Home 并保持 Z+C 松开,然后把机器人恢复为: @@ -611,10 +914,10 @@ systemctl --user enable --now tg3-omnisocket-sender.service 机器人先确认 `armed=false`、`iarm_transport=omnisocket`;EAI 待机时仍只读本地 5003/5001,不会在新的 Z+C 3 秒 START 前发送业务数据。 -## 7. 新机器人首次现场验收顺序 +## 8. 新机器人首次现场验收顺序 全程确认防护、活动空间、急停和 HBWALK 状态。 -纯 ZMQ 当前版本若尚未完成第 6.5 节断流门控,只执行下面第 1~4 步的 monitor-only 检查, +纯 ZMQ 当前版本若尚未完成第 7.5 节断流门控,只执行下面第 1~4 步的 monitor-only 检查, 不得执行第 5 步及后续任何武装或运动测试;完成并验证断流门控后才能继续。 1. OmniSocket 模式:服务启动后保持未武装,在 EAI sender 状态中确认本地接收计数增长而 @@ -642,9 +945,10 @@ systemctl --user enable --now tg3-omnisocket-sender.service 12. 在同一行走前提下,保持左 Z,把右摇杆小幅横推,确认机器人原地转向;松开任一输入 应立即清零角速度; 13. 再次长按 Z+C 停止,观察双臂限速回到新机器人保存的 Home; -14. 仅在 OmniSocket 模式测试 Hub 短暂断线:短于 2 秒不应解除会话;持续约 2 秒无帧会 - 重建机器人接收进程,恢复后先确认未武装,再重新长按启动;纯 ZMQ 模式在完成本地 - 断流门控前禁止做运动中的断链测试; +14. 仅在 OmniSocket 模式、机器人已静止且急停可用时测试 Hub 断线:EAI sender 的 KCP + 反馈超时约为 500 ms,触发后会作废 session;机器人若持续约 2 秒收不到活动帧,会另行 + 重建我们的接收桥。不应期待断线后透明续控;恢复后先确认未武装,稳定松开 Z+C 后再重新长按 + 启动。纯 ZMQ 模式在完成本地断流门控前禁止做运动中的断链测试; 15. 记录 SSH 地址、Home、行走限速、手部端点和单食指姿态到设备档案;OmniSocket 模式 另记 Peer ID/Hub,纯 ZMQ 模式改记 EAI 固定局域网 IP、TCP 5003 防火墙范围和断流门控参数。 @@ -654,7 +958,7 @@ systemctl --user enable --now tg3-omnisocket-sender.service 范围配置:`max_forward_m_s=1.0`、`max_reverse_m_s=0.8`、 `max_angular_rad_s=0.8`;迁移到不同型号或固件时应重新核对其官方 Topic 范围。 -## 8. 常见问题 +## 9. 常见问题 ### 机器人 SSH IP 变了,需要改 `config.toml` 吗? @@ -663,8 +967,9 @@ systemctl --user enable --now tg3-omnisocket-sender.service ### EAI IP 变了,需要改 `tcp://127.0.0.1:5003/5001` 吗? 公网 OmniSocket sender 不需要修改:`127.0.0.1` 永远表示 EAI 本机,和网卡地址无关。 -但第 6 节纯 ZMQ 直连时,机器人 `iarm_endpoint` 使用 EAI 局域网地址;该地址变化就必须 -修改并重启机器人桥。 +第 6 节本地 OmniSocket Hub 模式下,EAI sender 仍使用 `127.0.0.1:14049`,但机器人 +`omnisocket_server` 使用 EAI 局域网地址;EAI 地址变化时只改机器人这一项并重启桥。 +第 7 节纯 ZMQ 直连同理需要修改机器人 `iarm_endpoint`。 ### Hub 没启动时已经长按了 Z+C,服务器恢复后怎么办? @@ -694,7 +999,7 @@ systemctl --user enable --now tg3-omnisocket-sender.service 不可以。当前桥导入并发布 BrainCo 消息,因时手是不同消息类型和 13 自由度映射,需要 单独实现适配后再部署。 -## 9. 迁移时真正需要修改的最小清单 +## 10. 迁移时真正需要修改的最小清单 同一 EAI、同一 TS1P、同一 Hub、换一台同配置 BrainCo 天工 3.0 时,最少修改: @@ -708,8 +1013,18 @@ systemctl --user enable --now tg3-omnisocket-sender.service Hub IP/端口变化时,额外同时修改 EAI `--server` 和机器人 `omnisocket_server`。 -完全不经过 Hub、切换为第 6 节纯 ZMQ 直连时,最少修改机器人 +从公网切换为第 6 节本地 OmniSocket Hub 时,最少需要: + +1. 在 EAI 部署固定提交的完整 OmniSocketGo 并编译 `bin/kcpserver`; +2. 启用 `tg3-omnisocket-hub.service`,监听 UDP `0.0.0.0:14049`; +3. 把 EAI sender `--server` 改为 `127.0.0.1:14049`; +4. 保持机器人 `transport="omnisocket"`,把 `omnisocket_server` 改为 + `:14049`; +5. Peer ID、5003/5001、Home、手部与行走配置全部保持不变; +6. 防火墙只允许机器人局域网地址访问 EAI UDP 14049。 + +完全不经过 Hub、切换为第 7 节纯 ZMQ 直连时,最少修改机器人 `network.transport="zmq"`、`network.iarm_endpoint="tcp://:5003"`,并在 当前没有直连断流门控的版本中设置 `locomotion.enabled=false`,同时停用 EAI 的 -`tg3-omnisocket-sender.service`,并仅以机器人 monitor-only 模式验证;完成第 6.5 节的 +`tg3-omnisocket-sender.service`,并仅以机器人 monitor-only 模式验证;完成第 7.5 节的 ZMQ 专用断流门控前不得启用运动发布。 diff --git a/tg3_local_teleop/README.md b/tg3_local_teleop/README.md index f269469..adb86d1 100644 --- a/tg3_local_teleop/README.md +++ b/tg3_local_teleop/README.md @@ -127,13 +127,18 @@ systemctl --user stop tg3-local-teleop.service ``` 当前 `config.toml` 由桥接程序直接建立 OmniSocket Session,不再经过机器人本机 ZMQ -接收代理。若需回退到机器人与工控机的局域网直连,可把 `network.transport` 改成 +接收代理。不走公网时推荐在 EAI 运行本地 `kcpserver` Hub:EAI sender 指向 +`127.0.0.1:14049`,机器人保持 `network.transport="omnisocket"` 并把 +`omnisocket_server` 改为 EAI 局域网地址。这样保留 5003+5001 合并、session 和 Peer +校验,完整步骤见迁移指南第 6 节。 + +若一定要完全无 Hub,可把 `network.transport` 改成 `zmq`;保留的 `iarm_endpoint` 为 `tcp://192.168.5.14:5003`。纯 ZMQ 模式只读取 5003 原始帧,不合并 5001 的其他六维手势;此前删除的 0.25 秒输入陈旧门控和下面的 2 秒 OmniSocket 重建看门狗都不作用于 ZMQ,因此断流会保留最后输入。当前切换到纯直连 时仅允许 monitor-only 链路验证:只停用行走仍不能防止陈旧 Z+C 在断网后计时或双臂/手 -继续使用旧帧。完成 ZMQ 专用断流门控前不得启用运动;完整步骤和回切方法见 -`docs/天工3.0本地同构臂遥操迁移部署指南.md` 第 6 节。 +继续使用旧帧。完成 ZMQ 专用断流门控前不得启用运动;本地 OmniSocket Hub 推荐方案见 +`docs/天工3.0本地同构臂遥操迁移部署指南.md` 第 6 节,纯 ZMQ 备选见第 7 节。 机器人侧不再以 `0.25 s` 公网输入间隔解除武装。活动会话超过 `2 s` 仍无帧时重建机器人 OmniSocket 进程;在此之前桥会保持最后一帧目标。未 START 或收到 STOP 后没有业务帧是 diff --git a/tg3_omnisocket_transport/README.md b/tg3_omnisocket_transport/README.md index ea2646f..33e1dca 100644 --- a/tg3_omnisocket_transport/README.md +++ b/tg3_omnisocket_transport/README.md @@ -11,12 +11,18 @@ EAI xTELE tcp://127.0.0.1:5003(原始帧) -> tg3_local_teleop(直接 OmniSocket Session) ``` +不走公网时仍保留这条完整 sender/receiver 链路,只把 Hub 放到 EAI 本机:sender 的 +`--server` 使用 `127.0.0.1:14049`,机器人 `omnisocket_server` 使用机器人可达的 EAI +局域网地址(当前为 `192.168.5.14:14049`),双方 Peer ID 不变。EAI 运行 +`tg3-omnisocket-hub.service`,其 `kcpserver` 监听 UDP `0.0.0.0:14049`。 +完整构建、切换、验证和回公网步骤见迁移部署指南第 6 节。纯 ZMQ 直连不是推荐主链路。 + Peer ID: - 工控机:`tg3-009027fa8190-iarm` - 机器人:`tg3-009027fa8190-robot` -EAI 上仅保留 `omnisocket_xtele_sender.py`。它以 5003 最新帧为基础,保留双臂、 +EAI 的业务发送程序是 `omnisocket_xtele_sender.py`。它以 5003 最新帧为基础,保留双臂、 Z+C 按键及诊断字段;若 5001 的双侧 `hand.position` 在 250 ms 内有效,则合并厂家 xTELE 已处理的标量或六维 BrainCoRevo2 目标。5002 的界面事件和腰、头、腿、行走、 底盘命令不会进入机器人双臂桥。 diff --git a/tg3_omnisocket_transport/tg3-omnisocket-hub.service b/tg3_omnisocket_transport/tg3-omnisocket-hub.service new file mode 100644 index 0000000..0ddf3a5 --- /dev/null +++ b/tg3_omnisocket_transport/tg3-omnisocket-hub.service @@ -0,0 +1,14 @@ +[Unit] +Description=TG3 local OmniSocket KCP hub + +[Service] +Type=simple +WorkingDirectory=/home/eai/OmniSocketGo +ExecStart=/home/eai/OmniSocketGo/bin/kcpserver -mode hub -listen 0.0.0.0:14049 +Restart=always +RestartSec=1 +KillSignal=SIGTERM +TimeoutStopSec=5 + +[Install] +WantedBy=default.target