TidyBot2 完整文档
本文档为 TidyBot2(jimmyyhwu/tidybot2)技术文档,合并多章节内容,便于离线阅读。
目录
- 概述
- 快速入门
- 硬件设置与组装指南
- 开发环境配置
- 全向移动底盘设计
- 可更换机械臂集成系统
- 实时控制循环架构
- 底座速度与位置控制
- 机械臂柔顺控制系统
- 策略训练流水线
- 底层电机控制实现
- [手机 WebXR 遥操作](#手机 WebXR 遥操作)
- 坐标系变换
- 实时通信协议
- 多摄像头集成
- 摄像头标定与设置
- 低延迟图像处理流水线
- 数据采集与存储
- 扩散策略集成
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。
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 章,涵盖概述、快速入门、硬件与开发环境、底盘与机械臂、控制与通信、视觉与数据、策略训练与扩散策略集成等,便于离线阅读。根据项目文档整理。