当前位置: 首页 > news >正文

Open-TeleVision源码解析——宇树摇操方案的重要参考:VR控制人形机器人采集数据

前言

本来针对Open-TeleVision的源码解析,是打算放在此文《从宇树摇操avp_teleoperate到unitree_IL_lerobot:如何基于宇树人形进行二次开发》中的,但考虑到为避免篇幅过长,故独立成此文

第一部分 Open-TeleVision的源码解析

如本文开头所提到的, 此文《UC San Diego的三大机器人:AnyTeleop、Open-TeleVision、Bunny-VisionPro——从RGB相机到VR远程控制机器人》第二部分介绍了Open-television,其GitHub地址为:github.com/OpenTeleVision/TeleVision

接下来,我们来整体了解下该television库的整体结构——不过 不逐行分析了

该项目主要分为以下几个核心部分:

  1. 远程操作系统(teleop/)
  2. 模仿学习模块(act/)
  3. 机器人资源文件** (assets/)
  4. 辅助脚本(scripts/)
  5. 图像资源** (img/)

2.1  远程操作系统 (teleop/)

这是项目的核心部分,负责实现远程操作功能

2.1.1 TeleVision.py

核心类 `OpenTeleVision`,负责初始化远程操作系统,处理视觉反馈和用户交互。它通过 `vuer` 库创建用户界面,并处理手部移动和相机移动事件

2.1.2 teleop_hand.py

处理手部跟踪和控制,将用户手部动作转换为机器人手部控制命令

2.1.3 teleop_active_cam.py

实现主动摄像机控制逻辑,根据用户头部动作调整摄像机视角

2.1.4 Preprocessor.py

处理输入数据预处理,如手部姿态和头部位置的标准化

2.1.5 motion_utils.py

提供运动相关的实用函数,如姿态变换和平滑处理

2.1.6 constants_vuer.py

定义系统中使用的常量

2.1.7 dynamixel/ 子目录

  1. dynamixel_robot.py:实现 Dynamixel 电机控制的机器人类,继承自基本的 `Robot` 类
  2. active_cam.py:控制主动摄像机,通过 Dynamixel 电机调整摄像机朝向
  3. robot.py:定义基本机器人接口,提供关节控制等基础功能
  4. driver.py:Dynamixel 电机驱动程序,负责底层电机通信和控制
  5. agent.py**:实现代理类,用于机器人行为策略的执行

2.1.8 webrtc/ 子目录

  1. zed_server.py:ZED 立体摄像头的 WebRTC 流媒体服务器,用于捕获和传输高质量视频流
  2. webcam_server.py**:普通网络摄像头的 WebRTC 服务器实现
  3. webcam.py:网络摄像头处理逻辑,用于捕获图像
  4. client.js和 **index.html:前端界面代码,用于显示视频流和交互

2.2 模仿学习模块 (act/)

这部分实现了基于视觉的模仿学习功能

2.2.1 imitate_episodes.py:处理训练数据和学习过程

模仿学习的主要脚本,处理训练数据和学习过程

2.2.2 policy.py:策略网络,将视觉输入映射到机器人动作

定义机器人策略网络,将视觉输入映射到机器人动作

2.2.3 utils.py

提供模仿学习相关的实用函数

2.2.4 detr/ 子目录

这是基于 DETR(DEtection TRansformer)的视觉模型实现

- models/:
  - detr_vae.py:结合 DETR 和变分自编码器的视觉模型。
  - transformer.py:Transformer 架构实现。
  - backbone.py:视觉骨干网络,如 ResNet
  - position_encoding.py:位置编码实现

- util/:
  - box_ops.py:处理边界框操作的函数
  - misc.py:实用函数集合
  - plot_utils.py:可视化工具

2.3 机器人资源文件 (assets/)

包含机器人的 3D 模型和配置文件

2.3.1 h1_inspire/

包含 Inspire 机器人的 URDF 模型、网格文件和启动脚本

2.3.2 inspire_hand/

Inspire 机器人手部的 URDF 模型和网格文件

2.4 辅助脚本 (scripts/)

包含用于部署、评估和数据处理的脚本

2.4.1 deploy_sim.py:部署仿真环境的脚本

2.4.2 replay_demo.py「回放演示数据的脚本

2.4.3 plot_action.py:绘制机器人动作的脚本

2.4.4 post_process.py:后处理数据的脚本

2.5 核心调用关系

2.5.1 远程操作系统的调用流程

  1. TeleVision.py 作为入口点,初始化 `OpenTeleVision` 类
  2. 它使用 `webrtc/zed_server.py` 或直接共享内存图像来提供视觉反馈
  3. 当收到用户交互事件时(如手部移动或相机移动),调用相应的处理函数
  4. 手部控制通过 `teleop_hand.py` 实现,将用户手势转换为机器人控制命令
  5. 摄像机控制通过 `teleop_active_cam.py` 和 `dynamixel/active_cam.py` 实现

2.5.2 机器人控制链

   - `teleop_hand.py` → `dynamixel/agent.py` → dynamixel_robot.py → `dynamixel/driver.py`
   - 从高级手势识别到低级电机指令的转换过程。

2.5.3 视觉反馈路径

   - `webrtc/zed_server.py` 捕获 ZED 摄像头数据
   - 通过 WebRTC 协议将视频流传输到客户端
   - 客户端通过 `webrtc/client.js` 和 `webrtc/index.html` 显示视频流

2.5.4 模仿学习流程:收集和处理数据,之后DETR提取特征、策略训练、控制

  1. imitate_episodes.py 收集和处理用户演示数据
  2. 使用 detr 中的视觉模型提取特征
  3. policy.py 学习将视觉状态映射到机器人动作
  4. 学习后的策略可用于自动化控制

2.5.5 数据共享机制

  1. 系统使用进程间通信机制,如共享内存、队列和事件
  2. 手部姿态数据通过 `left_hand_shared` 和 `right_hand_shared` 共享数组传递
  3. 头部位置数据通过 `head_matrix_shared` 共享
  4. 这些共享数据结构允许实时、低延迟的数据传输

// 待更

相关文章:

  • 【Docker基础】Compose 使用手册:场景、文件与命令详解
  • 数据结构第五版【李春葆】
  • AWS出海合规解决方案:全球业务扩张的技术指南
  • 深度学习理论-直观理解 Attention
  • 【语音识别】vLLM 部署 Whisper 语音识别模型指南
  • 理解 MCP 协议的数据传递:HTTP 之上的一层“壳子
  • Spring State Machine入门实践
  • 算法思想之位运算(二)
  • C语言编写的线程池
  • 【Mybatis-plus】应用笔记及用例(持续更新)
  • esp32-idf Linux 环境安装教程
  • 【Code】《代码整洁之道》笔记-Chapter9-单元测试
  • 《Vue Router实战教程》1.设置
  • c#和form实现WebSocket在线聊天室
  • MATLAB求和∑怎么用?
  • CAP 定理与 BASE 定理在 .NET Core 中的应用
  • 操作系统学习笔记——进程间通信方式详解及优缺点对比,僵尸进程,孤儿进程,守护进程
  • 抗干扰CAN总线通信技术在分布式电力系统中的应用
  • 科技自立+产业周期:透视人工智能的配置机遇
  • RTP Payload Format for H.264 Vide(1)
  • 扶余市建设局网站/职业培训学校加盟合作
  • 如何推广B2C购物网站/手机360优化大师官网
  • 什么网站可以找试卷做/房地产估价师考试
  • 网站广告案例/铁岭网站seo
  • dede关闭手机网站/什么时候网络推广
  • 济南网站优化排名/seo论坛站长交流