开发日志 #2 - 造伞大师:建模打印焊接硬件一条龙
大家好!今天,我们要深入介绍这款游戏真正的核心与灵魂——那把独一无二的、我们亲手打造的定制雨伞控制器!这里会有从原型阶段到最后我们是怎么一点点升级和设计我们控制器的,如果你也有机会自己制作一把雨伞来玩那这将会是一个很好的参考。(真的会有人尝试吗?)
Prototype
要做一把怎样的伞?
最开始定下来游戏的内容后,就开始尝试设计我们的控制器。首先这一切的主体当然得是一把伞,其次就是根据玩法,我们需要实现三个核心动作的检测:
- 挥砍: 需要捕捉快速的动作和姿态变化。
- 射击: 需要一个类似扳机的输入。
- 开伞: 需要检测伞面的打开状态。
为了达成这些需求,我们一个个的找解决方案。
- 姿态感知: 一个陀螺仪会非常的不错,我们可以直接根据旋转的姿态数据在游戏中同步复刻出现实的伞的姿态。这样一来就可以根据 3D 模型的运动来做挥砍检测了。
- 扳机键: 与其用一个简单的按钮,我们选择了一个摇杆。他能够带来一定的行程,更像是在扣动扳机。早期摇杆也被我们加入了闪避和校准的功能。
- 开伞检测: 我们想过很多实现的方案,最终决定在伞面上也放置一个 IMU,通过计算两个 IMU 之间的夹角来判断伞的开合状态。
- 为了将所有的部件连接在一起,我们使用了一块 ESP32,最后将所有的数据按特定格式打包,通过串口直接输出。在 Unity 引擎端,我们使用了 Ardity 插件来方便地读取串口数据。
第一个……控制器
在正式设计伞柄前,我们在面包板上快速搭建了一个最小原型,连接了 IMU 和 ESP32,初步测试了姿态追踪算法和软硬件通信流程。
↑ 最早的时候
↑ 加入了摇杆以及为了放进伞替换成了更小的 ESP32
和伞融为一体吧
然后下一个问题就是怎么将这些东西放到伞上呢?
想来想去最适合的位置还是伞柄。将原本伞的伞柄拆下,装上我自己设计的包含了所有零部件的伞柄是最好的。我参考了自己常用的一把伞的尺寸,用 Fusion 建模设计了一个加长版的伞柄,预留出容纳电子元件的空间。
↑ 第一版的雨伞设计
你可以看到我们掏空了一个圆柱体的内部,将其切分成三份,在中间是我们主要放置零件的地方。我们设计了一些位置刚好的挡板和螺孔来固定我们的零件,在最上方留了一个用于连接伞的结构。在这里使用热熔胶将原本的伞杆和我们的伞柄连在一起。最后上下两个部件一起构成圆润的外形,还给摇杆预留了空间。摇杆帽也是我们自己单独设计打印的。
经过一段时间的建模调整和 3D 打印,第一个定制伞柄诞生了!然后就是组装和焊接,由于空间比较狭窄,且电烙铁一不小心可能会融化我们的伞柄,所以在做这一步的时候得非常小心。
↑ 正在打印伞柄……
↑ 测试零件位置、和伞放到一起
↑ 完成一些焊接
在第一次组装完成后,我插上电测试时,整个雨伞完全没反应!ESP32 没输出,传感器读不到。我一度崩溃,以为哪里焊错了。仔细排查后,发现问题出在连接伞顶部 IMU 的线上。为了把电源线 (VCC, GND) 和 I2C 数据线 (SDA, SCL) 从伞柄穿过伞杆引到顶部,线缆拉得太长了,我也是硬件新手,不知道这是因为什么,但根据我的测试和网络上的建议,I2C可能确实短一点比较好。最终我决定使用 ESP-NOW 无线中继,这样的解决方案有点“曲线救国”,不过确实能用:只从伞柄向上引电源线,在伞顶部增加一个 ESP32,这个顶部的 ESP32 只负责读取顶部 IMU 的数据,然后通过 ESP-NOW 协议无线地将数据发送回伞柄里的主 ESP32。这样,所有数据就在主 ESP32 汇总,再统一通过 USB 线传到电脑。问题解决!
↑ 组装好的样子
↑ 还有伞面上的传感器
这就是我们的第一版控制器。它很简陋,拖着根线,但它确实能用。
升级!2.0!
准备升级
原型阶段过后,我们明确了 V1 的不足和未来的方向:
- 首先是摆脱线缆,虽然我们提供了一根很长的线,但要是这把伞是无线的那就更好了。
- 其次是增加反馈,我们想要增加振动马达,提升打击感和交互体验。
- 最后是一个挑战:空间追踪。我们的教授提出了一个大胆的想法:因为整个伞的使用非常自然,大家都知道该怎么用,但是这个摇杆左右推在这里就不那么自然,能不能不用摇杆控制闪避,而是让玩家真实地移动身体来躲避攻击?
为了实现这些目标,我们就需要往我们的伞添加一些新的硬件:
- 电池供电
- 振动马达
- 超宽带定位芯片 (UWB): 为了实现精确的室内空间定位,我们调研后选择了 UWB 技术。它通过测量无线电信号在极短时间内的飞行时间来计算距离,精度很高(至少是这么介绍的,虽然实际用下来数据波动有些大,当然可能是我操作的原因。)我们选用了 Makerfabs 的 ESP32 + UWB 集成模块。系统需要至少三个点(两个固定锚点 Anchor,一个移动标签 Tag)来进行三角定位。
那摇杆还留着吗?答案是留着,我们还是需要一个扳机的,通过外壳限制摇杆的左右移动就可以了。
新的伞柄
自然的,我们迎来了全新的设计挑战:把所有新东西塞进伞里!
新加入的电池、UWB 模块等都挺大的,但我的 3D 打印机尺寸有限,伞柄无法做得更长,只能稍微增加一点直径。接下来就是漫长的 3D 建模、打印验证、调整、再打印的循环。如何在极其有限的空间内,合理布局所有元件、电池、走线,还要考虑实际安装和焊接的可行性,对我这个 3D 建模初学者来说是巨大的挑战。最终,我们的设计是这样的:
你会发现,大致的结构和我们的初版设计差不多,整个伞柄变得更粗了,为了保证一定的握持感,将最上面削平了。底部主要给电池模块预留安装位置,在此之上叠加新的 UWB 芯片。摇杆还是占据了伞柄中部的位置,ESP32 和 陀螺仪则叠加在摇杆上方。最后上下外壳都给振动马达预留了一个可以卡进去的槽位,和伞杆的连接部分与之前一致。考虑到强度,最终的伞柄我们选用了 PLA-CF 材料进行打印,显著提升了外壳的强度和刚性。
↑ 也显著提升了翻车概率
不过即使经过精心设计,最终的装配过程依然非常痛苦,因为预留的空间还是非常紧张。一些元器件本身的固定设计也是将一个螺丝钉能固定的物体数量发挥到了极致。最厉害的一颗螺丝钉同时固定住了电池、UWB 芯片、中框和下面的外壳。总之,我不想再装第二遍了。
↑ 这是组装过程的 gif,点击查看原图
详细信息
以上就是我们的设计思路和过程了,现在让我们仔细看看 V2 控制器的内部构成和工作流程吧:
-
硬件清单:
- 伞面: 1x ESP32 C6 Supermini + 1x BNO055 IMU
- 伞柄内部: 1x ESP32 C6 Supermini + 1x BNO055 IMU + 1x 摇杆 + 1x Makerfabs ESP32 UWB 模块 (Tag) + 1x 电池及充电模块
- 定位锚点 (Anchors): 2x Makerfabs ESP32 UWB 模块。其中一个连接电脑 USB 供电,并作为数据接收器(额外带一个小屏幕显示调试信息);另一个使用电池供电,无线放置。
-
数据流:
- 软件实现:
- 控制器固件 (ESP32 端): 主要负责初始化各个传感器,读取数据,通过 ESP-NOW 发送给接收端。
- 游戏中涉及到硬件的逻辑 (Unity 端):
- 数据处理: 将所有从串口读取到的字符串转换为对应的变量储存
- 姿态同步: 根据数据解析出伞柄中 BNO055 的姿态信息,让游戏中的伞实时同步。
- 挥砍检测: 在游戏中的伞尖位置创建一个虚拟点,通过计算该点在短时间(比如 0.1 秒内)移动的距离是否超过一个阈值 来判断是否为有效挥砍。如果是,根据挥砍的起点和终点生成对应特效。
- 射击: 直接读取摇杆的前后轴输出值。我们通过外壳结构限制了摇杆只能前后移动,使其更像一个有行程的扳机。
- 开伞检测: 根据两个 BNO055 的姿态数据计算它们之间的相对角度,分别测量关伞和开伞时的数据作为参考来确定当前开伞百分比。
- 移动追踪: Unity 获取 UWB Tag 到两个 Anchor 的距离 d1, d2,以及设置两个 Anchor 之间的固定距离 D。利用 三角函数可以计算出玩家 Tag 与两个 Anchor 组成的三角形的两个夹角。再设置阈值,如果超过特定角度则算作移动。
体验
那么,这把倾注了我们心血的 V2 控制器表现如何呢?
- 亮点:
- 响应速度和大部分情况下的精度令人满意,无线体验很棒。
- UWB 定位确实实现了让玩家通过身体移动来交互的可能。
- 摇杆扳机的手感不错。
- 不足:
- 稳定性问题: 这是目前最大的痛点。关于这个,那就该有另一篇文章来讲了。
- 电池: 由于体积限制,最终没能做成可替换电池结构,只能通过预留的充电口充电。(且续航能力没有完整测试但不那么耐用)
最后
打造 Umbrella Master 的这把伞是一段充满挑战、失败、学习和突破的旅程。它远非完美,还有很多需要改进的地方,但正是这些不完美和我们为之付出的努力,让它变得独一无二,哪怕到最后它都没法很好的工作,这段经历让我学会的新技能已经太多了。它不仅仅是一个输入设备,它是 Umbrella Master 体验本身。我们相信,这种真实的物理交互能带来传统手柄无法比拟的沉浸感和乐趣。希望这篇技术分享能让你对这把特殊的“伞”有更深的了解。
Umbrella Master
Become the Umbrella Master with a real umbrella controller!
Status | Released |
Authors | Ziduan, Mengqian(Akane)Liu, Sapphire_starr, Zhuojun Wei, Liyian Zhu |
Genre | Action |
Tags | 3D, First-Person, motion-control, unique-controller, Unity |
More posts
- Dev Shorts #1 - Blood-Enhanced Umbrella8 days ago
- Dev Log #2 - Umbrella Maker: Building the Hardware9 days ago
- Dev Log #1 - Umbrella Master: From Pitch to Glitch (We fixed it!)9 days ago
- 开发小日志 #1 - 血祭控制器9 days ago
- 开发日志 #1 - 雨伞大师:从入门到放弃(还没!)9 days ago
Leave a comment
Log in with itch.io to leave a comment.