数字笔与光学惯性跟踪
D-POINT是一款开源数字手写笔,使用摄像头跟踪和惯性测量来实现6DoF(六自由度)输入,具有低延迟、压力感应和亚毫米级精度。
这支手写笔可在任何平面上使用,并与消费级网络摄像头兼容。
这个项目是我电气工程本科论文的一部分。我已将代码和设计文件开源,希望能对某人有用,但它并非"即插即用"的DIY项目。如果你想尝试制作它,请遵循安装指南。
设计
这是系统工作原理的简要概述。有关所有细节、文献综述和大量评估,请阅读完整的论文(注意:我尚未将其发布在线)。
硬件
手写笔的主体部分以两半3D打印而成,如下所示。手写笔内含一个力传感器、一个USB-C充电的锂离子电池,以及一个用于逻辑和蓝牙的Arduino开发板。八个印刷的ArUco 标记被粘贴在手写笔背面,用于视觉姿态估计。
视觉姿态估计(VPE)
VPE过程包括四个主要步骤:
- **标记检测:**首先,我们使用OpenCV来检测手写笔上可见的每个ArUco标记的角点。
- **滚动快门校正:**我们使用简单的2D运动模型来估计和校正观测到的角点位置上的滚动快门效应。
- **透视-n-点(PnP):**从这些角点位置,我们使用PnP算法来估计手写笔相对于相机的姿态。当可能时,我们使用前一帧的姿态作为起点,通过虚拟视觉伺服(VVS)进行细化,否则我们退回到SQPnP。
- **坐标转换:**使用校准的手写笔和绘图表面相对于相机的姿态,我们计算手写笔尖端相对于绘图表面的位置和方向。
惯性融合
我们使用扩展卡尔曼滤波器(EKF)来融合VPE估计值和加速度计和陀螺仪的惯性数据,并使用Rauch-Tung-Striebel(RTS)算法实时进行细化。为了解决相机帧延迟的问题,我们使用负时间测量更新算法。EKF是使用NumPy和Numba实现的。
使用惯性测量允许我们大幅降低相比于仅使用摄像头的实现的延迟,同时也提高了快速移动时的精度和报告率。