TidyBot2 完整文档

TidyBot2 完整文档

本文档为 TidyBot2(jimmyyhwu/tidybot2)技术文档,合并多章节内容,便于离线阅读。


目录

  1. 概述
  2. 快速入门
  3. 硬件设置与组装指南
  4. 开发环境配置
  5. 全向移动底盘设计
  6. 可更换机械臂集成系统
  7. 实时控制循环架构
  8. 底座速度与位置控制
  9. 机械臂柔顺控制系统
  10. 策略训练流水线
  11. 底层电机控制实现
  12. [手机 WebXR 遥操作](#手机 WebXR 遥操作)
  13. 坐标系变换
  14. 实时通信协议
  15. 多摄像头集成
  16. 摄像头标定与设置
  17. 低延迟图像处理流水线
  18. 数据采集与存储
  19. 扩散策略集成

1. 概述

TidyBot++ 是一个专为机器人学习研究设计的开源全向移动机械臂。该综合系统提供仿真和真实机器人环境,使研究人员能够收集演示数据、训练策略,并通过基于手机的 WebXR 界面执行遥操作。

系统架构

TidyBot++ 平台由多个关键组件组成,这些组件协同工作以实现端到端的机器人学习:

核心特性

特性 描述 实现
全向移动 全向运动能力 定制移动底座 + 麦克纳姆轮(base_controller.py)
可更换机械臂 支持不同机械臂 模块化机械臂集成(arm_controller.py)
手机遥操作 基于 WebXR 的远程控制 Web 服务与坐标变换(policies.py
实时控制 10Hz 控制环、低延迟 共享内存通信(mujoco_env.py)
策略集成 扩散策略训练与推理 远程策略服务器接口(policy_server.py)

项目结构

复制代码
tidybot2/
├── Core Controllers          # 核心控制器
│   ├── base_controller.py    # 底座控制
│   ├── arm_controller.py     # 机械臂控制
│   └── cameras.py           # 多摄像头
├── Environment Interfaces    # 环境接口
│   ├── mujoco_env.py         # 仿真环境
│   ├── real_env.py           # 真实机器人环境
│   └── main.py               # 回合执行框架
├── Teleoperation System      # 遥操作系统
│   ├── policies.py           # WebXR 遥操作与策略接口
│   ├── gamepad_teleop.py     # 手柄控制备选
│   └── templates/index.html  # WebXR 网页界面
├── Learning Pipeline         # 学习流水线
│   ├── episode_storage.py   # 数据收集与存储
│   ├── convert_to_robomimic_hdf5.py  # 数据格式转换
│   └── policy_server.py     # 远程策略推理
└── Robot Models              # 机器人模型
    └── models/               # URDF 与 MuJoCo 模型

快速开始

TidyBot++ 系统支持仅仿真的工作流程以进行快速原型设计,也支持完整机器人部署以进行真实世界实验。该平台设计时考虑了灵活性,允许研究人员使用不同的硬件配置,同时保持一致的软件接口。

系统要求
  • 开发机器:用于运行仿真和数据分析
  • GPU 笔记本电脑:用于策略训练和推理(推荐 RTX 4080)
  • 迷你 PC:用于真实机器人控制的车载计算机(延迟优化)
  • 智能手机:用于 WebXR 遥操作界面
控制架构

系统采用分布式架构,实时控制循环以 10Hz 运行(constants.py#L30)。关键时序通过以下方式维持:

  • RPC 服务器:用于底座和机械臂控制的隔离实时进程
  • 共享内存:进程间的低延迟通信
  • ZMQ 协议:用于策略推理的网络通信

实时性能对机器人控制至关重要。车载迷你 PC 以实时进程优先级运行控制器,而繁重计算(深度学习、点云处理)卸载到单独机器,以避免干扰控制循环。

后续步骤

要开始使用 TidyBot++,请按以下逻辑顺序进行:

  • 快速入门 --- 设置开发环境并运行首次仿真
  • 硬件设置和组装指南 --- 如需要,构建实体机器人
  • 开发环境配置 --- 配置所有必需的软件组件

对于专注于特定方面的研究人员,深入探讨部分涵盖:

  • 机器人架构:移动底座设计、机械臂集成和控制循环
  • 仿真环境:物理设置、通信系统和渲染
  • 真实机器人控制:底座/机械臂控制、电机接口和底层实现
  • 遥操作系统:WebXR 界面、坐标变换和通信协议
  • 视觉系统:摄像头集成、标定和图像处理
  • 策略学习:数据收集、训练流水线和扩散策略集成

模块化设计使你能够专注于特定研究领域,同时利用完整的 TidyBot++ 生态系统进行端到端的机器人学习实验。

来源:base_controller.py, arm_controller.py, policies.py, mujoco_env.py, policy_server.py, constants.py


2. 快速入门

欢迎来到 TidyBot2,这是一个专为机器人学习设计的开源全向移动机械臂。本指南将帮助你在几分钟内快速搭建并运行我们的仿真环境,让你无需实体硬件即可探索遥操作、数据收集和策略训练。

系统架构概述

TidyBot2 采用分布式架构,具有清晰的关注点分离。仿真环境将所有组件整合在一台开发机器上,而真实机器人设置则将处理分散到专用硬件上。

前置要求

开始之前,请确保你具备:

  • Mamba/Conda 包管理器(推荐使用 Miniforge 发行版)
  • Git 用于仓库克隆
  • 足够的磁盘空间(示例数据和模型约需 2GB)

环境设置

步骤 1:安装开发环境

创建并激活 TidyBot2 环境。

步骤 2:设置 GPU 环境(可选)

为了进行策略训练和推理,需要设置独立的 robodiff 环境。

快速测试:仿真演示

使用我们预构建的仿真演示验证你的安装。此命令会加载 Mujoco 仿真环境并可视化回放演示片段。

核心组件概述

(见项目文档)

遥操作入门

手机遥操作系统通过 WebXR 提供直观控制。遥操作界面提供:

  • 通过手机方向进行底盘移动
  • 通过触摸手势进行机械臂控制
  • 通过按钮按下来操作夹爪
  • 机器人状态的实时可视化

数据收集工作流

收集策略训练的演示数据。执行数据收集流水线。

策略训练集成

对于机器学习工作流,系统支持远程策略执行:

  • 在 GPU 机器上启动策略服务器
  • 在仿真中执行策略

项目结构

(见项目文档)

后续步骤

准备深入了解?以下是我们推荐的学习路径:

  • 硬件设置:如果你有实体组件,请遵循 硬件设置与组装指南
  • 开发环境:使用 开发环境配置 配置你的开发工作空间
  • 架构深入:通过 全向移动底盘设计 理解系统设计
  • 策略学习:在 策略训练流水线 中探索训练流程

如需故障排除和高级用法,请参考完整的 项目文档。

来源:mujoco_env.py, models/, policies.py, templates/index.html, episode_storage.py, main.py, policy_server.py


3. 硬件设置与组装指南

本指南提供 TidyBot++ 硬件组件的组装与配置说明。TidyBot++ 为开源全向移动机械臂,移动底座支持可更换机械臂集成。

系统架构概览

硬件系统由三个主要组件通过网络架构协同工作。

硬件组件

移动底座配置 :采用麦克纳姆轮全向驱动。关键规格在 constants.py 中定义(轮子几何、编码器偏移等),组装时需配置。

机械臂集成 :支持 Kinova Gen3 + Robotiq 2F-85 夹爪(models/gen3_robotiq_2f_85.urdf)及模块化安装的替代机械臂。机械臂控制器通过端口 50001 的 RPC 服务器运行(constants.py)。

摄像头系统:多摄像头提供环境感知;Logitech 底座摄像头、Kinova 腕部摄像头,序列号等在 constants.py 配置。

组装流程

  • 步骤 1 底座平台:铝制框架、四个麦克纳姆轮、无刷电机与变速箱、电机控制器/电源/车载迷你 PC。
  • 步骤 2 机械臂安装:通用安装板、Kinova Gen3 安装、线缆与 Robotiq 2F-85 夹爪。
  • 步骤 3 传感器:底座与腕部摄像头安装与标定。
  • 步骤 4 控制系统:迷你 PC、网络、电源与急停等安全系统。

软件配置

实时控制需特定软件配置;网络:Base RPC 50000、Arm RPC 50001、Policy ZMQ 5555,认证使用 constants.py 中的共享密钥。

硬件要求与依赖

最低规格(车载迷你 PC、GPU 笔记本、网络、电源)见原页表格。依赖通过 requirements.txt 安装(mamba 创建 tidybot2 环境、pip install -r requirements.txt)。

故障排除

电机异响多与实时环延迟有关;里程计不准检查编码器偏移(constants.py);摄像头与连接问题检查序列号与 RPC 端口。实时控制器应在独立进程中运行,避免在控制环中导入 OpenCV 等重库。

后续步骤

完成硬件后:前往开发环境配置 ;查看全向移动底座设计 ;探索可更换机械臂集成系统。完整组装与机械图见官方 TidyBot++ 文档。

来源:constants.py, models/gen3_robotiq_2f_85.urdf, requirements.txt


4. 开发环境配置

本指南覆盖 TidyBot2 开发环境完整搭建:依赖安装、系统架构、仿真与真机配置。环境采用模块化架构,将实时控制与重计算分离。

系统架构概览

TidyBot2 使用分布式架构,多组件互联。

环境设置

前置 :Mamba/Miniforge、Git、实体机器人(真机测试时)。开发机 :Python 3.10.14,mamba create -n tidybot2 python=3.10.14,pip install -r requirements.txt。GPU 机:单独 robodiff 环境(diffusion_policy 仓库),用于策略训练与推理。

依赖概览

核心库(numpy、scipy)、视觉(opencv-python)、机器人(mujoco、pin、ruckig)、通信(flask、flask_socketio、pyzmq、redis)、底座(phoenix6、pygame)、数据(h5py、tqdm)、开发(notebook、matplotlib)。tidybot2 与 robodiff 分环境以避免依赖冲突。

配置常量(constants.py

网络:Base RPC localhost:50000、Arm RPC localhost:50001、Policy 5555、认证共享密钥。控制:策略频率 10Hz、控制周期 0.1s、图像分辨率 84×84。硬件:底座几何、摄像头序列号等。

组件架构

入口main.py 管理回合与节奏(step_end_time、get_obs、policy.step)。环境 :mujoco_env.py(仿真)、real_env.py(真机 RPC)。RPC :base_server、arm_server、policy_server;实时进程隔离。摄像头:LogitechCamera、KinovaCamera,统一 Camera 基类。

验证与测试

下载示例数据、replay_episodes.py --sim;GPU 环境用 diffusion_policy 的 train 脚本验证。

后续步骤

硬件组装见硬件设置与组装指南 ;基本操作见快速入门 ;时序与控制流见实时控制循环架构。详细使用与遥操作见官方 Usage Guide。

来源:constants.py, main.py, mujoco_env.py, real_env.py, base_server.py, arm_server.py, policy_server.py, cameras.py


5. 全向移动底盘设计

TidyBot2 全向底座为四脚轮全向平台,实现 (x, y, θ) 三自由度运动,采用差速转向与实时运动学变换,适合室内移动操作。

运动学架构

四轮独立转向脚轮,每轮转向+驱动共八电机。几何参数:caster 偏移 b_x/b_y、轮半径 r、传动比等(base_controller.py)。C 矩阵将操作空间速度 (x,y,θ) 映射到关节空间,随当前转向角动态更新。

控制系统

250Hz 控制、4ms 周期;实时调度(SCHED_FIFO)、指令超时保护(2.5×策略周期停动)、脚轮翻转保护。轨迹使用 Ruckig 在线生成,速度与加速度限幅。

里程计与状态估计

通过 C 的伪逆由关节测量估计操作空间速度,旋转矩阵转换到全局帧,积分得位姿。

硬件接口

电机速度控制与传动比补偿;Phoenix6 CAN,250Hz 更新、约 4ms 延迟。

仿真模型

MuJoCo 中为三自由度关节(joint_x, joint_y, joint_th),高增益位置控制;简化全向关节以兼顾策略训练效率。

安全与可靠性

单例(PID 文件)、超时电机中性、速度限幅、脚轮翻转检测。

来源:base_controller.py, base_server.py, models/stanford_tidybot/base.xml


6. 可更换机械臂集成系统

TidyBot2 采用模块化机械臂集成,仿真与真机保持统一控制接口,通过标准 API 与共享计算组件抽象不同机械臂。

架构概览

分层:硬件抽象与控制逻辑分离。

核心组件

Arm 接口 (arm_server.py):统一 arm 控制,笛卡尔命令经 IK 转为关节目标,状态与生命周期一致。IK 求解器 (ik_solver.py):MuJoCo 模型 gen3.xml,阻尼最小二乘,末端偏移 0.12m;仿真与真机共用以保证 sim-to-real 一致。控制:真机 TorqueControlledArm(kinova.py)、关节柔顺控制、1kHz 通信;仿真 ArmController(mujoco_env.py)、Ruckig 轨迹、超时与限速。

模型配置

gen3.xml(无夹爪)、gen3_2f85.xml(含 Robotiq 2F-85)、scene_2f85.xml(含底座);末端变体通过 ee_offset 配置。

集成模式

RealEnv 中 base/arm 通过 RPC、摄像头直连;arm_server 多进程 RPC,进程隔离与启停管理。关节限位、速度与加速度限制可配置;柔顺控制增益 K_r、K_l、K_p、K_d 见原页表格。

后续步骤

参见实时控制循环架构全向移动底盘设计

来源:arm_server.py, arm_controller.py, ik_solver.py, kinova.py, mujoco_env.py, real_env.py


7. 实时控制循环架构

TidyBot2 的实时控制环在感知、决策与执行间保持精确时间协调,10Hz 固定频率(constants.py),100ms 周期;main.py 中通过 step_end_time 与 sleep 严格守时。

控制环要点

每步:取最新观测 → 策略计算动作 → 执行 → 可选记录。刻意不在 step() 中返回 obs,避免策略使用过期数据(real_env、mujoco_env 注释)。

环境抽象

RealEnv、MujocoEnv 同一接口:get_obs()、step(action)、reset()、close()。RealEnv :RPC 连接 Base 50000、Arm 50001,底座/腕部摄像头;get_obs 合并 base/arm 状态与图像。MujocoEnv:多进程+共享内存,物理 1000Hz、渲染进程、ShmState/ShmImage 零拷贝。

策略执行

Policy 接口统一;TeleopPolicy(WebXR 手机)、RemotePolicy(远程推理),保持相同时序。

时间协调

主环 lookahead 计算 step_end_time 防漂移;环境非阻塞执行(RPC 立即返回或队列);始终用最新 obs,step 不返 obs。

性能与集成

确定性 10Hz、低延迟、仿真高吞吐;与底座速度/位置控制、机械臂柔顺控制、多摄像头、策略训练流水线等集成。支持 sim-to-real 一致行为。

来源:constants.py, main.py, real_env.py, mujoco_env.py, policies.py


8. 底座速度与位置控制

移动底座实现全向驱动,支持速度与位置双模式;脚轮机构 + 实时轨迹生成,具备安全与里程计估计。

控制架构

分层:底层电机控制、中层运动学变换、高层轨迹规划;250Hz、4ms 周期(base_controller.py)。

硬件与运动学

四脚轮,每轮转向+驱动;几何参数 b_x/b_y、轮半径 r、传动比、车辆几何(constants.py)。Caster 类封装单轮逻辑。运动学:C(操作空间→关节)、C_p(接触点轮速)、C_pinv(关节→操作空间),随转向角更新。

控制模式

速度控制 :支持全局/局部帧,自动坐标变换;限幅默认 (0.5, 0.5, 1.57) m/s、rad/s。位置控制:Ruckig 在线轨迹生成,平滑、加加速度受限;指令中断超过 2.5× 策略周期自动进入位置保持。

实时控制环

专用线程、SCHED_FIFO;步骤:状态更新、命令处理、轨迹更新、电机指令;含脚轮翻转检测等安全逻辑。

里程计与安全

C_pinv 得局部速度,旋转补偿后积分到全局位姿;平均朝向减小积分误差。安全:命令超时、速度限幅、电机中性、脚轮翻转保护;代码头建议启用设备、急停、碰撞传感器等。

集成与性能

base_server.py 暴露 RPC:reset、execute_action、get_state、close。性能表:250Hz、4ms、最大线速度 0.5 m/s、角速度 1.57 rad/s、线加速度 0.25 m/s²、角加速度 0.79 rad/s²。

来源:base_controller.py, base_server.py


9. 机械臂柔顺控制系统

基于阻抗的力矩控制柔顺架构,连接高层轨迹与底层电机,实现安全精确操作。

架构概览

高层动作接口、柔顺控制器、底层力矩接口;阻抗控制实现柔顺与轨迹跟踪。

JointCompliantController

双环:在线轨迹生成 + 阻抗柔顺(arm_controller.py)。增益 :K_r 惯性、K_l 刚度、K_p 位置、K_d 阻尼(腕部关节取值更小)。Ruckig OTG :关节限速与加速度,保证连续。控制律:任务空间 tau_task(位置/速度误差 + 重力)、名义模型 ddq_n、摩擦补偿 tau_f;最终 tau_c = tau_task + tau_f。

信号与安全

力矩测量低通滤波(α=0.01)降噪。命令流监控 :超过 2.5 个控制周期无新命令则保持当前姿态。关节角展开:多圈关节角连续化处理。

与高层集成

Arm 服务器:IK 解算→命令队列→状态反馈;execute_action 中 IK 将笛卡尔目标转为关节目标并放入队列。1kHz 控制环;IK 约 0.59ms/次,满足实时。

来源:arm_controller.py, arm_server.py, ik_solver.py


10. 策略训练流水线

提供演示数据的采集、存储与转换,用于模仿学习;将遥操作数据转为 Robomimic 等格式。

数据采集与存储

10Hz 采集多模态观测(constants.py)。EpisodeWriter(episode_storage.py):带时间戳的观测-动作对;每回合存时间戳目录,含 MP4(底座/腕部相机)和 pickle(timestamps、observations、actions)。异步写盘避免影响控制环。

观测与动作空间

观测:base_pose(3)、arm_pos(3)、arm_quat(4)、gripper_pos(1)、base_image(640×360×3)、wrist_image(640×480×3)。动作:base_pose、arm_pos、arm_quat(转轴角)、gripper_pos 拼接,共 10 维。

数据转换

convert_to_robomimic_hdf5.py:图像缩放到 84×84、四元数转轴角、按 demo_0/demo_1 组织 HDF5。示例:python convert_to_robomimic_hdf5.py --input-dir data/demos --output-path data/demos.hdf5

验证与回放

replay_episodes.py:仿真/真机回放、图像显示、按原 10Hz 回放。示例:python replay_episodes.py --input-dir data/demos --sim --show-images。采集时校验底座初始位姿一致性(episode_storage.py)。

集成

与主控制架构集成,10Hz 时间对齐保证观测与动作同步,便于模仿学习。后续可接扩散策略集成(22)、WebXR 遥操作(14)。

来源:episode_storage.py, convert_to_robomimic_hdf5.py, replay_episodes.py, constants.py


11. 底层电机控制实现

底盘与机械臂的底层电机控制:底盘 250Hz FOC、机械臂 1kHz 柔顺控制,实时调度保证确定性执行。

底盘电机控制

八台 TalonFX(四组脚轮:转向+驱动),需 Phoenix Pro 许可启用 FOC。参数 :控制周期 4ms、转向 40A/ k_d=0.1、驱动 10A;齿轮比多级减速。脚轮运动学 :steer_pos/drive_pos、steer_vel/drive_vel 经齿轮比换算;set_velocities(steer_vel, drive_vel) 逆解到电机速度。实时环os.sched_setscheduler(SCHED_FIFO),4ms 周期,超 5ms 告警(base_controller.py)。

机械臂电机控制

柔顺控制(导纳):K_r 惯性、K_l 摩擦、K_p/K_d 刚度阻尼;1kHz、1ms 周期。Ruckig OTG :关节速度/加速度约束,平滑轨迹。力矩管线:tau_task(PD+重力)→ 名义模型 ddq_n 积分 → 摩擦补偿 tau_f → tau_c = tau_task + tau_f(arm_controller.py)。

硬件接口与安全

Kinova Gen3 电流控制模式,1kHz 周期通信、帧 ID 防乱序;力矩→电流换算与限幅。电流限制(转向 40A、驱动 10A)、低压保护、命令中断超 2.5 周期自动禁用。与高层通过命令队列对接:底座支持全局/本地速度与位置,机械臂为关节目标+夹爪。

来源:base_controller.py, arm_controller.py, kinova.py


12. 手机 WebXR 遥操作

通过手机 WebXR 网页界面进行低延迟遥操作,触摸分区控制机械臂/底座,WebSocket 实时传姿与夹爪。

系统架构

三部分:WebXR 客户端(templates/index.html)、实时通信(Socket.IO)、服务端坐标转换与策略封装(policies.py)。触控分区 :左侧约 90% 为机械臂(位姿+夹爪),右侧约 10% 为底座;竖滑控制夹爪开合。会话 :开始回合 → 结束回合 → 重置环境;使用 pose.transform.inverse 将相机空间转为设备空间。

通信与坐标

Socket.IO 双向通信、RTT 统计。消息含 timestamp、device_id、teleop_mode(arm/base)、position/orientation、gripper_delta。坐标映射 :WebXR +X→机器人 +Y,+Y→+Z,+Z→+X;convert_webxr_pose(pos, quat) 做 -z/-x/y 及四元数转换,并加 DEVICE_CAMERA_OFFSET(如 0, 0.02, -0.04)使旋转绕设备中心。

控制模式与多设备

机械臂模式 :手机位姿映射末端位姿与朝向,竖滑控制夹爪。底座模式 :存参考位姿,相对位移转底座速度,偏航控制朝向。多设备:主设备根据触控区控制臂或底座,副设备仅控制底座;TeleopController 用 enabled_counts 分配 primary/secondary_device_id。

集成与使用

TeleopPolicy 与 main 控制环集成;python main.py --teleop [--sim] [--save] 启动,手机打开网页→开始回合→遥操作→结束/重置。RTT 监控、断线恢复、状态保持。

来源:templates/index.html, policies.py


13. 坐标系变换

全局世界系、底座局部系、末端执行器系之间的变换与里程计、IK 中的实现。

参考系概览

全局世界系 :导航与任务规划。底座局部系 :车体固定。末端系:工具中心。底座 250Hz 用 C、C_p、C_pinv 等矩阵做操作空间与关节/轮速的变换;里程计由 C_pinv@dq 得局部速度,经旋转矩阵 R(theta_avg) 转到全局,积分得位姿(base_controller.py)。

机械臂与遥操作

IK(ik_solver.py):正运动学→位姿误差(平移+四元数转角速度)、雅可比伪逆(阻尼 1e-12)、最大单步 45°。四元数 (x,y,z,w)↔(w,x,y,z)、标量取正保证唯一。遥操作:WebXR 相机→世界→底座→末端,保证手机动作直观映射机器人。

仿真与数值

MujocoEnv 与真机共用同一套变换与四元数约定;观测里 arm_quat 格式统一、标量取正。旋转矩阵正交、齐次 4×4、雅可比伪逆+阻尼、四元数归一化、BLAS 线程安全。底座 250Hz、策略 10Hz、IK 约 0.6ms/次。

来源:base_controller.py, ik_solver.py, mujoco_env.py


14. 实时通信协议

多进程 RPC(底座/机械臂)、ZMQ 策略推理、WebSocket 遥操作,满足 100ms 控制周期与 200ms 延迟预算。

RPC 与 ZMQ

底座服务 :localhost:50000,共享密钥,10Hz 控制环;Base 提供 reset、execute_action、get_state、close。机械臂服务 :localhost:50001,Arm 提供 reset、execute_action、get_state、close。进程隔离避免互相拖慢。ZMQ:REQ/REP、TCP、5555、pickle 序列化;请求 obs 或 reset,响应 action;图像 84×84、JPEG 压缩,服务端解码。

WebSocket 与时序

Socket.IO 双向,JSON 位姿与控制。主环 step_end_time = start_time + step_idx * POLICY_CONTROL_PERIOD,忙等 sleep(0.0001) 严格 100ms。策略端 200ms 延迟预算(推理+通信),最多约 2 步累积。安全:RPC 有认证;ZMQ 当前无认证,生产环境建议加固。

来源:base_server.py, arm_server.py, policy_server.py, policies.py, main.py, constants.py


15. 多摄像头集成

底座广角 + 腕部鱼眼双摄,30 FPS、低缓冲,用于环境感知与精细操作。

架构与底座相机

基类 Camera:后台线程 30 FPS 连续采图,单帧缓冲降延迟。LogitechCamera:640×360、30 FPS、MJPG、CAP_PROP_BUFFERSIZE=1;手动对焦(鱼眼时 focus=100);初始化丢弃约 30 帧稳定增益与曝光。

腕部相机与鱼眼

KinovaCamera :GStreamer RTSP,640×480、65° 对角视场;max-buffers=1 drop=true 降延迟;Kortex API 异步设对焦无穷。鱼眼:find_fisheye_center、check_fisheye_centered 轮廓/最小外接圆,校验光学中心与画面中心对齐(约 5% 容差)。

集成与性能

RealEnv.get_obs() 中 base_camera.get_image()、wrist_camera.get_image();双摄在环境初始化时创建、后台持续采图。分辨率/帧率/延迟见下表;读取节流 33.33ms,始终提供最新帧。

类型 分辨率 帧率 延迟
底座相机 640×360 30 FPS <33ms
腕部相机 640×480 30 FPS <33ms

来源:cameras.py, real_env.py


16. 摄像头标定与设置

Logitech 底座与 Kinova 腕部相机的配置、鱼眼中心校验与常量配置。

底座与腕部配置

Logitech :640×360、缓冲=1、固定对焦、30 FPS、30 帧预热;鱼眼时 focus=100,并用 find_fisheye_center/check_fisheye_centered。Kinova:GStreamer RTSP latency=0、max-buffers=1、drop=true;640×480、30 FPS、10 Mbps、手动对焦无穷;Kortex 设置在单独线程避免阻塞。分辨率/帧率/码率/对焦见文档表。

标定与校验

鱼眼中心:边缘检测→轮廓→最小外接圆→中心与图像中心偏差 <5%。初始化时断言参数、验证连接与首帧、校验鱼眼对中。constants.py:BASE_CAMERA_SERIAL、POLICY_IMAGE_WIDTH/HEIGHT=84。

来源:cameras.py, constants.py


17. 低延迟图像处理流水线

生产者-消费者线程、USB 与 RTSP 分别优化,保证 30 FPS、低延迟供遥操作与策略推理。

线程与 USB

Camera 基类:后台 daemon 线程按 33.3ms 间隔采图,BGR→RGB 写入 self.image,get_image() 立即可用。LogitechCamera:CAP_PROP_BUFFERSIZE=1、MJPEG、固定对焦、640×360、30 帧预热。

RTSP 与设置

KinovaCamera :GStreamer rtspsrc latency=0 ! ... max-buffers=1 drop=true;分辨率/帧率/码率/对焦在单独线程应用并校验。鱼眼 check_fisheye_centered:灰度→Canny→轮廓→最小外接圆→中心 5% 容差。

性能与集成

类型 延迟 分辨率 关键优化
Logitech USB <50ms 640×360 单缓冲、MJPEG
Kinova RTSP <100ms 640×480 GStreamer、零延迟

统一 get_image() 供遥操作、扩散策略与数据采集使用。

来源:cameras.py


18. 数据采集与存储

遥操作时的回合写入、MP4+pickle 存储、异步落盘与 HDF5 转换,供模仿学习使用。

存储架构

EpisodeWriter :10Hz 采集(POLICY_CONTROL_FREQ),每步记录观测(多模态+图像)、动作、时间戳;校验底座初始位姿近零。优化:图像压成 MP4(AVC1),非图像用 pickle,相较原始图像约省 60--80% 空间。每回合一时间戳目录:data.pkl + {camera_name}.mp4,目录名 YYYYMMDDTHHMMSSffffff。

异步 I/O 与转换

flush_async 在独立线程执行 _flush,避免阻塞 10Hz 控制环。转 HDF5 :图像 84×84、四元数转轴角、按 demo_0/demo_1 组织;convert_to_robomimic_hdf5.py。回放:replay_episode 按 POLICY_CONTROL_PERIOD 严格时间回放,用于校验与调试。存储量约 10--20 MB/分钟(相机数量与场景而定)。

来源:episode_storage.py, convert_to_robomimic_hdf5.py, replay_episodes.py, constants.py


19. 扩散策略集成

仿真训练好的扩散策略经策略服务器 + 远程客户端在真机上执行,支持与手机遥操作切换与紧急接管。

架构与组件

策略服务器 :加载 checkpoint,观测转张量(底座位姿、臂位姿/四元数、夹爪、双相机 84×84),输出 13 维动作(底座 3 + 臂位置 3 + 四元数 4 + 夹爪 1);6D 旋转转四元数。PolicyWrapper :观测/动作队列、前瞻推理补偿延迟、可配置延迟预算(默认 200ms)与 10Hz 控制。RemotePolicy:遥操作与策略切换、reset/回合边界、JPEG 编码观测经 ZMQ 发送。

配置与性能

diffusion-policy.patch 适配观测/动作空间与 13 维、16 步推理、601 epoch。ZMQ REP 5555、10Hz、84×84、200ms 预算。GPU、异步推理、队列预生成、JPEG 压缩;回合重置时清空观测历史与动作队列。

集成流程

加载模型→ZMQ 服务→客户端发 reset→异步推理维持动作缓冲→手机界面可随时接管。与策略训练流水线、实时控制循环衔接。

来源:policy_server.py, policies.py, constants.py


说明:本文档共 19 章,涵盖概述、快速入门、硬件与开发环境、底盘与机械臂、控制与通信、视觉与数据、策略训练与扩散策略集成等,便于离线阅读。根据项目文档整理。

相关推荐
福建佰胜张工10 小时前
3HNA006643-001 BRACKET ZB/CCIB:ABB 喷涂机器人关键结构件深度解析
网络·机器人
才兄说11 小时前
机器人二次开发机器狗巡检?全环境稳定感知
人工智能·机器人
Dick50714 小时前
ROS2 多机器人通用 Driver 层复盘:BaseRobotDriver 到多平台 Mock 切换实现
前端·javascript·机器人
朗宇芯工控15 小时前
跨越欧亚 链接全球|朗宇芯亮相2026土耳其欧亚国际工业博览会
机器人·自动化·制造·工业·运动控制系统
chen_zn9515 小时前
RLinf复现RECAP(一):从轨迹回报到优势标签
人工智能·强化学习·具身智能·vla
一颗小树x16 小时前
《机器人 具身智能 仿真搭建》IsaacSim 5.0 + IsaacLab 2.2
机器人·仿真·搭建·isaacsim·isaaclab
梦想的旅途216 小时前
企业微信外部群消息自动推送实战
机器人·自动化·企业微信
Robot_Nav18 小时前
TidyBot++ 一种用于机器人学习的开源全向移动机械臂【文献解读】
具身智能·模仿学习·轮式双臂机器人·全向移动
chen_zn9519 小时前
RLinf复现RECAP(二):优势标签驱动pi0.5的CFG训练
人工智能·强化学习·具身智能·vla