基于绝对定位技术的大屏遥控器交互设计

Published on October 23, 2023

31 min READ


Intro

这个项目自2022年夏天始,历经各种波折和推延,涉及到校企联合和毕业设计等多方利益,最终随着本科毕业终于盖棺定论。

实习 Internship

大三和大四之间的暑假,按照惯例系里会安排去各个互联网公司实习。说是实习,其实很多公司给的岗位和工作都比较清闲,加上基本所有的实习都是没有工资的1,所以这门专业实践自然也广为诟病。而这门课又是自动计P/F2的,自然大部分同学也和公司领导一块儿能混则混。

而就在实习摸鱼的过程当中,导师找到我并安排了一个企业的项目。当时我还没有所谓纵向横向之类的概念,并且我也早早确定了推研的去向,所以当时也没有太将这个项目放在心上。我还记得当时第一次开会,是在实习公司的某层楼的楼梯拐角,那里不会影响工位那边的环境,并且堆放了很多物资和凳子,我可以有一个比较方便的开会环境。在那个线上会议上,我认识了之后要互相拉扯近一年的负责人,以及在我科研路程上帮助良多的学长。负责人在会议里展现了这个项目的伟大宏图,并且确定了几个清晰的研究问题3。而由于我名义上确实有在实习,并且随着疫情暂时转好实习转为线下,我能分配的时间比较少,所以开始的几周并没有太多的开发任务布置。

绝对定位 Optitrack

实习结束之后,这个项目成为了大四的主要工作。在实习和大四开学的空挡,是我项目进展最快的几周。项目的主要交互方式是遥控器的指向,这其中包含了绝对和相对。相对指向比较容易,毕竟基于IMU的设备还是太多了,而且相应的算法也比较成熟。普通手机就能模拟交互。难办的是绝对指向,由于企业方面使用UWB的硬件设计并未确定下来,所以我也没办法用上,从而需要基于光学动捕设备——Optitrack4

Optitrack并不是新朋友,在上个项目我曾经接触过,但由于只是使用,并未涉及设备的搭建和环境的配置。当时由于使用空间小,五六个红外摄像头可以较好地重叠,但是如果要把场景扩展到大屏,当时的小办公室就不够用了。随之而来的问题,是实验室所配备的设备似乎并不能覆盖大屏场景所需要的3米长、1.5米宽的区域。我花了一些时间,将所有设备从小办公室搬到了旁边的大房间,同时也询问了学长关于设备参数的问题,经过计算和实践检验之后,发现能较好追踪的最大区域也不过边长为1米的正方形。

为了解决这个问题,我先进行了简单的尝试。既然没办法覆盖包括大屏在内的区域,那么也许可以只追踪包含用户在内的小区域,并且通过一些计算提前获得大屏的位置和参数。毕竟在用户的使用过程中,大屏的位置应该是不会频繁移动的。我开始将大屏相对于能被追踪的桌子的位置固定下来,并且大屏的尺寸也是能提前获取的5。这样就能通过将坐标系和桌子固定下来,简单地获得大屏的大致坐标。为了获得用户的指向,我直接用两个反光标记定义一条射线,并且在使用过程中觉得这样简单的布置已经能够获得不错的效果。

我将这个问题和方案汇报之后,得到的仍然是关于精度不够的质疑。大屏的位置坐标等等参数的精度到底怎么样,遥控器的指向误差到底有多少等等,甲方的对接人似乎还是对这个问题穷追不舍——到底能不能将整个空间都纳入光学追踪。我再三解释,基于现有的设备这已经是最好的解决方案了,直观,并且效果好。但是针对这个问题仍然拉扯了两月之久。直到我后来将激光测量仪、3D打印模具引入项目,给出了指向误差不超过10厘米的结果后,争论才逐渐消退。

原型 Prototype

由于这个项目的硬件和软件算法是同步进行的,所以我的实验中只能通过借用友商的设备来作为设备原型进行开发。由于我没有苹果开发设备,负责人方面也帮助开发了Apple TV的遥控器相关插件,我这边只需要借用苹果设备进行部署就可以接入后续的平台使用6。而指向方面则不依赖于遥控器事件,实现方式则是将遥控器、反光标记固定在设计好的模具上,这样便实现了绝对定位的简单原型设置。

球形模型 Smart Spherical

项目的核心之一,是负责人要求实现并且调整的一种新的指向算法——球形模型。这是一种结合了绝对指向和相对指向的算法,但是其可行性、参数和效果都有待考证。在简单实现了指向后,我便开始开发球形模型的算法。在半个月一次的会上,我将这种算法的基本原理、实现和初步实验结果进行了汇报,但是随之而来的是甲方的不解和质疑。对于远距离大屏定位、指向算法和球形模型的实现,似乎甲方们并不感冒,而且还对我的实验结果汇报颇有微词。那次会议也让我感受到了所谓大厂的人机交互和高校实验环境的区别7。在那之后负责人也单独和我聊过几次,我的主张还是各种交互设计至少要经过简单的定量实验后才能断定其表现,不能依据开发者或用户主观的评价,而负责人则是希望能够尽快地试一试所有可能的设计。虽然开始时对于这种模型的参数,包括用户端的和遥控器端的,以及更复杂的显控比函数都有着很多的设计,但由于时间原因最终没能全部试用。

并且负责人对于交互的要求也存在一些甲方特有的反复横跳。最难接受的其实是我要求做一些定量实验时,他希望能通过一些主观感受来判断;而我给出一些显然较差的交互结果时,他又总是追问相关的数据支持。导致我后期总是倾向于否定新的交互设计,只是在最初的设计的基础上进行一些参数和算法的优化和微调。

滑动设计 Move or Slide

第二个问题是滑动的设计。由于设备的设计初衷是想表现为遥控器一般的鼠标,自然是需要除了移动光标外,还能有等同于滚轮的滑动功能。在项目初期,负责人曾经画过四种滑动设计的大饼8,到后来研究问题变成了如何对用户移动光标和滑动操作进行分类。对这个问题一开始是讨论了简单的阈值规则,后来导师又建议使用机器学习的方法。在进过几次数据采集和训练,而且还同时尝试了多种学习和网络结构后,我逐渐发现了数据中的瓶颈——用于开发的遥控器触摸板的触点帧率不足9,或者说即使是原生的信号似乎也经过了硬件本身的滤波处理,导致在用户的动作一旦慢下来,即容易被滤波器消除时,两种操作是不可避免地混淆的。在充分研究了触点数据之后,我将结论和算法模拟结果作了汇报,这也导致了这个问题在之后的实际产品中并未使用我的设计和解决方案。

然而我并未完全放弃这个问题,在最后的毕设中,我仍然将其作为成果的一部分,一方面存在沉没成本的影响,我还是花了不少甚至可以说很多时间在这些算法和实验上的,包括将神经网络嵌入我的前端平台,以及招募被试来体验我的模式切换算法。尽管最后的报告采用的仍然是传统的统计和阈值规则,但总之最后的结果能比较好看。

点击抖动 Heisenberg Effect

第三个问题是点击抖动,当时提出是基于使用遥控器点击时会产生瞬时抖动的观察。负责人开始时提供了一个思路,即从当前点击事件往前一段时间,找到用户真正想点击的位置。当时我做了简单的统计,我触碰到触摸板准备点击到真正按下按钮的时间间隔,结果是平均值是可接受的,但是标准差异常的大,并且各用户间的差异也很大。再后来我又基于开发平台进行了模拟的测试,发现按照一定时间回溯的方法虽然比较呆,但是对于典型的抖动行为的修正的效果还是比较好的。关键在于什么是典型的抖动行为,因为从各种维度上考虑,修正需求差异很大的行为表现是几乎相同的。由于前两个问题也一直在纠缠,这个问题就暂时搁置了,停留在一些简单的结论上。

疫情、封控和开题 The Pandemic, Isolation and Proposal

时间从十一月一转就到了十二月,秋天时乐观的疫情也在这个到来的冬天变得形式严峻。随着校园内外的感染情况增多,同学们也变得人心惶惶,开始传出提前遣送回家的小道消息。十一月末,一些同学已经开始将回家提上日程,而我由于项目的关系一直留在学校。楼层里和实验室的同学越来越少,被试也逐渐变得难以招募,大部分的时间都是我一个人在实验室进行开发和调试。到十二月上旬,正式的遣送通知出来后,校园也和这个冬天一样迅速萧瑟。食堂也针对校园的人数作了调整,连菜品的种类也变少了。大批返乡的另一个隐患是,如果程序链中的苹果生态的软件不幸崩溃10,我必须找还在校的同学借用Mac来操作,这在疫情蔓延的背景下也是极其困难的。负责疫情防控的辅导员多次私聊我,询问我的返乡计划,我也都只能坦言等导师和甲方方面的通知。开会时我也反映了校内的情况,对返乡意愿进行了一些旁敲侧击,但是依然没有得到正面的回复。

十二月中旬,随着封控日益缩紧,基本上我每天的行程都是早上起床后在宿舍吃早饭,工作一会儿到中午,去听涛拿盒饭直接到FIT楼实验室旁边的空间吃,然后在实验室忙到六点左右,再去紫荆拿盒饭回宿舍吃。那几天在吃午饭的时候,经常会遇到同楼层的保洁阿姨,她也会在那儿吃盒饭。我们就在那个会议桌的两端默默地吃着,有一天我一下打不开盒饭的盖子,她还笑着说“你那样、那样开,对”。后来就没太看见她了,估计也是感染了或者返乡了吧。

