头部追踪系统
系统组成
耳机定位
在环境中部署若干个接收端,在左右耳机各部署一个发射端。两发射端发射不同的zc超声信号,接收端接收信号。参考GPS卫星定位的思想,每次都选择信号质量最好的三个接收端来计算与耳机的距离,然后根据三个距离用牛顿迭代解方程计算出耳机的位置(自己手写了牛顿迭代的代码解决了matlab里solve函数计算太慢的问题)。
存在的问题:
- 计算距离时用相位好像比不用相位效果更差。因为不用相位的精度是声速除以采样率(96k)精度为3.5mm左右,但是用相位要把距离先对波长取整,而波长是8.5mm左右,虽然可以用相位进行补偿,但是实验看起来补偿效果不是太好,用相位的测得的距离波动更大一些。
- 计算位置过程中因为每次都要选择三个信号最好的接收端,导致一旦接收端切换位置就可能会出现比较大的偏移。
- 计算距离时用相位好像比不用相位效果更差。因为不用相位的精度是声速除以采样率(96k)精度为3.5mm左右,但是用相位要把距离先对波长取整,而波长是8.5mm左右,虽然可以用相位进行补偿,但是实验看起来补偿效果不是太好,用相位的测得的距离波动更大一些。
头部动作识别
把头部的动作进行分类(目前分成了六类,分别是:前后移动,左右移动,上下移动,旋转,俯仰,倾斜),然后利用耳机的位置数据来判断头部正在做哪个动作。
采用LSTM作为分类模型,用左右耳机的轨迹完成头部动作分类。每秒对耳机定位10次,把两耳机2s的轨迹作为训练数据,因为每个耳机的位置是3维,所以构造特征维度为6长度为20的数据输入LSTM训练,六分类的平均准确率达到了97%以上。
构造了一个数据集,六类动作每一类大概1000条数据,训练LSTM的效果如下。
头部朝向计算
左右耳机的位置可以看成左右耳的位置,但是只知道两个点的坐标没办法计算出头部的朝向。我们知道头部的动作近似是围绕着脖子处的一个轴点进行的,有的动作会导致轴点位置改变(比如前后左右上下移动),而有的动作不会导致轴点位置改变(比如旋转俯仰倾斜)。
在第二步识别出头部动作的基础上,如果是转动类型的动作(旋转,俯仰,倾斜),则轴点不变,如果是移动类型的动作(前后移动,左右移动,上下移动),虽然轴点发生变化了,但是轴点与两耳的相对位置基本可以认为是不变的,所以可以直接根据两耳的位置推算出轴点的位置,这里暂时只考虑了这些简单动作,没考虑复杂的移动,比如低着头移动等。最后根据两耳位置和轴点位置即可得到头部的姿态。