欢迎来到AI的世界:从树莓派,Arduino 到 HEXA | 了解机器人开发必看

Vincross · 1月10日

嗨,大家好!我是Neo。最近几年人工智能(AI)可以说是个如火如荼的新锐概念。但不同于大疆的无人机或者各种VR设备,AI设备本身由于兼具了软硬件的要求,门槛其实还是挺高的。

比如对于之前刷屏的波士顿动力的后空翻机器人Atlas,无论是机械结构,还是运动平衡算法,都是普通玩家没法企及的。别的不说,数百甚至数千万美元的研发投入,就让大家只能看看而已了。

输入图片说明

同时对于极客和硬件玩家来说,面对茫茫多的新概念,比如Raspberry Pi啦,Arduino啦,似乎都是非常火的产品二次开发社区。那么到底该如何选择呢,Neo我最近刚好在做一些个人项目,把周边朋友手头的这类设备都搜刮过来做了个全面解读,才有了此文。希望感兴趣的值友看完这篇文章,能对自己该选择怎样的产品能有一个比较明晰的概念。

一. 树莓派 Raspberry Pi

输入图片说明

啥是树莓派?

树莓派是将电脑集成到了一块电路板上的微型电脑。

可接显示器鼠标键盘等外设;基于linux的系统;是一台功能完整的迷你电脑;存储通过micro-SD卡来提供;内置以太网接口可直接联网 (Arduino也可以访问网络,但那需要一些额外的部件)。

输入图片说明

也就是说,树莓派其实就是一台小电脑,并且已经兼容了完整的软硬件系统,可以直接进行开发。

这样对于偏编程开发的技术人员来说,树莓派是一个非常低成本而又可靠的开发平台。

并且编程环境就是标准的Linux编程环境,对于有经验的程序员来说上手非常容易。但这也就导致对于没有相关经验的人来说,树莓派的软件编程门槛有点高。并且如果想做运动实例的话,配置过程比较复杂,还需要外接驱动板,成本也就上去了。

二. Arduino

输入图片说明

啥是Arduino?

Arduino是一个完全开源,可以二次开发用于商业运营的开发平台。

核心:AVR单片机
本质:单片机应用开发板

优势:简单的函数,还有许多应用库,这样就不用直接去操作寄存器了,使得没有很好的单片机基础的人员也可以使用Arduino做出自己想要的东西。

简洁的IDE(集成开发环境):也就是写代码,编译,调试,下载的上位机软件。

输入图片说明

作为核心的Arduino开发板有多个版本,比如最常见的Arduino UNO板。此外,Arduino拥有自带的软件开发系统。目前非常的火的智能机械臂就是利用Arduino开发出的非常热门的品类。

然而Arduino的开发成本其实不低,要求玩家必须有丰富的软硬件知识和不错的动手能力。而对于这样的高阶玩家来说,Arduino芯片本身的性能又显得有些孱弱。

输入图片说明

所以目前Arduino更多的还是作为一些高校学生的毕业设计,或者个人/小团队练手的选择。如果要做严肃的机器人/AI项目开发,Arduino的算力/复杂度比,还是稍微低了点。也就是说,玩家实力达到创客级别之后,Arduino平台本身的硬件性能瓶颈,会明显限制创客的想象力了。

三. 全地形可编程机器人HEXA

看到这里可能有值友会说:聊了半天啥情况?

波士顿动力那种牛逼的我们买不起;
树莓派那种偏软件的不仅上手门槛很高,即便开发出应用,也仍属于是一个PC设备,还称不上是机器人;
而Arduino这种偏硬件的对于开发者来说,如果不太明白机械结构设计不会自己搭控制系统,那么可玩性也非常低。

所以啥也干不了?
好在,有需求就会有厂商来努力填补这个空缺。
Vincross最近新出的一款可编程全地形机器人HEXA,似乎就是一个不错的尝试。

输入图片说明

