返回资讯中心
外部精选
软件工程
#开发者实时流

开发者首次公开AirPods 3传感器协议,可在Linux上实现头部追踪

来源标题:AirPods 3 head tracking on Linux, and first documentation of Apple RemoteHID

开发者公开了Apple RemoteHID协议的首次公开文档,使AirPods 3和AirPods Pro的头部追踪与运动传感器数据可在Linux上、无需Apple设备即可获取。此前LibrePods等多个开源工具均将AirPods 3列为未测试或不支持。该项目还整理了AirPods 3完整传感器目录,采样率可达约210Hz而非25Hz。

Hacker News 最新theanonymousone2026/11/7 · 8 天前21 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

你的 AirPods 就是一只鼠标。 在 Linux 上,无需 Apple 设备,即可获取 AirPods 3 和 AirPods Pro 的头部追踪与运动传感器数据。 包括首次公开的 Apple RemoteHID 协议文档——AirPods 3 正是通过该协议暴露其传感器数据。 网站 · 新发现 · RemoteHID 协议 · AirPods 3 传感器 · Français 在此项目之前,没有任何公开工具能够从 AirPods 3 中获取头部追踪数据。LibrePods、librepods-rs、pods-head-tracker、 airpods-head-track 和 aap-head-tracker 均将其列为未测试或不支持。原因最终归结为三件 此前无人记录过的事情: 在此过程中:完整的 AirPods 3 传感器目录(devmotion6、accel、gyro、cma、kadabra……)、采样率高达 约 210 Hz 而非 25 Hz、运动数据块的比例尺,以及耳机如何开启和关闭其传感器。 → 所有发现,附证据和一份诚实的“尚未隔离”清单:docs/DISCOVERIES.md。 AirPods 3 ──── L2CAP 0x1001(AACP,MTU 2582)────▶ AAPClient ──▶ MotionEngine ──▶ Controller ──▶ /dev/uinput ──▶ 光标 │ HostConnect ◀─────────────────────────────────┤ 陀螺仪 + 重力 鼠标 / 指针(Wayland、X11) │ DeviceConnect ×8(HID 描述符)──────────────▶│ → 偏航 · 俯仰 · 翻滚 / 滑动 │ SetReport feature 1 = 10 000 µs ◀─────────────┤ │ │ InputReport @ 100 Hz(58 字节块)────────────▶│ http://127.0.0.1:8737(应用) AirPods Pro 2 ── 相同,通过 SensorDataWX(protobuf,0x100000)──┘ 无需 root 即可连接:L2CAP PSM 0x1001,加密链路,接收 MTU 2582。 启动传感器:AirPods 3 使用 RemoteHID,AirPods Pro / 4 使用 SensorDataWX。自动检测。 计算不依赖耳机佩戴方式的运动:偏航是绕垂直轴(取自重力向量)的旋转,俯仰是绕校准期间学习到的横轴的旋转。陀螺仪偏差在设备静止时重新估计。 通过虚拟 uinput 设备移动光标(适用于 Wayland),以 120 Hz 渲染,使用 One-Euro 平滑。 模式 模式 移动方式 感觉像 Souris(鼠标) 转头 / 倾斜,或手持一只耳机 空中鼠标,带加速度 Pointeur(指针) 瞄准屏幕 激光笔。通过瞄准两个角进行校准:瞄准一个角,光标就落在那里 Glisse(滑动) 将一只耳机平放在桌面上滑动 惯性鼠标。实验性:见下方限制 点击:柄部按压、快速头部倾斜(可选)或停留。快捷键:Ctrl+Alt+C 重新居中 · Ctrl+Alt+P 暂停 · Ctrl+Alt+M 模式 · Ctrl+Alt+S 滚动。 一个仿 macOS 设置风格的本地应用(浅色和深色):电池环、实时 3D 姿态、速率图表、所有设置实时生效、引导式校准、用于启动和查询每个 RemoteHID 设备的传感器浏览器、AirPods 内部设置以及原始数据包日志。 git clone https://github.com/starman-tech/mousepods && cd mousepods python3 -m venv .venv && .venv/bin/pip install -r requirements.txt .venv/bin/python airpods_mouse_controller.py --ui # 打开应用,启动控制器 .venv/bin/python airpods_mouse_controller.py --install-hotkeys # GNOME 快捷键(可选) 要求:带 BlueZ 的 Linux,AirPods 已配对并连接,对 /dev/uinput 有写权限(大多数桌面发行版通过 uaccess 授予已登录用户)。无需 root。 .venv/bin/python airpods_mouse_controller.py --diag # 终端中显示实时速率,不控制光标 .venv/bin/python -m unittest discover -s tests # 159 个测试,无需硬件 状态:什么是真实的,什么不是 ✅ AirPods 3 运动流(RemoteHID),高达约 210 Hz 已在硬件上验证 ✅ AirPods Pro 2 运动流(SensorDataWX),25 Hz 已在硬件上验证 ✅ 鼠标模式(头部和手持耳机)、应用、快捷键 已在硬件上试用,仍在调优中。159 个自动化测试(协议、随机姿态下的引擎、校准、真实捕获回放) ⚠️ 带角校准的指针模式 仅在模拟中测试 ⚠️ 滑动模式 逐笔滑动可用。在实际滑动中:调优后,在一次捕获上 5 次滑动漂移 4 cm。耳机是圆的会滚动,且静止时传感器会冻结:它永远无法与光学鼠标相比 ⚠️ 模拟器头部追踪(opentrack、虚拟摇杆) 数据包格式、摇杆和角度数学已测试,四元数在真实捕获上已检查;尚未在游戏中尝试 ⚠️ Garmin 手表作为鼠标(可选模块) 在硬件上进行了初步测试。仅加速度计,25 Hz:见下文 ❌ 充电盒作为鼠标(耳机在内) 在 AirPods 3 上不可能:耳机在盒中时传感器已关闭 ❓ Apple PnP DeviceID 在首次成功之前已更改;可能不需要(MTU 才是关键),尚未隔离 ❓ 其他型号(AirPods 2、Pro 1、Max) 未测试 模拟器头部追踪 将 AirPods 3 和 AirPods Pro 作为 TrackIR:游戏内摄像机跟随你的头部。应用中的 Simulateurs 页面(或 --opentrack、--sim-joystick): 角度来自耳机自身的姿态四元数,已在真实捕获上与陀螺仪对照检查: 俯仰和翻滚不漂移,偏航通过一键重新居中。仅旋转(3 DoF)。 分步指南和发现内容:docs/SIMS.md。 Garmin 手表也可以驱动光标:倾斜手腕移动,双击手表点击,放下手臂 暂停。它在应用中拥有自己的页面(Garmin:连接、带实时倾斜点的引导式 5 姿态校准、 Recentrer / Recalibrer tout / Pause、速度、死区、平滑、点击力度、摇杆或指针模式)以及一个 独立窗口。 .venv/bin/pip install -r requirements-garmin.txt # 可选:garmin-ble(AGPL-3.0)+ bleak bluetoothctl # 一次,关闭手机蓝牙(仅一个 BLE 客户端) scan le pair XX:XX:XX:XX:XX:XX trust XX:XX:XX:XX:XX:XX .venv/bin/python airpods_mouse_controller.py --ui # 然后进入“Garmin”页面,输入地址,“Connecter” .venv/bin/python -m garmin.garmin_mouse --address XX:XX:XX:XX:XX:XX # 或独立窗口 限制:手表仅实时传输其加速度计数据(24.9 Hz,每 120 ms 3 个样本,12 位,无 陀螺仪),因此光标跟随手腕的倾斜而非旋转,延迟约 0.2 秒。适合

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →