作者:吴佳俊
🌱 评委点评:挥响把一枚戒指变成了人人挥手就能演奏的乐器。团队里没有算法工程师,他们靠 Qoder 把“识别手势”这个陌生难题拆成一个个能调试的小步骤,一步步跑通,最后让挥手真的能合奏出多种乐器的声音。
这次黑客松,我们用 Qoder 做了一次智能戒指演奏尝试
黑客松开始时,我们想做一个体感合奏演示。 玩家戴上智能戒指,跟着屏幕里的方向音符挥手,就能触发吉他、钢琴、打击乐或小提琴声部。玩法沿用了常见的节奏游戏逻辑。我们要做的,是把戒指输入、节奏判定和多声部播放接起来。 这个想法沿用了已有的玩法。
进入开发后,我们遇到了不少具体问题。 团队里没有专职算法工程师,硬件联调的时间也有限。Qoder 在这个过程中帮我们梳理方案、写出可测试的代码,再根据真实设备的表现继续调整。
最先卡住我们的,是手势识别
戒指传回来的只有六轴 IMU 数据,也就是三轴加速度和三轴陀螺仪。屏幕上看到的是一串不断变化的数字,没有现成的“向上”“向下”或“敲击”事件。
一开始,我们尝试直接设置阈值。测试几次后,问题很快出现了。同一个动作换个人来做,力度、速度和幅度都会变化。戒指在手指上转了一个角度,也可能把“向左”识别成“向上”。
我们缺少这方面的经验,当时甚至不太确定应该先改哪一个参数。
Qoder 先帮我们把问题拆开。玩家戴好戒指后静止两秒,系统采集 60 帧数据,用来计算当前佩戴状态下的重力和零偏基线。动作开始后,识别器减去这条基线,再进行运动分段、方向判断和置信度计算,最后通过冷却时间减少重复触发。
方案确定后,Qoder 又协助我们写出了用于演示的识别逻辑。采样率、触发阈值和轴向映射都被保留为可调参数。出现误判时,我们就回到实际采集的波形里,试着调整参数,然后再测一次。
Ring Sound Lab 调试台会显示双戒指连接状态、ACCEL/GYRO 六轴数据、BLE 服务、录音文件和识别结果。我们主要通过这个页面观察数据、排查误判。
几轮下来,我们逐渐知道该观察哪条轴,也能自己尝试修改阈值。Qoder 在这里带来的帮助很具体:它把一个我们不熟悉的问题,变成了几个可以逐一检查的步骤。
写完识别逻辑,还要把它放进演奏流程
戒指能输出方向事件后,动作还要进入节奏判定,再映射到四条乐器轨道。现场人数不固定,没人选择的声部也要由系统托管。
这些工作分散在前端界面、输入处理和演奏逻辑里。Qoder 保留了前面讨论过的项目背景,所以我们从戒指误判转去修改演奏界面,或回头调整节奏判定时,可以直接接着做。
这一点在赶工阶段比较省事。切换模块时,手势事件的来源和去向已经留在前面的上下文里。Qoder 协助我们把识别结果接进演奏流程后,前面调试过的动作可以直接放到实际歌曲里继续检查。
我们怎样和 Qoder 一起处理这些问题
开发中的问题通常是连在一起的。刚处理完某个方向的误判,又可能发现动作虽然识别出来了,却没有落在正确的节拍上。继续往下查,还会碰到手势事件与演奏反馈没有接好、参数调整影响其他方向等情况。
我们和 Qoder 的配合也跟着这些问题往前走。先描述当前现象,让它协助检查数据流和相关代码,给出一版可以测试的修改。我们再用戒指实际跑一遍,把新的波形、识别结果或触发情况带回来,继续排查。
因为前面的讨论都在同一段上下文里,Qoder 能接着已经确认过的校准方式、参数设置和演奏逻辑继续工作。问题从手势识别转到节奏判定时,我们省去了一部分重复说明,也更容易追踪一次修改影响了哪些环节。
回看开发记录,Qoder 参与处理的内容包括识别方案拆解、代码实现、阈值调整、方向误判排查,以及手势事件和演奏反馈的连接。这些都是开发过程中遇到的具体问题。它们被逐步处理后,我们才完成了一个可以现场体验的版本。
就这次黑客松而言,Qoder 帮助我们把许多分散的小问题整理清楚,并一步步落实到了代码和实际设备上。
团队成员:Jiajun Wu、Yanling Zheng、Chengzhi Qiu、Peiqing Wu。