我最早注意到这个产品,其实也是看站内的一篇众测报告。
前不久还在《Wired》杂志的年度产品"Gear of the Year"里看到HEXA占据了非常大的篇幅:

输入图片说明

虽然没有细看,但留下了印象。就是觉得这个产品蛮酷的,好像以前没见过。
没想到身边的Geek小伙伴居然已经直接在KS上众筹了一台,赶快第一时间拿过来玩玩。首先HEXA本身的造型比较让人印象深刻,把它放在办公桌上可以达到超过100%的回头率,不少同事甚至回头了不下三次。纷纷表示,这个是什么东西?能不能演示一下?

直接导致我啥也没干就玩没电了

首先从外形来看,六足(Hexapod Robot)的结构会比传统的轮式、或者履带式结构更适合各种越野环境。美国NASA目前正在研制的登月机器人ATHLETE其实就是源于六足机器人的造型,从而可以更好的适应月球复杂的地表环境:

输入图片说明

在一些地面比较不平整的环境中,足型机器人先天就会比轮式机器人拥有更强的通过能力。

输入图片说明

对于一些沟壑,足型机器人也可以有更强的环境适应能力。而对于六足机器人来说,只要保证三足不离地,就可以非常稳定,而如果增加到八足或者更多又会造成对软硬件资源要求增加,效果却不明显。所以其实六足是最具性价比的一个选择:

输入图片说明

而HEXA则将六足机器人的优势进一步优化,从步态上来说,有跨步、正常、探洞三种步态,再加上它可以360°无限旋转的头部,使得HEXA在行动能力上更加灵活便捷。

输入图片说明

我想HEXA的团队在设计这款产品的时候,主要也是考量了如何兼具性能和成本的平衡,从而最大化的实现产品力。
聊完了六足结构,回到产品本身。HEXA在传感器配置上也比较丰富,头部除了高清摄像头(有夜视功能)之外,还有测距传感器和红外发射器,可以比较充分的感知周围世界。这也给后续我们编程实现各种复杂功能提供了底层支撑。

输入图片说明

如果觉得官方自带的传感器不够满足创客们的开发脑洞,HEXA也提供了丰富的硬件开发接口(I²C,ADC,GPIO,USB,音频接口等),可以扩展更多外设来DIY一些更复杂的功能。

输入图片说明

这种科技感+神秘风的六足机器人,对于小朋友的吸引力实在是太大了。同事的儿子小C不过是来叫爸爸一起吃饭,直接就表示吃饭不急,得先玩玩这个高科技家伙。

输入图片说明

所以我干脆说,那就由小C你作为我们的测试员,来评测一下这个机器人吧!
小C的毫不示弱,在我帮忙连接好之后,就用"Explore"这个机器人应用(官方称为Skill)给小C用于"探险"。

输入图片说明

作为一个没有任何相关经验的5岁孩子,小C直接上手,就可以通过触摸屏控制,玩出各种丰富的步伐和身体姿态:

输入图片说明
输入图片说明

而长时间不操作的话,HEXA也会自动"卧倒"进入休息模式。

输入图片说明

所以从易用性的角度来说,HEXA确实做得不错,没有任何基础的小朋友,也可以轻松上手。
不过,HEXA可不仅仅只是一个让小朋友玩的机器人玩具产品。定位于可编程的它,更重要的给想研究机器人科学的创客们,提供一个机器人学习和开发的平台。
对于初级的开发者,首先可以使用HEXA Simulater来进行入门学习。

输入图片说明
输入图片说明

在Simulator中,可以通过可视化的3D模拟器,让开发者不用编写代码就可以直观地进行动作设计。设计好的动作可以直接写入HEXA的硬件中,轻松实现想要的功能。

输入图片说明

而且除了预设的动作,我们也可以简单地通过设置创造更多动作。

输入图片说明

当然,对于有编程基础的创客来说,HEXA也能够满足他们的机器人开发需求。HEXA搭载的是基于Linux内核定制优化的MIND OS操作系统。这个机器人操作系统其实类似智能手机里的iOS或者Android。创客可以通过这个系统,使用GO语言,进行更为深度的开发(后面我会介绍一个实例)。

另外,在开发的便捷性上,Vincross不仅在官网提供了完整的开发文档和教程,也同时在Github这样的开源平台上也进行了分享,方便了创客们的开发使用。

输入图片说明

在完成相应的开发之后,创客可以将动作封装成机器人应用,也就是我上面提到的Skill。值得一提的是,HEXA提供了专门的Skill Store,类似于App Store,开发者不仅可以将自己创建的Skill上传到Skill Store上进行分享和售卖,其他的HEXA玩家也可以自行前往下载里面的应用,增加HEXA的功能。

输入图片说明

也就是说,HEXA并不是提供单纯的一个机器人硬件,而是所谓的一个完整的Package:硬件(HEXA)和软件(MINDOS)一同构建成一个完整的机器人开发生态,甚至一种机器人文化。作为一款新产品,这个完成度的确让我有些意外。

不过可能光这样罗列有些过于抽象,我们还是来看个实例吧~

实例机器人应用:斗牛(Bullfight)

比如这里我们以斗牛"Bullfight",来说明一下编写过程。

这个Skill是由一位海外的Reddit用户编写的。具体来说主要就是分三步:头部运动,捕捉红色信号,Go Go Go!!!

而这位用户也把完整的设计思路和源代码开源了出来,方便大家取用。具体来说,这个skill需要教会机器人的主要是2点:

  1. 启动视频捕捉系统
  2. 找到红色,然后启动运动系统走向红色目标

输入图片说明

最终实现分为三步:

第一步:头部转动

具体的代码,其实就是修改"hexabody"这个package里面的头部转动参数:角度和时间。角度指的是接下来这个动作需要头部转动多少角度,而时间则代表了转动速度。具体代码如下:

func (skill *ScanRed) searchRed() {
    for skill.status {
        if skill.rotate {
            direction := hexabody.Direction()
            direction += 30
            hexabody.MoveHead(direction, 200)
            skill.checkRedLightDistrict()
            time.Sleep(time.Millisecond * 100)
        }
            time.Sleep(time.Millisecond * 200)
    }
}

比如这里我想让HEXA转头的速度快一点或者慢一点,只有调整对应的参数就可以了。

第二步:侦测红色

这一步,首先是使用SnapshotRGBA() 来抓取HEXA捕捉到的视频图像信息。然后,通过所以中心点范围内的RGB值,来判断是否超过了阈值(即红色或者非红色)。这里的RGB算法其实也是多种多样,不过要平衡准确性和速度,其实有时候不得不把备选的各个算法都尝试一遍。这部分的代码如下:

func isRed() bool {
    thresHold := 200
    subRed := 0
    srcImg := media.SnapshotRGBA()
    srcBounds := srcImg.Bounds()
    m := image.NewRGBA(srcBounds)
    ptX := (srcBounds.Size().X * 1) / 10
    ptY := (srcBounds.Size().Y * 1) / 10
    draw.Draw(m, srcImg.Bounds(), srcImg, image.Pt(ptX, ptY), draw.Src)
    subBounds := image.Rect(srcBounds.Min.X/2, srcBounds.Min.Y/2, srcBounds.Max.X/2, srcBounds.Max.Y/2)
    newImg := m.SubImage(subBounds)
    width := newImg.Bounds().Size().X
    height := newImg.Bounds().Size().Y
    for w := 0; w < width; w++ {
        for h := 0; h < height; h++ {
            r, g, b, _ := newImg.At(w, h).RGBA()
            r = r >> 8
            g = g >> 8
            b = b >> 8
            c := (int(r) - int(g)) + (int(r) - int(b))
            if c > thresHold {
                subRed++
            }
        }
    }
    log.Info.Printf("%d %d", subRed, width*height)
    if subRed > (width*height)/200 {
        return true
    }
    return false
}

当然了,掌握算法以后,也可以随意更换颜色对象。

而第三步就是冲向红色目标了

这一步其实就是直接调用WalkContinuously()命令。具体代码如下:

func (skill *ScanRed) goToRed() {
       for skill.status {
           if skill.run {
               log.Info.Printf("RUN...")
               hexabody.Walk(hexabody.Direction(), 100)
       }
       else {
           time.Sleep(time.Millisecond * 200)
       }
   }
}

最终的实现效果,还是不错的。

所以,HEXA可以说是提供了一个完整的开发环境和比较严谨的进阶之路:

1、酷炫的外形和自带skill,比如Explore,可以吸引极客玩家对机器人的兴趣,也让任何零基础的玩家操控HEXA来一段越野探险。
2、简单易用的HEXA Simulator,可以让不太懂编程的用户,通过所见即所得的方式编写和组合各种HEXA的新动作,实现相关的功能。对于培养青少年的编程、机械制造兴趣,也是非常好的。
3、完整的HEXA Mind SDK,可以让对机器人和AI感兴趣的高校学生、从业人员或者Geek、创客们轻松发挥自己的想象力。创客们不需要精通机械设计,也不需要精通软件编程和开发,就可以直接拿HEXA进行高级语言的动作程序开发,非常方便和高效。

不仅仅是降低了机器人学习和开发的门槛,也提供了一条学习曲线并不算陡峭的机器人入门之路。

当然,其实也不难看到HEXA的目标不止于此。HEXA结合MIND OS构建的机器人开发生态,让用户完全有能力超越目前的功能演示范畴,开发出一些有强大应用价值的功能(比如:极端狭窄环境的探险、抢险救援中提供一些协助、作为机器人宠物承担家庭陪伴的功能等等)。

可以想象,当这些功能真正应用到实际生活中,机器人就不在只是一个生活在科幻电影中摸不着的,或者只是玩具一般的产物,而是像如今的智能手机一样普及生活助手。从机器人行业的角度来看,HEXA的价值更在于让创客们对于机器人的想象有途径可以实现,从而推动整个机器人产业的发展。当然了,光靠这一款产品显然是不够的,但显然我们看到了好的迹象和趋势。

四. 尾巴

回到最初的话题,现在国际化背景之下,我们接触最新最高科技技术的方式的确是越来越多了。并且各种开源文化的影响之下,和世界一起开发新产品早就不是一句空话而已经成为了现实。

如果想要做一些个人创客项目,或者只是单纯的做一些好玩的作品,树莓派、Arduino或者HEXA这样的成品,其实都提供的相当不错的基础。至于如何选择,更多的可能还是看实际的需求来决定。

如果是做一些数据监控和处理任务,比如下载机、空气监控、PM 2.5监控,树莓派应该是最佳选择,价格不贵几百元搞定,实例也多;

如果是做一些运动控制的小作品,比如机械臂、微型3D打印机、智能小车,Arduino是更合适的选择,并且拖各种改版的开源产品库的福,在某宝上可以直接买到原始图纸。一般一个项目的成本大约在1000-3000元;

如果想不只是学习DIY产品的过程,而是直接学习机器人从初级到高级的编程,对复杂环境、丰富视频信号的捕捉、处理和进一步动作,从而实现真正的机器人应用,并且通过类Skill的形式在全球创客的智能手机上传播,目前HEXA也可以说是这个品类下最佳的选择。甚至,是唯一的选择。感兴趣的朋友可以去Vincross的官网,以及京东和淘宝看看。

输入图片说明

总而言之,我们可能正处于创客最好的时代。

If you wanna DIY something, the best time is NOW!

好了,这次对于机器人开发入门的介绍就到这里,如有未尽之处,还请大家在评论区指出。
如果大家感兴趣的话,后续我也会带来更详尽的项目开发实例介绍。
我是(微博:沈少Neo),我们下次见!

1 条评论
今晚打老虎 · 5月19日

此AI非彼AI。。。

回复

载入中...