DimOS DimTELE如何工作WebRTC托管式遥操作架构深度解析【免费下载链接】dimosDimensional is the agentic operating system for physical space. Command humanoids, quadrupeds, drones, and other hardware platforms in natural language and build multi-agent systems that work seamlessly with physical input (cameras, lidar, actuators).项目地址: https://gitcode.com/GitHub_Trending/dimo/dimosdimTELE 是 dimOSDimensional 机器人操作系统内置的托管式遥操作hosted teleoperation组件你可以在任何浏览器或 Quest 头显里通过 WebRTC 远程驾驶 Go2 四足机器人等硬件平台。它最大的特点是机器人主动向外拨号dial-out连接云端 broker因此无需在机器人网络上开放任何入站端口——家庭路由器、Wi-Fi、有线局域网甚至蜂窝网络后面都能直接工作。本文带你深入拆解它的三方架构、会话建立流程与数据通道设计。核心关键词速览dimTELE / 托管式遥操作官方文档中 dimTELE 即 hosted teleoperation操作者通过 WebRTC 连接机器人Broker中继代理位于机器人与操作者之间负责视频、小地图、遥测与控制指令的中继并处理登录与权限WebRTC DataChannel 视频轨道一个RTCPeerConnection同时承载视频流与 4 条数据通道三方架构机器人、Broker、操作者浏览器dimTELE 的连接模型非常清晰你从不直接连接机器人。robot broker (Cloudflare) operator browser/Quest ───── ─────────────────── ────────────────────── POST /api/v1/sessions ───► session datachannels ◄─── operator joins cmd_unreliable ◄──── (operator → robot, lossy) ◄──── WASD / Joy state_reliable ◄──── (operator → robot, json) ◄──── ping, video_stats, estop state_reliable_back ────► (robot → operator, json) ────► pong, robot_telemetry, cmd_ack map_unreliable ────► (robot → operator, lossy) ────► minimap grid odom video track ────► broker publishes pulls ────► video sink机器人拨出The robot dials out运行teleop-hosted-go2-*蓝图后机器人向 broker 发起出站 WebRTC 会话并注册自己。因为连接由机器人主动发起不需要端口转发可穿透任意 NAT。Broker 桥接The broker bridgesbroker 居中转发视频、小地图、遥测和指令同时负责登录与哪个操作者能连哪台机器人的权限决策。浏览器接入You connect from the browser在控制台选择机器人、点击Connect浏览器拉取视频轨道并打开指令/遥测数据通道。连接成功后四条流持续流动流方向内容视频机器人 → 操作者选中相机合成的单路实时视频轨道小地图机器人 → 操作者占据栅格 机器人位姿支持点击导航遥测机器人 → 操作者电量、姿态、链路延迟/速率HUD 显示指令操作者 → 机器人驾驶输入、特技指令、导航目标、E-STOP所有面向 broker 的模块共享同一个会话——每台机器人只有一路视频轨道和一个控制平面。会话如何建立6 步拨号流程整个会话拨号、DataChannel 生命周期、视频轨道由进程级的BrokerProvider位于dimos/protocol/pubsub/impl/webrtc/providers/统一管理。完整流程机器人创建RTCPeerConnection必须使用 MAX_BUNDLE添加视频轨道与只收音频 transceiver并打开一个预留的 SCTP id 0 一次性 DataChannel随后创建 offer、收集 ICEnon-trickle机器人POST /api/v1/sessions把 offer 发给 brokerbroker 创建会话并返回 answer 与以机器人为键的session_id在setRemoteDescription前把 SDP answer 中的 candidates 跨捆绑 m-section 传播aiortc 兼容处理心跳任务轮询/sessions/{id}/heartbeat每次 ack 携带 broker 分配的cmd_unreliable、state_reliable、state_reliable_back、map_unreliable四个通道的 SCTP id。机器人据此打开/重开/关闭协商通道当state_reliable的 id 消失时说明操作者已离开——机器人随即停止运动pc.connectionState connected后CameraVideoTrack.arm()才开始下发帧丢弃操作者尚未真正能接收之前的所有帧遥测线程以telemetry_hz频率把指令面统计入站 twist 流的延迟/抖动/速率推回state_reliable_back让操作者 HUD 显示的是实际到达的指标而不是发了多少。一个精妙的细节普通createDataChannel会自动抢占 SCTP id 1而 broker 恰好常把cmd_unreliable分配到 id 1冲突会直接抛错。因此机器人在 offer 阶段就钉死一个一次性通道到 id 0id 0 是保留值broker 永远不会分配它同时强制 offer 中生成 SCTP m-line为真实通道提供绑定载体——而且这个通道必须保持打开否则在 MAX_BUNDLE 下可能连带视频传输一起断掉。四条数据通道可靠性按需分配由于 Cloudflare Realtime 桥接数据通道是单方向的发布者→订阅者每个方向都需要一条独立通道通道方向可靠性承载内容cmd_unreliable操作者 → 机器人不可靠乱序、0 重传TwistStamped / Joy / PoseStamped LCMstate_reliable操作者 → 机器人可靠JSONping、clock_report、video_stats、estop、camera_select、nav_goalstate_reliable_back机器人 → 操作者可靠JSONpong、robot_telemetry、cmd_ackmap_unreliable机器人 → 操作者不可靠可丢帧小地图占据栅格 里程计位姿设计哲学一目了然驾驶指令走丢帧可接受的无重传通道保证低延迟松键即停丢包绝不 coasting而 E-STOP、导航目标等必须送达的控制走可靠通道遥测与心跳也在可靠通道上闭环。低延迟实测四洲互踢足球有多快官方在世界杯期间做过一次极端压测旧金山、班加罗尔、布宜诺斯艾利斯、上海的四位团队成员隔着公网与托管在旧金山的 Go2 机器人实时踢球。记录到的往返指令延迟旧金山 →约 15 ms班加罗尔 →约 114 ms布宜诺斯艾利斯 →约 134 ms上海 →约 160 ms所有路线都低于典型视频通话约 200 ms 的延迟。该图的原始数据见 latency_four_continents.png仓库中图片为 LFS 管理文件在支持 LFS 的客户端 checkout 后可见。操作体验WASD 驾驶、点击导航与 E-STOP浏览器端是模态无关的——它只把设备输入流出去由机器人蓝图决定如何处理设备输入映射桌面浏览器WASD键盘TwistStamped→cmd_velQuest 3 / VR 头显左手柄 Y 前后 / X 横移右手柄 X 转向grip 加速/减速与键盘同一条TwistStamped路径按住Shift2 倍速、Ctrl半速松开按键的瞬间机器人即停。此外你还可以️小地图点击导航点任意位置发送导航目标机器人自主规划并避障到达手动驾驶随时接管并取消规划姿态与特技指令Stand / Sit / Recovery / Damp、Hello、Stretch开启--allow-acrobaticstrue后可解锁 FrontJump 与 FrontPounce。每条指令都有确认回执UI 显示的是机器人实际执行的动作E-STOP永远可用立即停止所有运动、取消导航并阻尼优先级高于一切在途指令清除前机器人不会再次移动。 在 Go2 上还有一个亮点操作者的麦克风 PCM 经go2_audio_bridge.py转发到 Go2 Pro 的扬声器通过 Unitree 官方 WebRTC 音频枢纽 API实现远程喊话。扬声器路由可通过go2audiobridgemodule.speakerauto/enabled/disabled配置。快速上手两行命令连上你的机器人在 Dimensional 控制台创建 API key一个 key 通吃 CLI、上传与遥操作在机器人侧启动托管蓝图TRANSPORTS__BROKER__API_KEYdimos_sk_... \ dimos run teleop-hosted-go2-transport打开控制台 Teleop 页面你的机器人会出现在Available Robots下点击Connect即可驾驶。可用蓝图蓝图说明teleop-hosted-go2-transport驾驶 相机 小地图 点击导航推荐teleop-hosted-go2-multicam增加第二路 RealSense操作者可切换视角合成进同一路视频轨道启用--latency-stamptrue可叠加玻璃对玻璃glass-to-glass延迟基准条搭配 recorder 还可录制会话并在断开时生成统计报告。架构背后的模块设计dimTELE 的一个关键工程取舍每个关注点都是独立小模块但它们都跑在同一个 worker 里共享唯一的 broker 会话GO2Connection驱动跑在第二个 workern_workers2。各模块职责go2_command.py —Go2CommandModule操作指令与 E-STOP 分发、手动驾驶守卫通过rpc触达驱动camera_mux.py —CameraMuxModuleN 路相机 → 一路合成、限帧的视频轨道map_compress.py —MapCompressModulecostmap 里程计 → 小地图通道粗化 PNG 编码压在 32 KB 预算内——Cloudflare 会丢弃超过约 64 KB 的消息go2_audio_bridge.py —Go2AudioBridgeModule操作者麦克风 PCM → Go2 扬声器HostedStatsModule— 遥测帧、指令确认与链路延迟/速率统计。安全边界同样由机器人侧兜底指令超过cmd_stale_after_sec默认 0.5s即丢弃、线速度/角速度被max_linear_mps1.5/max_angular_rps2.0钳制、超过max_nav_goal_m100m的点击导航目标直接拒绝。damp_on_operator_losttrue时操作者链路断开会自动让机器人进入阻尼状态。断线重连方面操作者侧重连由 broker 处理broker 先关闭过期的state_reliable_back推送再重新推送Cloudflare 不会自动回收 datachannel 推送否则会累积半死推送导致 502。机器人侧自动重拨仍是待办事项但 TURN 已落地broker 签发凭证 STUN 回退网络穿透已不再是阻塞点。延伸阅读与源码导航资料路径dimTELE 官方文档托管式遥操作docs/capabilities/teleoperation/hosted.md会话与 DataChannel 细节READMEdimos/teleop/hosted/README.md托管遥操作模块目录dimos/teleop/hosted/WebRTC pub/sub 实现与 BrokerProviderdimos/protocol/pubsub/impl/webrtc/托管蓝图接线dimos/teleop/hosted/ 下的blueprints/cloudflare.pyGo2 键盘遥操作蓝图本地版对照dimos/robot/unitree/go2/blueprints/basic/unitree_go2_webrtc_keyboard_teleop.py遥操作控制协调器dimos/control/teleop_coordinator.py一句话总结dimTELE 用机器人主动拨出 broker 桥接 单会话多模块的架构把 WebRTC 的音视频能力与机器人控制平面缝合在一起——零端口、穿任意 NAT、四洲延迟可控让在浏览器里开机器人真正可用。【免费下载链接】dimosDimensional is the agentic operating system for physical space. Command humanoids, quadrupeds, drones, and other hardware platforms in natural language and build multi-agent systems that work seamlessly with physical input (cameras, lidar, actuators).项目地址: https://gitcode.com/GitHub_Trending/dimo/dimos创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