果不其然没几天我的情况也恶化了。其实从月初我感觉体温就有一些高,以及头有些晕,但是一直以来没有发烧,而且也有实验室的暖气通风确实也没那么好。所以我怀疑是当时有一些轻状的感染,但是由于病毒的浓度较低,一直没有爆发出来。后来由于我每天都去实验室,也没有每天消毒,病毒浓度上去之后免疫系统就不太够用了。当时已经有了放开的风声,所以也只是和辅导员汇报了一下,并且由于之前发了很多抗原和母亲提前预备的药品,也没有太缺物资。桃李也专门开放了阳性窗口和通道,只负责给阳性的同学拿饭,阿姨也是比较贴心,总是会给多一些饭菜和水果11。第一周几乎每天都只有中午一段时间比较清醒,烧迷糊了就往床上一躺,洗澡也是尽量减少次数以避免着凉。刀片嗓也是前几天比较严重,也是多亏了北京舍友的家长送来的润喉糖,后面几天也不是那么难受了。第二周基本退烧之后,身体也基本恢复过来了,就是每天仍然比较嗜睡。一开始汇报我阳的结果之后,负责人也说他阳了12,所以这半个月基本没啥进度。到月底我和导师单独问返乡的事情,他表示会和负责人沟通一下。

因为之前的安排是十二月底结题,结果给疫情整这一出直接推迟了。而且我觉得结论也比较清晰之后,他还是觉得有一些问题没解决。但是好说歹说还是让我回家了,并且提前录入一些数据回去好分析。同时由于开题也是基于这个项目,所以我的进度也是很快,将给甲方的报告小改一下直接开题其实没问题。回家过年期间,项目的事情也总是让人焦虑,甚至大年三十下午还通知要开会对进度13。我也尽量把事情推到开学后,到线下结合设备试一下效果再汇报。

忙碌的春天 Busy Spring

大四也像之前一样很早就回学校了,甚至由于回校过早把高中宿舍聚会给提到了大年初八。回来之后依然是投入项目中,针对滑动和点击抖动的问题。滑动问题主要是验证了之前的假60帧猜想,数据精度实在不支持行为预测,哪怕是使用机器学习的方法。而且算法表现也和用户的使用方式关系很大,所以之后也逐渐放弃了这个问题。点击抖动成为了重点,我也找到了以前工作中的相关做法,发现对于这个场景的帮助也聊胜于无。在几次讨论后,问题又聚焦在了用户意图点击位置上,为了收集到正确的数据,我又再引入了压力膜,贴在遥控器上,以压力显著增大的时刻作为用户真正想点击的位置。在做了用户实验后,把数据进行综合分析,发现还是一开始的时间回溯法效果最好,其他方法似乎都需要一些复杂的自适应过程。

在压力膜引入并且给出结论后,终于用数据终结了更多的需求的提出。我的舍友则在接了下游的文本输入任务后,也要和我这边的平台进行对接,后面的需求更换和用户实验也搞得他挺emo的。在其他同学都在忙碌着毕设的进度和中期汇报时,我则在忙碌地准备项目的中期和结题汇报。负责人给导师发了PPT的参照,要不就是内容和数据非常多要不就是充满了很多文献的调研总结,这对于我们的交互设计报告属于是太为难了14。我按照要求好说歹说修改了几版,由于之前的拉扯已经太久,所以汇报时也没有更多的问题,我就直接棒读完PPT就草草结束。

结题 The End

结题也就在中期之后不久,除了汇报的PPT,还需要一些所谓调研的材料、技术文档之类,我们也不想多搞,稍微凑凑字数了事。也是由于项目的结题,我直接将工作整理成毕设的文章,一些被负责人否决的问题又被我整理到了论文里,也显得整体思路比较连贯。在结题之后我和负责人的联系终于停止了,只有他不时对项目里的一些细节有一些提问,我都尽量显得不耐烦地回答15

注释 Notes

  1. 本来还是有一些公司给出按日的工资和补贴,但后来居然被负责老师叫停了。 

  2. Pass or Fail,只要总评及格统一计P,并且不计入GPA计算。 

  3. 在当时看来还是比较清晰的,但是随着研究深入可能后期走偏了。 

  4. 红外光学动捕系统,利用特定的反光标记来绝对定位,需要至少三个配套红外摄像头,精度可达0.1毫米。 

  5. 甚至其中某些参数也可以先用校准好的配置进行精细测量。 

  6. 但这也为后来的开发埋下了伏笔,在疫情严重的时候,如果插件不幸崩溃了,将导致整个实验和遥控器事件有关的交互都无法实现。 

  7. 后来在和参加了前一次校企合作的学长交流时,他吐槽到有次汇报提到了球坐标系,结果被问什么是球坐标系,一时不知该怎么回答。 

  8. 这些设计出现在前端平台的代码中,但从未被实现过,最后优化时删除了。 

  9. 虽然可以调整插件频率,但是Apple TV最多也就跑到60帧,而且触点的60帧是假的,前后相邻两帧是完全相同的数据。 

  10. 有时是太久不清理后台导致的崩溃,但也会有其他因素,比如系统自动更新等等。 

  11. 不知道当时关于阳后免疫力和二阳之类的研究如何,在Positive Only的食堂工作还是需要一些勇气的吧。 

  12. 怎么这么巧,怀疑是故意的。 

  13. 虽然最后也没开成吧,但是搞得我拖到了下午五点才会老家。 

  14. 导师也吐槽说之前的合作汇报没那么麻烦,说可能是KPI啥的不够了。 

  15. 说实话,我是真想在结题后拉黑他。