写点什么

打造通用机器人,需要什么样的软硬件?

  • 2020-12-23
  • 本文字数:3909 字

    阅读完需:约 13 分钟

打造通用机器人,需要什么样的软硬件?

作者自述: 根据莫拉维克悖论,人工智能系统可以相当轻松地解决“成人认知”任务,如下棋或通过基于文本的智力测试,而完成基本的感官动作,如爬来爬去或抓东西这些一岁孩子就能做的事,却非常困难。是的,我们造飞机是为了载人飞行。飞机是很棒的飞行器。但是,要造一只会飞的鸟呢?在我看来,这就是通用机器人的真正内涵。


本文最初发布于 Eric Jang 的个人博客,由 InfoQ 中文站翻译并分享。


声明:本文只是我的观点,不是我所服务的企业或同事的观点。

Hacker News 讨论:https://news.ycombinator.com/item?id=25247499


根据 莫拉维克悖论,人工智能系统可以相当轻松地解决“成人认知”任务,如 下棋 或 通过基于文本的智力测试,而完成基本的感官动作,如爬来爬去或抓东西这些一岁孩子就能做的事,却非常困难。


任何人,只要他尝试过制造可以做任何事的机器人,他都会意识到,莫拉维克悖论根本不是一个悖论,而是一种必然,因为我们的物理现实是如此的复杂和难以满足。现代人类一生要穿越数百万平方公里的土地,这是一个充满危险和机遇的迷宫。如果我们必须像下棋一样,有意识地处理和考虑所有对生存至关重要的感觉输入和运动决策,我们就很可能会被达尔文进化论从基因库中选择出来。进化优化了我们的生理机能,使我们能在一刹那间执行感觉运动技能,并感觉很轻松。


另一种理解这种复杂性的方法是,调整你的日常生活以适应严重的运动障碍,比如失去手指或在没有双腿的情况下在旧金山到处转转。


通用机器人的软件


那些从事机器人工作的人,他们要直接面对“现实世界”的混乱,对他们来说,这种感觉运动问题的困难尤其明显。现实世界如此之复杂,我们该如何构建用于控制机器人的软件抽象?


我最讨厌的一件事就是,人们没有慎重对待莫拉维克悖论,就提出一个编程模型,将高级机器人任务(“给我准备晚餐”)分为具有清晰计算逻辑边界的顺序或并行计算:淘米、将肉解冻、准备盘子、摆桌子等。这些子任务可以进一步细分。因为传统软件有太多的边缘情况需要处理(“图像是否包含一只猫?”),所以当一项任务不能进一步分解时,我们可以尝试调用机器学习模型作为“魔法软件”来实现那个功能。


这种思维方式——调用 ML 代码的符号逻辑——来自于那些习惯于遵守 Software 1.0 抽象 和 使用烹饪作类比的编程教程 的工程师。


你知道像“给我拿点心”这样的任务需要多高的智能吗?在最低水平的运动技能上?请允许我举例说明。我录了一段小视频(在这段视频中,我打开一包椰枣),并对我在这个过程中执行的所有运动子任务做了标注。


