停更近三个与的华为“天才少年”稚晖君又更新视频啦!这次他自制了一个又萌又硬的桌面小机器人ElectronBot,稚晖君表示这是个支线项目,整体难度不高。
EDN小编就带大家来看看这款桌面小机器人是如何打造的,最终功能效果如何?
众所周知,稚晖君的主线任务都是自我挑战和学习的内容,但是因为这些项目都是边学边做的,而本次更新的项目动机, 稚晖君戏称:“这是一个捡到一个鼠标垫,想配一台电脑的故事。”
稚晖君热衷于收集各式各样的“屏幕”。这次他淘来了一块圆形的LCD屏幕,于是他的DNA动了,想着是不是能用来做点有意思的玩意。
简单的手表、挂件同质化太多,且没有创意已经满足不了他了,对机器人感兴趣的他打算做一个新颖的、“又萌又硬”的机器人。
他很早之前就开始关注mini机器人,如早些年很火但如今已倒闭的“Anki Vector”、丰田推出的对话机器人“Kirobo Mini”、索尼曾经推出的音乐蛋“Rolly”,还有外形酷似阿童木的迷你机器人“Robi”等等。但稚晖君却认为这些机器人功能比较单一,扩展性和开放性还不强。
此外,迷你机器人受限于体积等因素,本身计算能力并不强,要么只能实现固定程序的一些简单功能,要么就是需要连接手机,借助手机芯片和网络功能,来实现稍微智能点的交互,如语音对话。稚晖君表示 :“不够优雅,也不够实用。”
他想设计一款无需充电、随时待机、有强大计算能力的桌面型的迷你机器人。
他想到了一个办法,就是把这台机器人设计成一台电脑的配件。那么就可以获得电脑上的应用程序、拥有其强大的算力、还能时刻连着USB充着电。
首先梳理一下需求,既然是机器人,那肯定是要能动的,因此要配备一套执行单元,此外,他希望在小小的机身内实现尽可能多的运动自由度,这里就涉及到对传统舵机的改造,其次需要通过USB和电脑进行曲点以及通信,这里就涉及到USB高速协议和接口开发以及驱动程序的定制,最后小圆LCD屏幕得用起来,显然就是头部的显示面板,至于它具体要显示什么内容,后面会给出很多有意思的案例。需求确定后,开始硬件方面的设计。
因为LCD屏幕是圆形的,一台圆润可爱科幻风的机器人原型就新鲜出炉了。
整个圆形屏幕作为全面屏的显示面板,双臂可动,而且分别有两个自由度,身体和头部也各有一个自由度。
稚晖君表示,这是他第一次尝试用T-Spline曲面建模。而且为了在这么小的机身内塞下6个自由度的舵机,他尝试了一些很有创意的传动方案。
比如他希望机器人的手臂可以同时前后和左右旋转,但手臂的位置不足以塞下一个舵机,因此只能把舵机都装到肚子里去。同时,稚晖君还希望手臂的两个自由度可以进行反驱,所以就不能使用弹簧扭簧这种方案了。
如何在狭小的机身中把动力从舵机传递到手臂,还要能实现动力双向传递呢?他设计了一种独特的结构。
手臂前后的运动由一个舵机通过齿轮啮合进行传动,而另一个正交方向的运动,则由另一个舵机,通过T型推杆进行传动。
机器的肚子全被塞满,而且进行验证实际效果也不错,而机器人的底座则使用铝CNC进行加工。
稚晖君使用了Cortex-M4内核MCU,STM32F4。用于驱动屏幕和控制舵机以及USB通信。
由于芯片本身的USB功能只支持全速或是低速的USB,稚晖君在电路上添加了高速的USB-PHY芯片,成功将理论通信速率提高到了400Mbps。由于MUC本身的主频显示,最后实际的最高通信速率也能达到300Mbps。
这个速度远高于UART、I2C、SPI等短总线,这也给后续的软件开发提供了更多可能性。
主控板的设计相对就比较简单了,两层PCB就搞定了。这样体积就做到了最小,和屏幕的面积保持了一致。
除了放在机器人头部的主控板,机器人的身体内部也有一个传感器板子,搭载了一个摄像头,以及一个红外手势传感器。
还有一块驱动板。因为市面上的舵机只能接收pwm信号,进行角度控制。在这种情况下我们只能发送指令,让舵机运动,却不能接收指令,从而知道它的运动状态。同时,稚晖君想要让舵机进行反驱,就必须能让舵机随时进行输出力矩的切换。
因此稚晖君对市面上平价的几乎最小的传统3G舵机进行了魔改,设计了一个这个迷你的舵机驱动器。
这个小驱动器支持I2C总线通信,PID闭环控制,位置回传,也能设置最大的输出力矩,断电储存参数等等。
这样一来,原本6个普普通通的舵机,就被该成了6个智能舵机。
到这里,所有的硬件该有的都有了,也就该组装了。
因为本体非常迷你且圆润,稚晖君给自己设计的小机器人起名叫Electron(电子)。Electron通过USB线和计算机相连,作为计算机的配件。
机器人叫“电子”,那通过USB连接的计算机就是“电子”的“脑子”,简称“电脑”……
稚晖君表示本次项目的硬件并不复杂,重点在于软件端,接下来就是写BUG的阶段,包括屏幕的驱动代码,多级的驱动固定件,USB CDC协议的设备枚举和驱动定制,以及最重要的SDK设计,那完成软件开发后,“Electron(电子)”具体能干什么呢?
“电子”的本质可以看作是一个会动的迷你显示屏,它接收电脑端服务给它发送的信息进行动画显示,而且可以控制各个关节进行运动。
为了能进行更直观的交互,稚晖君开发了一格电脑端的上位机,Electron Studio作为最上层的SDK,在软件里可以看到电子的数字孪生,左边有滑动条可以改变每个关节的状态,右边显示的是机器人上面搭载的实时相机画面,下面一排重点编辑动作和表情序列的时间轴,因此我们可以进行非常傻瓜化的编辑,而且所得即所见,下面每一张图片都是时间轴上的一个关键帧,可随意插入、添加、删除、修改任意帧。
此外,大家还记得稚晖君前面说的希望舵机能够进行反驱吗?
软件右上角有一个切换开关,当把它调到模型优先时,就是刚刚机器人同步软件里面动作的效果,但如果把开关调到实体优先,软件里的模型就会同步机器人实体的动作。
以上是机器人最基础的功能,但如果只是当一个播放器的话,“电子”就跟前面提到的那些机器人没有太大区别了,而稚晖君设计它的初心就是想把它作为一个工具机器人兼电脑配件,让其能发挥一些更加实用的功能。
于是他给电子开发了一套完整的、多层次的开放SDK。
前面演示的最上层是Electron Studio,属于纯图形化的交互。
如果想用自己写的程序控制电子的话,稚晖君还提供了Electron Player库,只通过及其简单的代码,便可链接和控制机器人,还可以设置播放内容。
如果还想以更硬核的方式进行二次开发,稚晖君还提供了更底层的Electron LowLevel库,你可以在自己的程序中直接进行USB字节流级别的数据处理,并且拿到各种传感器的原始数据,同时由于代码都是运行在电脑主机上的,因此程序结合SDK几乎可以在电脑上做任何事情。
对此,稚晖君还做了几个简单范例,其一,结合AHK脚本写了一个程序,可以把电子当作一个额外的电脑输入设备来模拟键盘的按键,通过调节机器人的左右手实现控制电脑音量和亮度。
其二,利用机器人机身搭载的摄像头和红外手持传感器,开发了通过AI算法识别手势的程序。
当摆出不同手势类型,就可以打开预先设定好的程序,或者切换桌面。
最有意思的一个应用是,稚晖君基于OpenPose开发了一个程序,用于单目的人体关键点检测。
如果有2台机器人的话,就可以当作视频聊天的摄像头设备,与普通摄像头不同的是,它不仅可以采集你的头像,还可以把你的脸抠出来显示上去,甚至同步你的动作。
稚晖君还给这个应用起了一个特别的名字“量子纠缠”。
最后, 视频末,稚晖君附上了软硬件开源地址:
https://github.com/peng-zhihui/ElectronBot