2.1 KiB
2.1 KiB
通信场景说明
系统拓扑
- 系统中有
A/B/C/D四个终端。 A与C在同一侧,B与D在同一侧。- 实际运行时不是一条端到端 KCP,而是两条独立 KCP 链路:
B <-> DD <-> A
C只负责 UDP 端口转发。- 整体目标是让
A与B双向通信:A -> B发送控制命令B -> A发送视频和其他反馈数据
网络情况
- 主要瓶颈在
B侧 5G 链路,A侧是有线网络,不是主要约束。 B <-> D的时延抖动较大:- 常见约
15-60 ms - 最差约
80-90 ms
- 常见约
- 带宽是明显非对称的:
B -> D约8 Mbps,偏低且不稳定D -> B约27-50 Mbps,更高但也有波动
- 工程含义:
- 控制流必须优先保障
- 视频流必须限速并具备自适应能力
- 不能默认把所有流合成一个共享传输就一定更优
三个项目的角色
OmniSocketGo- 底层传输项目
- 使用 C 编写
- 提供 OmniSocket/KCP 传输能力,以及视频发送等原生传输程序
robot-command-center- A 侧上层应用
- 主要负责接收视频帧,并提供监控/展示能力
- 当前通过本机
A-side OmniDaemon使用传输能力
tienkung-szu- 上层控制项目
- 同时包含 A 侧控制发送和 B 侧控制执行逻辑
- A 侧典型入口是键盘/Xbox sender
- B 侧典型入口是
rl_control_node.py/rl_control_node_sim.py,负责接收控制并驱动机器人行为
当前架构方向
A侧通过A-side OmniDaemon统一管理本机的控制发送和视频接收。B侧通过B-side OmniDaemon统一管理本机的控制接收和视频发送。- 核心原则:
- 控制流与视频流逻辑分离
- 每台主机通过本地 daemon 统一持有传输会话
- 后续围绕真实网络瓶颈做 telemetry、调度和速率自适应
代码原则
- 一定要精简,不能写过于复杂和冗余的代码,因为必须确保各个环节可控,在低延迟的要求下,需要细化各个环节的消耗
SSH原则
- 如果你需要SSH到某个远程端执行操作,一定要确保不做删除文件操作,确保留有记录