00:00 / 00:00
    1.0x
    • 3.0x
    • 2.5x
    • 2.0x
    • 1.5x
    • 1.25x
    • 1.0x
    • 0.75x
    • 0.5x
    网页全屏
    全屏
    00:00


    在 36 秒钟的时间里,我数出了大约 14 项运动和认知技能。它们发生得如此之快,以至于我都没有意识到,还需要回过头来一帧一帧地分析才能发现。


    下面是我做的一些事:


    • 利用过去的经验打开这类包裹,了解物品的性质以及用多大的力量;

    • 不断调整策略以应对不可预见的情况;

    • 当手滑时调整抓力;

    • 设计了一个特别的 Weitlaner 撑开器,可以借助指关节增加作用在拉链袋上的力量。


    作为一名机器人专家,看到 视频中的动物 如此迅速地做出决定,然后又看到我们自己的机器人艰难地做着最简单的事情,我感到很惭愧。我们甚至要将机器人视频的速度提高 4 到 8 倍,以免人类观众感到无聊!


    看完这个视频,让我们考虑一下机器人控制目前是什么情况。在过去十年左右的时间里,多个研究实验室已经在使用深度学习来开发机器人系统,使机器人可以抓取视野中的任何物体。抓取是一个重要的问题,因为为了操纵物体,人们通常必须首先抓取它们。谷歌 Robotics 和 X 团队花了 2 到 3 年 时间来开发我们自己的系统 QT-Opt。这是一项巨大的研究成果,因为它是一种几乎适用于任何物体的通用方法,原则上也可以用于学习其他任务。


    有些人认为,这种抓取物体的能力可以封装到一个简单的编程 API 中,然后用于帮助实现人类级操作。毕竟,难的问题是由简单的问题组成的,对吧?


    我认为事情没那么简单。要在上层 API 中调用“pick_up_object()”,意味着机器人抓取的开始和结束之间有明确的语义边界。如果你重新看下上面的视频,我做了多少次抓取?我一点也不清楚,这样的话,该把这些函数调用放到哪里。这里有一个 调查,如果你感兴趣的话,可以参加下这个关于“在这个视频中你看到了多少次抓取”的投票,我将在这篇博客中更新结果。


    如果我们仅仅是打开一包椰枣就需要额外解决 13 项操作能力,而每一项能力都需要 2 到 3 年的时间来构建,那么我们距离制造出具备人类能力的机器人还有很长的路要走。对于如何将所有这些行为整合到单个算法程序中,并没有一个明确的策略。相信我,我希望现实足够简单,复杂的机器人操作可以在 Software 1.0 中完成。然而,随着我们从拾取和放置这样的简单任务进入到灵活复杂的任务,我认为,我们需要彻底地重新思考如何在机器人技术中整合不同的能力。


    你可能已经从视频中注意到,“抓取”的意思有点模糊。生物智能并不是专门为抓取而进化出来的——相反,手以及手的行为来自于几个核心驱动力:调节内部和外部环境,寻找零食,重复。


    这并不是说我们目前的机器人平台和 Software 1.0 编程模型在机器人研究或应用方面毫无用处。通用函数 pick_up_object() 仍然可以与“Software 1.0 代码”相结合,成为一个对亚马逊仓库和其他物流配送中心来说价值数十亿美元的可靠系统。在任何非结构化环境中,对任何物体进行拾取和放置仍然是一个未解决的、有价值的、高难度的研究问题。


    通用机器人的硬件


    为了“打开一包椰枣”,我们需要什么机器人硬件?


    Willow Garage 是家用机器人的开拓者之一,他们展示了远程操作的 PR2 机器人可以用来整理房间(注意,这里需要两个手臂来更精确地放置枕头)。这包含了许多拾取和放置操作。


    00:00 / 00:00
      1.0x
      • 3.0x
      • 2.5x
      • 2.0x
      • 1.5x
      • 1.25x
      • 1.0x
      • 0.75x
      • 0.5x
      网页全屏
      全屏
      00:00


      这个视频制作于 2008 年。那是 12 年前的事了!想到时间已经过去了这么久,而指针似乎只移动了一点点,真是发人深省。现实就是很困难。


      Stretch 是一个简单的伸缩臂,连接在一个竖直的金属支架上。它可以做诸如拾取物品、擦拭平面和打开抽屉之类的事情。


      00:00 / 00:00
        1.0x
        • 3.0x
        • 2.5x
        • 2.0x
        • 1.5x
        • 1.25x
        • 1.0x
        • 0.75x
        • 0.5x
        网页全屏
        全屏
        00:00


        不过,未来学家要当心了!对于那些没有充分考虑物理现实的人来说,只要他们看到演示,机器人可以在一个家庭中做有用的事情,就会得出结论,同样的机器人已准备好在任何家庭中完成这些任务。


        视频显示,机器人打开烘干机的门(左开),从里面取出衣服。这段视频有点欺骗性——我认为,摄像机从物理上看不到烘干机的内部,所以即使人类可以远程操作机器人来完成这项任务,要确保烘干机被完全清空也会存在很大的困难。


        这张照片是我自己的烘干机,它有一个靠墙的右开门。我不确定 Stretch 能否适应这个狭小的空间,但 PR2 肯定无法打开这扇门。



        在制作机器人演示视频时,现实世界的边缘情况常常被掩盖,这些视频展示的通常是机器人在非常理想的环境中运行。但是,人类在家里所做的任务是非常多样化的。不管是 PR2,还是 Stretch,都无法蹲在桌子底下捡起地上的线头,站在椅子上换灯泡,填补卫生间的缝隙,用开信刀打开邮件,把盘子从洗碗机移到高柜里,拆纸箱以便放到垃圾桶,出去取回邮件。


        当然,他们甚至无法打开一包使用拉链袋包装的椰枣。如果你觉得这很复杂,这里有一段我切草莓、清洗餐具和装饰芝士蛋糕的第一人称视频。这是用绑在我头上的 GoPro 相机录下来的。看我手指的每一次抽动——每一次都是一个单独的操作任务!


        00:00 / 00:00
          1.0x
          • 3.0x
          • 2.5x
          • 2.0x
          • 1.5x
          • 1.25x
          • 1.0x
          • 0.75x
          • 0.5x
          网页全屏
          全屏
          00:00


          我们经常谈论,机器人将来可以为我们做饭,但我认为,现在市场上的任何硬件都不可能做到这一点。如果想要一个机器人可以完成人类社会中的任何任务,唯一可行的硬件是就是一个成人大小的类人机器人,它有两只胳膊,两条腿,两只手各有五个手指。


          就像我讨论过的机器人中的 Software 1.0 一样,机器人的形态仍然有很大的发展空间,仍然可以为研究和商业应用提供价值。但这并不能改变这样一个事实:任何可供选择的硬件都不能完成人形机器人在以人为中心的空间中所能完成的所有工作。Agility Robotics 公司 是其中一家处于硬件设计前沿的公司。那些在制造经常用手的实体机器人的人——你们能想象你正在制造的机器人组装自己的复制品吗?


          为什么我们不设计一个对机器人更友好的环境呢?


          一种折衷方案是设计机器人的同时也设计环境,以避免上述不可行的任务。这样可以简化硬件和软件问题。我经常听到这样的例子:


          1. 洗衣机比双手操作的机器人在水槽里洗得更好,而烘干机比人把衣服晾在外面风干更高效。

          2. 飞机比鸟类更擅长运送人。

          3. 我们造的是汽车和道路,而不是更快的马。

          4. 轮子能承受更多的重量,比腿更能有效地利用能量。


          对于家庭机器人,我们可以设计特殊的烘干机门,让它们可以很容易地打开,或者针对每个任务定制末端执行器(工具),用来代替有五个手指的手。我们可以把门变成电动门,通过远程 API 调用自动打开,这样机器人甚至不需要自己打开烘干机。


          另一方面,为什么要费心去制造一个机器人呢?我们可以再想一下,将住宅本身设计成一个 ASRS 系统,它可以像个 Dumbwaiter 一样从房子的任何位置为你取来你需要的任何东西。这样就不用让机器人在家里到处走动了。


          对于商业应用来说,这种实用主义的思维方式很好,但作为人类和科学家,这感觉有点像在认输:我们不能让机器人像人类一样完成任务。不要忘记激励我们许多人走上这条职业道路的科幻梦——不是要把事情做得更好,而是要尽人类所能。人类可以用手洗盘子和擦干衣服,所以一个真正通用的机器人应该也能做到。对许多人来说,这种努力是我们能获得的最接近圣经的创造行为:我们要照着我们的形像,按着我们的样子造人,管理海里的鱼、空中的鸟、地上的牲畜,管理地球和上面爬行的所有昆虫。


          是的,我们造飞机是为了载人飞行。飞机是很棒的飞行器。但是,要造一只会飞的鸟呢?在我看来,这就是通用机器人的真正内涵。


          查看英文原文:


          https://blog.evjang.com/2020/11/moravec-bots.html


          2020-12-23 14:252176
          用户头像
          陈思 InfoQ编辑

          发布了 576 篇内容, 共 289.0 次阅读, 收获喜欢 1303 次。

          关注

          评论

          发布
          暂无评论
          发现更多内容

          Java基础22 网络编程(HTTP和UDP),java基础入门课后编程题答案

          Java 程序员 后端

          Java学习笔记——String,java程序开发实战教程在线

          Java 程序员 后端

          Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14,mybatis常见面试题

          Java 程序员 后端

          linux中删除特殊文件

          入门小站

          Linux

          Java常用类使用总结,linuxshell教程

          Java 程序员 后端

          Java并发系列终结篇:彻底搞懂Java线程池的工作原理(1)

          Java 程序员 后端

          Java基础15 Java常用类,深入剖析

          Java 程序员 后端

          Java多态实现原理,java同步锁原理

          Java 程序员 后端

          Java中高级核心知识全面解析——常用框架(Spring常用注解

          Java 程序员 后端

          Java中高级核心知识全面解析——系统设计(RestFul-API[概念

          Java 程序员 后端

          java使用poi操作world生成饼图,柱状图,折线图,java微服务架构训练营

          Java 程序员 后端

          Java匹马行天下之一顿操作猛如虎,框架作用知多少?,HTTPS面试常问全解析

          Java 程序员 后端

          Java基础 - 单列集合,ArrayList,Vector,从零开始学springboot百度网盘

          Java 程序员 后端

          Java基础面试题——IO流,Netty时间轮调度算法原理分析

          Java 程序员 后端

          Java学习笔记——内部类,linux底层架构

          Java 程序员 后端

          Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day34,rabbitmq集群同步原理

          Java 程序员 后端

          Java中高级核心知识全面解析——常用框架(Spring中都用到了那些设计模式-)

          Java 程序员 后端

          Java基础16 集合(ArrayList、LinkedList,linux操作系统教程电子版

          Java 程序员 后端

          Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day20,从java后端到全栈百度云

          Java 程序员 后端

          Java到Kotlin入门,这一篇就够啦,java开发岗高频面试题全解析祖国的花朵

          Java 程序员 后端

          Java各种锁详情,java中间件技术及其应用开发

          Java 程序员 后端

          java入门基础三(执行语句),Java多线程面试题大全含答案

          Java 程序员 后端

          Java基础 - 正则,Math,Random,零基础学java电子书

          Java 程序员 后端

          Java之String重点解析,成功定级腾讯T3-2

          Java 程序员 后端

          JAVA多线程和并发基础面试问答,吊打面试官你也可以,看完这一篇你就懂了

          Java 程序员 后端

          Java中高级核心知识全面解析——JVM,java全套视频教程

          Java 程序员 后端

          Java学到什么程度才算精通?,springmvc原理图解

          Java 程序员 后端

          Java安全之反序列化回显与内存码,java面试个人规划

          Java 程序员 后端

          Java实现文件切割拼接,MongoDB数据分布不均的解决方案

          Java 程序员 后端

          Java并发原理抽丝剥茧,读写锁ReadWriteLock实现深入剖析

          Java 程序员 后端

          Java基础面试题——IO流(1),mysql数据库开发面试

          Java 程序员 后端

          打造通用机器人,需要什么样的软硬件?_AI&大模型_Eric Jang_InfoQ精选文章