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

news2025/4/16 3:04:38

前言

本来针对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.coloradmin.cn/o/2334943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推流265视频,网页如何支持显示265的webrtc

科技发展真快,以前在网页上(一般指谷歌浏览器),要显示265的视频流,都是很鸡肋的办法,要么转码,要么用很慢的hls,体验非常不好,而今谷歌官方最新的浏览器已经支持265的web…

“破解”GPT-4o生图技术:万物皆可吉卜力的技术路线推测

👉目录 1 GPT-4o 的神奇魔法 2 GPT-4o 可能的技术路线推测 3 结语 最近 GPT-4o 生图模型横空出世,效果和玩法上都有突破性的进展,笔者整理了一下目前相关的技术,抛砖引玉一下,希望有更多大神分享讨论。 图源小红书恶魔…

基于SpringBoot的电影订票系统(源码+数据库+万字文档+ppt)

504基于SpringBoot的电影订票系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 首页:浏览系统电影动态。 资讯信息:获取有关电影行业的新闻和资讯。 电影信息:查看电影的详细信息和排片情况。 公告信…

07-算法打卡-链表-移除链表-leetcode(203)-第七天

1 题目地址 203. 移除链表元素 - 力扣(LeetCode)203. 移除链表元素 - 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1:[https://assets.leetc…

在线地图支持天地图和腾讯地图,仪表板和数据大屏支持发布功能,DataEase开源BI工具v2.10.7 LTS版本发布

2025年4月11日,人人可用的开源BI工具DataEase正式发布v2.10.7 LTS版本。 这一版本的功能变动包括:数据源方面,Oracle数据源支持获取和查询物化视图;图表方面,在线地图支持天地图、腾讯地图;新增子弹图&…

粉末冶金齿轮学习笔记分享

有一段小段时间没有更新了,不知道小伙们有没有忘记我。最近总听到粉末冶金齿轮这个概念,花点时间来学习一下,总结一篇笔记分享给大家。废话不多说,直接开始: “粉末冶金”是一种制造工艺,包括在高压下压实…

Retina:部署在神经硬件的SNN眼动追踪算法

论文链接:Retina : Low-Power Eye Tracking with Event Camera and Spiking Hardware 这是一篇发表在2024CVPRW上的文章,做了三个contribution: 将SNN放在Eye Tracking任务上。提出了Ini-30数据集部署到了Spike硬件上 还是挺有趣的。但是由于…

OCR API识别对比

OCR 识别DEMO OCR识别 demo 文档由来 最开始想使用百度开源的 paddlepaddle大模型 研究了几天,发现表格识别会跨行,手写识别的也不很准确。最终还是得使用现成提供的api。。 文档说明 三个体验下来 腾讯的识别度比较高,不论是手写还是识别表…

flutter 桌面应用之右键菜单

​在 Flutter 桌面应用开发中,context_menu 和 contextual_menu 是两款常用的右键菜单插件,各有特色。以下是对它们的对比分析:​ context_menu 集成方式:​通过 ContextMenuArea 组件包裹目标组件,定义菜单项。​掘金…

Cygwin编译安装Acise

本文记录Windows下使用Cygwin编译安装Acise的流程。 零、环境 操作系统Windows11Visual Studio CodeVisual Studio Code 1.92.0Cygwin 一、工具及依赖 1.1 Visual Studio Code 下载并安装Visual Studio Code, 同时安装以下插件, Task Explorer Output Colorizer …

pyqtgraph.opengl.items.GLSurfacePlotItem.GLSurfacePlotItem 报了一个错

1. 需求是这个样子的 有一个 pyqtgraph.opengl.GLViewWidget ,在应用启动时存在QMainWindow中,即父对象是QMainWindow,当业务需要时,修改它的父对象变为一个QDialog,可以让它从QMainWindow中弹出显示在QDialog里&#…

【C++初学】课后作业汇总复习(六) 函数模板

1、函数模板 思考:如果重载的函数,其解决问题的逻辑是一致的、函数体语句相同,只是处理的数据类型不同,那么写多个相同的函数体,是重复劳动,而且还可能因为代码的冗余造成不一致性。 解决:使用…

【第16届蓝桥杯C++C组】--- 数位倍数

Hello呀,小伙伴们,第16届蓝桥杯也完美结束了,无论大家考的如何,都要放平心态,今年我刚上大一,也第一次参加蓝桥杯,刷的算法题也只有200来道,但是还是考的不咋滴,但是拿不…

Numpy和OpenCV库匹配查询,安装OpenCV ABI错误

文章目录 地址opencv-python:4.x版本的对应numpyopencv-python:5.x版本的对应numpy方法2 ps:装个opencv遇到ABI错误无语了,翻了官网,github文档啥都没,记录下 地址 opencv-python:4.x版本的对应…

ubuntu18.04安装miniforge3

1.下载安装文件 略(注:从同事哪里拖来的安装包) 2.修改安装文件权限 chmod x Miniforge3-Linux-x86_64.sh 3.将它安装到指定位置 micromamba activate /home/xxx/fxp/fromDukto/miniforge3 4.激活 /home/xxx/fxp/fromDukto/miniforge3…

智能手机功耗测试

随着智能手机发展,用户体验对手机的续航功耗要求越来越高。需要对手机进行功耗测试及分解优化,将手机的性能与功耗平衡。低功耗技术推动了手机的用户体验。手机功耗测试可以采用powermonitor或者NI仪表在功耗版上进行测试与优化。作为一个多功能的智能终端,手机的功耗组成极…

使用U盘安装 ubuntu 系统

1. 准备U 盘制作镜像 1.1 下载 ubuntu iso https://ubuntu.com/download/ 这里有多个版本以供下载,本文选择桌面版。 1.2 下载rufus https://rufus.ie/downloads/ 1.3 以管理员身份运行 rufus 设备选择你用来制作启动项的U盘,不能选错了;点…

oracle 并行度(Parallel Degree)

在Oracle数据库中,并行度(Parallel Degree) 是用于控制并行处理任务的关键配置,旨在通过多进程协作加速大规模数据处 一、并行度的核心概念 并行度(DOP, Degree of Parallelism) 表示一个操作同时使用的并…

Redis-场景缓存+秒杀+管道+消息队列

缓存一致性 1.两次更新 先更新数据库,再更新缓存;先更新缓存,再更新数据库; 出现不一致问题场景: 先更新数据库,再更新缓存; 先更新缓存,再更新数据库; 两次更新的适…

系统的安全及应用

仓库做了哪些优化 仓库源换成国内源不使用root用户登录将不必要的开机启动项关闭内核的调优 系统做了哪些安全加固 禁止使用root禁止使用弱命令将常见的 远程连接端口换掉 系统安全及应用 Cpu负载高 java程序 运行异常中病毒? ps aux - - sort %cpu %mem Cpu …