17 位姿追踪 · Unity 与 Meta Quest 开发
为什么学这个(项目关联)
UMI 的位姿来源 = Quest 控制器 6-DOF 追踪。需要开发一个自定义 Quest 应用,把控制器位姿实时推到电脑。原文用 Unity + Meta XR SDK + UDP 实现,并用 Claude 辅助编写编辑器脚本。
知识点清单
1. Quest 追踪原理(理解特性与局限)
- Inside-out 追踪:头显摄像头 + IMU 做 SLAM,控制器由头显光学追踪(LED 环)
- 含义:① 控制器位姿精度依赖头显看到它 → 遮挡时靠 IMU 外推;② 世界系 = 头显开机时建立的原点(会漂移、重启会变——对 UMI 数据采集:单 episode 内一致性最重要)
- 追踪频率高(控制器姿态可达数百 Hz),位姿快照带时间戳
2. 开发环境搭建(原文流程照抄可用)
- Unity Hub → 安装 Unity 6.3 LTS + Android Build Support(勾选 OpenJDK、Android SDK & NDK)
- 包管理器导入 Meta XR All-in-One SDK(含 Core/Interaction/Performance)
- 构建目标切 Android → 运行 Meta Project Setup Tool(自动修 manifest/权限/Graphics API)
- 开发者模式:注册 Meta 开发者账号 → Meta Horizon 手机 App 给设备开开发者模式 → USB 连电脑 → 头显内确认授权弹窗
- Build and Run 出 APK
3. 核心代码概念
- OVRCameraRig:场景根,含 HMD 与控制器锚点
- 读取控制器位姿:
OVRInput.GetLocalControllerPosition/Rotation(controller)(返回相对追踪原点的位姿,四元数) - 或用 XR 命名空间:
InputDevice.TryGetFeatureValue(CommonUsages.devicePosition/Rotation) - 坐标系注意:Unity 左手系 + Y-up;与 OpenCV/机器人右手系转换(x 翻转等),这是复刻时必踩的坑,先写单元测试验证
4. 数据推送(配合 18 网络传输 - TCP UDP ADB 与时间同步)
- 方案:UDP via Wi-Fi(原文选择,理由:Mac USB 口少 + UDP 实时性好不阻塞)
- 快照数据包:
{frame_id, timestamp, controller_id, position(3f), rotation(4f), trigger/grip 按钮, 夹爪宽度?} - 序列化:手动字节拼包(省)或 JSON(调试友好)
- 接收端:Python
asyncio/socketserver收包 → 解析 → 可视化
5. AI 辅助开发工作流(原文做法)
- 用 Claude 生成 Unity 编辑器脚本(Editor Script)自动化构建设置
- 用 Claude 读取 Unity SDK 内控制器网格与坐标系 → 复现 CAD 模型做标定可视化校验
- 启示:把 AI 当”跨领域胶水”——Unity/CAD/Python 三界翻译
学习资源
| 资源 | 用途 |
|---|---|
| Unity 官方 XR 教程 | 上手 |
| Meta XR SDK 文档(OVRInput 页) | API 速查 |
| Meta 开发者文档 “Developer Mode” | 设备解锁 |
| YUBI 项目(若开源) | 直接参考同类 app |
实践任务
- 💻 环境搭建:按 5 步流程装好 Unity + SDK,真机 Build and Run 官方示例
- 💻 Hello Pose:场景里读控制器位姿,OnGUI 显示 xyz + 四元数
- 💻 数据链路:位姿 100Hz UDP 推到电脑,Python 收包打印
- 💻 可视化:Python 端用 Open3D/matplotlib 3D 实时画控制器轨迹,手持走”8 字”验证追踪质量
- ✍️ 坐标系实验:把同一个静止位姿分别用 Unity 与 OpenCV 惯例画出,写出转换矩阵并单测
掌握标准(自测)
- 能从零独立完成”Quest app → UDP → Python 可视化”全链路
- 能解释 inside-out 追踪的遮挡/漂移特性对数据采集的影响
- 能处理 Unity与OpenCV 坐标系转换
- 能说清 TCP vs UDP 在本场景的取舍理由(对应原文)
关联笔记
- 网络细节:18 网络传输 - TCP UDP ADB 与时间同步
- 标定应用:21 标定系统 - 手眼标定、22 标定系统 - 支点标定、重力姿态与Quest-标记标定
- 原文对应章节:01 - 原文存档 - Dream-UMI 开发手记 “Quest应用程序”
实践记录
(学习时在这里追加:日期 / 做了什么 / 踩坑 / 疑问)