
我没有写一行代码
就做出了可玩性非常高的桌面机器人

先看效果:
它可以跟随人脸转动,转得非常丝滑,而且响应非常快。眼球还一直盯着你。
还能听懂我们的命令:向左转3圈,向右转10圈。

而且在你触摸它的时候还知道生气。

整个项目里,真正有难度的,其实是无刷电机控制。
为此,我专门设计了一块主控板,它是用Kicad绘制的。主要负责接收屏幕和摄像头的信息,同时控制无刷电机。

主控直接用的是 Arduino Nano R4开发板。它体积小,很容易集成到控制板上,而且自带完善的电源系统,最大21V输入,板子上可以直接输出 5V 和 3.3V,这样也能让整个电路设计简单很多。
电机控制采用的是开源的 SimpleFOC。借助它,我们可以很方便地控制无刷电机,比如转多少度、转几圈、转到哪,都能实现。
后面的人脸追踪用的编程软件是Arduino IDE,程序是让Codex写的,虽然程序能跑起来,但电机不一定会完全按照我们的想法转,这个得需要大量的时间调试和不断地迭代,我花费了至少一两周时间才实现了顺滑的人脸追踪。
相比传统舵机,无刷电机没有减速齿轮,所以理论上能做到更安静、更顺滑。
但无刷电机也不是接上电就能转。
除了驱动芯片控制三相电之外,还需要角度传感器实时反馈电机的位置,这样才能实现精准控制。

所以,我选择了 MPS 的两颗核心芯片。
MPQ6547A可以理解成电机的动力控制器。它内部集成了六个 MOSFET,能够直接驱动三相无刷电机,主控只需要输出 PWM 信号,它就能完成三相换相控制。虽然体积很小,但最高支持 32V、3A 输出,同时还集成了过流、过温、短路等保护功能。
有了这些保护之后,整个系统调试起来会更安心,也更可靠。
其实,仅靠MPQ6547A和主控输出的 PWM 信号,就已经可以驱动无刷电机转起来。
但它还有一个问题:电机并不知道自己转到了哪里,也不知道离目标角度还有多远。
所以,想让机器人精准地跟随人脸,还需要第二个核心器件—MPS 的MA900磁角度传感器。
你可以把它理解成电机的“眼睛”。它通过检测电机轴上磁铁的位置,实时输出转子的绝对角度,分辨率高达 14 位,一圈可以细分成 16384 个位置,所以即使电机转动0.02度,它也能准确感知。
有了角度反馈,SimpleFOC 就能不断修正电机输出,而且,MA900**即使在 10 万转每分钟的高速下,依然能够稳定输出角度数据。**放在我这个桌面机器人上,多少有点“大材小用”,所以整个转头动作才会这么细腻、自然。
最后就是外壳设计。建模软件用的是Shapr 3D
别看现在这么简单,其实前前后后改了很多版。因为每次打印出来都有你不满意的地方,然后就尝试更加完美的一版。
就拿机器人的肚子来说吧,最开始我是把外壳一分为二,但中间的缝隙太明显;后来又把胳膊单独打印粘接在肚子上,虽然外观好了,但是就无法再拆。
最后我把胳膊和前壳设计成一体,并加入卡扣结构,既没有明显缝隙,又方便拆装。包括脑袋和底座,最后也都采用了卡扣设计,脖子之间是中空的,可以走线,它可以直接安插在肚子上,后续调试和拆装都会方便很多。

当外壳组装好之后,我发现了一个致命的缺陷。屏幕和摄像头都需要和主控板接线通讯,我起初想图省事,直接把线材从电机中空位置穿线走线。可实际使用才发现,只要顶部壳体转动,线缆就会不断缠绕。
此时就只能限定电机的角度了,但这样和舵机就没什么区别了,那我费这么大力气做这个无刷电机的意义何在。
就在我一筹莫展、以为项目要卡在这一步时,通过Ai了解到导电滑环这种东西。它可以在旋转状态下稳定传导信号与电力,抱着试试看的心态,我买了能买到的最小的滑环,没想到的是这个滑环,可以和我的电机无缝连接,电机是中空的,而这个滑环刚刚好能通过,而且高度也完全一致,就像专门为这个项目准备的一样。

做完这个桌面机器人,我最大的感受就是:Ai真的把创作门槛降低了很多。
还有就是,3D 打印虽然很折腾,但看着外壳一点点变得更精致、更好拆装、更像一个真正的产品,那种成就感真的很强。
当然,这个项目能够做得这么顺利,也离不开 MPS 的MA900磁角度传感器。它提供了稳定、精准的角度反馈,让整个机器人在转动和跟随时更加自然、顺滑,也让我少踩了不少坑。
好了,这就是我制作桌面机器人的一些真实的经验和分享,希望对你有帮助。
评论区
登录后即可参与讨论
立即登录