大数据文摘转载自机器人大讲堂
时隔5个月,那个男人带着最新作品回来了!没错,他就是以一己之力打造出“自动驾驶自行车”、“精致而功能齐全的机械臂”等杰出作品的“华为天才少年”稚晖君。
他这次带来的作品一改以往的硬核风格,是一枚外形呆萌但功能依然硬核的机器人:ElectronBot(电子)
众所周知,稚晖君一直对小巧而精致的东西有着迷之执着。
其实呢,在市面上也已经出现过很多的mini机器人,例如早些年很火的,但是现在已经倒闭的 Anki Vector
Anki Vector
丰田推出的对话机器人 Kirobo Mini
Kirobo Mini
借此,稚晖君也想设计一个功能丰富的桌面级mini机器人
之前提到的这些机器人由于体积的原因,导致计算能力、续航等方面会受到很多的限制。
它们要么只能实现固定程序的一些简单功能,要么需要连接手机,借助手机端芯片和网络能力来实现一些交互,但是稚晖君觉得这些都不是非常优雅和实用的使用场景。
那么有没有办法让小机器人无需充电,随时待机,又具备强大的计算能力呢?
答案就是把它变成一个电脑的配件,我们的桌面级PC,有着比手机强大许多倍的算力,丰富的接口,无数的应用程序,而且还可以随时通过USB给机器人供电,这样之前的那些问题就不用担心了。
电脑图
下面来看看他是如何实现的吧!
作为一款mini型机器人,稚晖君选用了小巧的3g传统舵机作为执行单元,并进行了一定的改造,其次我们需要通过USB和电脑进行取电以及通信,还有一部分是显示方面的驱动。
项目框架图
结构方面,为了配合圆形屏幕的特点,稚晖君把设计风格设定为圆润可爱的科幻风,双臂可动,而且有两个自由度,头部和身体也各有一个自由度。
结构方面最大的亮点在于手臂的传动方式,如何使机器人的手臂是可以同时进行前后和左右旋转?
他是这样设计的:手臂前后的运动由一个舵机,通过齿轮啮合进行传动,而另一个正向方向的运动则由另一个舵机通过一个T形推杆进行传动
传动结构图
结构设计完了,接下来就是电路部分了,主控板采用的两层板设计,体积做到了最小,和屏幕的面积一致。
电子主板图
本项目使用到的 Cortex-M4 内核MCU :STM32F4
用来驱动屏幕和控制舵机以及进行USB 通信,由于芯片本身的USB功能,只支持低速或者全速的USB,为了提高通信速率,他在电路上添加了高速的USB-PHY芯片,将理论通信速率提高到了 400Mbps。
实际速度也有300Mbps,这个速度是远高于 UART、I2C、SPI等短总线的,而这也为后续的软件开发提供了更多的可能性。
USB-CDC协议图
还有一块放在身体里面的传感器板子,这上面还搭载了一颗摄像头,以及一个红外手势传感器。
摄像头板
用过舵机的同学应该都知道,市面上的舵机大多数都是只能接收pwm信号,然后进行角度控制,这会存在两个问题:
其一:我们只能给舵机发送指令让它动作,而无法接收指令,知道它的运动状态。
其二,他希望舵机能够进行反驱,也就是说需要舵机能够随时输出力矩的切换。
为了解决以上问题,稚晖君对舵机进行了一顿魔改,于是,设计出了下面这块巨迷你的舵机驱动器。
舵机驱动器
它支持I2C总线通信,PID闭环控制,支持位置回传,也可以设置醉倒的输出力矩,而且可以断电储存参数等等。
硬件具备,接下来开始组装
零件图
使用加热台焊接主板
加热台焊接
舵机驱动板
组装过程1
组装过程2
组装过程3
最终的效果是这样:
完成后,我们一起来看看它能实现哪些功能呢?
电子的本质可以看做是一个会动的mini显示屏,它接收电脑端服务,给他发送的信息,进行动画显示,而且可以控制各个关节进行运动。
为了能够进行更直观的交互,稚晖君开发了一个电脑端的上位机,ElectronStudio,作为最上层的SDK,在软件里面我们可以看到电子的数字孪生 。
左边有滑动条,可以改变每个关节的状态,右边显示的是机器人上面搭载的实时相机画面。
下面这一排是重点,主要用于编辑动作和表情序列的时间轴,方便进行傻瓜化的编辑。
而且他还将Electron Studio移植到了手机上。
大家可能认为,这样一个一个设置滑动条也太麻烦了,还记得之前提到的改造舵机吗?这就是为了使舵机能够反驱做准备。
在软件的右上角有一个切换开关,当把它达到模型优先时,就是刚刚机器人同步软件里面动作的效果,而如果我们把开关达到实体优先呢?
于是软件里面的模型,就会同步我们机器人实体的动作,通过这个方式,可以直接调整机器人的姿势,然后软件里面记录关键帧即可,有创意的同学还可以给机器人编套舞蹈!
到这里,我们看到了ElectronBot的基本工作,而稚晖君的初心是想把这个机器人当做一个工具机器人兼电脑配件,发挥一些更实用的功能。
稚晖君为电子开发了一套完整的,多层次的开放SDK,前面演示了最上层的SDK,是Electron Studio,也就是纯图形化的交互。
如果,你还希望能够以更硬核的方式进行二次开发,那么他在SDK中还提供了更底层的Electron LowLevel 库,可以在自己的程序中,直接进行USB字节流级别的数据处理,并且拿到各种传感器的原始数据。
比如,稚晖君结合AHK脚本写了一个程序,可以把电子当做一个外接电脑输入设备,来模拟键盘的按键,如实可以通过抬起电子的左手调节电脑音量,右手调节亮度,屏幕上显示的则是电脑的性能检测信息。
到这还没完,稚晖君利用电子机身搭载的摄像头和红外手势传感器,开发了这样一个程序,通过AI算法识别手势的类型,来打开预先设定的不同程序,或者切换桌面。
再比如,他还基于OpenPose开发了一个程序,用于单目的人体关键点检测,那么这有什么用呢?
如果我们有两台一样的机器人,那么就可以把它当做视频聊天的摄像头设备,与通常的摄像头不同的是,它不仅能够采集你的图形,而且可以实时把你的脸抠出来显示上去,甚至同步你的动作,稚晖君把这一部分应用取名为“量子纠缠”。
看到这,是不是有点意犹未尽呢?感兴趣的话,大家可以自己动手做一个呢,可能你会觉得比较复杂,没关系,正如稚晖君所说,十年前他也是一名菜鸟,但是凭借着心中的热爱,把自己当做一头沙漠中的鸵鸟,把自己的头沉进沙漠,最终发现了沙漠底下的星辰大海!十年饮冰,难凉热血!
感兴趣的同学可以一起来复刻这个有趣的项目哦,软硬件资料全部开源在: