V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Vincross
V2EX  ›  程序员

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

  •  
  •   Vincross · 2018-01-10 14:04:20 +08:00 · 2707 次点击
    这是一个创建于 2512 天前的主题,其中的信息可能已经有所发展或是发生改变。

    嗨,大家好!我是 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 ),我们下次见!

    2 条回复    2019-03-25 15:04:25 +08:00
    sennes
        1
    sennes  
       2018-01-10 15:20:08 +08:00
    那蜘蛛不错 专门坑那些不懂硬件的人
    konakona
        2
    konakona  
       2019-03-25 15:04:25 +08:00
    你就告诉我多少钱把!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1110 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:41 · PVG 06:41 · LAX 14:41 · JFK 17:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.