TODO
提高计算速度。现在每秒只能计算一帧,至少提到每秒10帧。
- 优化解方程
- 减小帧长,20~40ms
用轨迹来判断动作。根据过去3~5s的轨迹来判断当前在做什么动作。
再增加部署2个接收端,一共8个接收端。
感觉上面的思路可能想复杂了,可能没必要把动作划分的那么细,应该只要分别出移动和转动就可以了,因为只有移动会导致轴点改变,而转动不会改变轴点位置。
不过也没办法依据一个标准就把移动和转动完全分开,现在想到的比较好的分类标准是“两耳机移动方向是否一致”,根据两耳机移动向量的夹角来判断,如果夹角大于阈值则是旋转yaw和倾斜roll动作,如果夹角小于阈值则是移动或者俯仰pitch,阈值暂定为90度。
所以还需要第二个标准把移动和俯仰分开,目前想用的是“耳机移动方向和视线方向的关系”,因为上下移动和左右移动时是垂直关系,前后移动时是平行关系,只有俯仰既不垂直也不平行,但是这个夹角可能比较小会被误认为平行关系,所以可能会和前后移动混淆。
所以可能还需要再找到一个标准更好地区分前后移动和俯仰,但是这不太好解决,即上面思路的第5点。。。
PS: 后来又发现左右倾斜和左右移动也不好区分。。。“两耳机移动方向是否一致”这个标准好像只能用来区分左右旋转这一个动作。所以可能得考虑用“耳机中点与轴点的距离”,这个标准应该能帮助区分左右倾斜和左右移动以及前后俯仰和前后移动。
思路就是一开始全部认为是转动,一旦距离超过阈值,就认为是移动。
先把动作分为两类:一类是旋转动作和倾斜动作,另一类是三种平移动作和俯仰动作。
分类依据:相邻帧两个耳机移动向量的夹角。如果两耳机移动方向不一致(夹角大于阈值)则是第一类动作,如果方向一致(夹角小于阈值)则是第二类动作。
对于第一类动作,如果耳机移动向量与(上一帧)视线方向(几乎)垂直,则是倾斜动作,反之则是旋转动作,或者根据耳机中点是否移动来判断是不是旋转动作。
对于第二类动作,如果耳机移动方向与视线方向几乎垂直,则是左右移动或上下移动;反之则是前后移动或俯仰动作。
对于左右移动或者上下移动,则根据耳机移动向量在竖直方向的分量的绝对值大小来判断,如果在竖直方向的分量占比最大,则是上下移动,反之则是左右移动。
对于前后移动或者俯仰动作,比较难区分,目前想到的方式有
根据是否有竖直方向的分量来判断,如果有且比较大则是俯仰动作,反之则是前后移动。
根据量耳机中点与轴点的距离来判断(但是这个距离因人而异),如果距离超过固定值则是前后移动,反之则是俯仰动作。