当前位置: 首页 > 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. 这些共享数据结构允许实时、低延迟的数据传输

// 待更


http://www.mrgr.cn/news/98270.html

相关文章:

  • 高并发内存池(三):PageCache(页缓存)的实现
  • python基础:数据类型转换、运算符(算术运算符、比较运算符、逻辑运算符、三元运算符、位运算符)
  • CTF--bp
  • Kubernetes服务注册到consul流程实践
  • ArkTS语言入门之接口、泛型、空安全、特殊运算符等
  • vulkanscenegraph显示倾斜模型(5.9)-vsg中vulkan资源的编译
  • 基于PySide6与pycatia的CATIA绘图比例智能调节工具开发全解析
  • 入门到精通,C语言十大经典程序
  • 从0到1使用C++操作MSXML
  • C语言十大经典数学应用
  • 考研单词笔记 2025.04.13
  • 【甲子光年】DeepSeek开启AI算法变革元年
  • Go:方法
  • 【随身wifi】青龙面板保姆级教程
  • C语言的发展史
  • cursor+高德MCP:制作一份旅游攻略
  • 2025蓝桥杯C++ A组省赛 题解
  • 【嵌入式人工智能产品开发实战】(十九)—— 政安晨:小智AI嵌入式终端代码解读:【A】应用入口
  • 【深度学习与大模型基础】第10章-期望、方差和协方差
  • 【NLP】18. Encoder 和 Decoder