《机器人编程实战》一一1.2 给机器人指令

    xiaoxiao2021-04-17  263

    1.2 给机器人指令如果我们希望一个机器人在某个场景中扮演某个角色,我们如何告诉它该做什么?我们如何给它指令?机器人编程会回答这些问题,其过程充满了冒险、挑战、奇迹、担忧和可能的遗憾。人类使用自然语言、手势、肢体语言和面部表情沟通;而机器人是机器,只能理解微控制器的机器语言。难点就在于此:我们说话和交流是一种方式,而机器人沟通是另一种方式,我们目前还不知如何创造能够理解人类语言和行为并与人类直接交流的机器人。因此,即使我们拥有一个机器人,它具有传感器、末端作用器以及按照我们要求做事的能力,但我们该如何与它进行任务交流呢?我们如何给它一组正确的指令集呢?1.2.1 每个机器人都有一种语言那么,机器人到底理解什么语言呢?机器人的母语是微控制器语言。不论一个人如何同机器人交流,最终这种交流必须转换为微控制器的语言。微控制器是一个计算机,而大多数计算机使用机器语言。机器语言机器语言由0和1组成。因此,从技术上讲,一个机器人真正理解的唯一的语言是字符串和一系列0和1。例如,0000001、1010101、00010010、10101010、11111111如果你想(或被逼无奈)用机器人的母语对其编写一组指令集,它将由一排排地0和1组成。例如,代码清单1-1是一个简单的ARM机器语言(有时被称为二进制语言)程序。代码清单1-1 ARM机器语言程序

    该程序从处理器的两个内存位置取出数字,加在一起并将结果存储在第三个内存位置。大多数机器人控制器讲这种类似机器语言的语言,如代码清单1-1所示。0和1的安排和数量根据控制器的不同可能会有所改变,但是所见即所得。纯机器语言很难读懂,很容易把0和1的位置按错,或者在计数时出现错误。汇编语言汇编语言是一种更可读的机器语言,通过使用十六进制或八进制,用简短的符号说明和表示二进制。代码清单1-2是代码清单1-1所示操作类型的一个汇编语言示例。代码清单1-2 代码清单1-1的汇编程序版本

    代码清单1-2比代码清单1-1可读性更好,虽然汇编语言程序比机器语言程序更不易出错,微控制器汇编语言仍然有点神秘。从代码清单1-2并不能直观地看出,我们取两个数字X和Y,然后把它们相加并将结果存储于Z。 注释机器语言有时称为第一代语言,汇编语言有时称为第二代语言。

    一般来说,一种计算机语言越接近自然语言,其代数就越高。因此,第三代语言比第二代语言更接近英语,第四代语言又比第三代语言更加接近,以此类推。因此,理想情况下,我们希望使用一种尽可能接近人类语言的语言来指导我们的机器人。不幸的是,一种更高级的语言通常要求更多的硬件资源(比如电路、存储器、处理器能力)并且要求控制器更复杂而缺乏效率。因此,微控制器往往只用第二代指令集。我们需要一个通用的转换器,可以允许我们以人类语言(比如英语或日语)去书写指令,并且自动转换为机器语言或汇编语言。计算机领域还没有产生这种通用的转换器,但我们已经成功了一半。1.2.2 迁就机器人的语言编译器和解释器是将一种语言转换为另一种语言的软件程序。它们允许程序员用高级语言书写一组指令,然后将其转换为下一代的语言。例如,来自代码清单1-2的汇编语言:

    可以转为如下指令:

    注意在图1-10中,编译器或解释器将高级指令转换成为汇编语言,但是汇编器是将汇编语言转换为机器语言的程序。图1-10也展示了一个工具链概念的简单版本。在机器人编程中会用到工具链。虽然我们还不能使用自然语言,但是将汇编语言作为编程机器人的唯一选择,我们已经走了很长的路。事实上,如今有很多编程机器人的高级语言,包括图形语言,例如Labview;图形环境,例如Choreograph、傀儡模式(puppet mode),以及第三、第四和第五代编程语言。

    图1-11展示了常用的几代机器人编程语言分类。图形语言有时被称为第五代和第六代编程语言。一部分是因为图形语言允许程序员更加自然地表达想法,而不是从机器的角度来表达你的想法。因此,指导或编程机器人中的挑战之一,可归结为个人表达指令集的方式与微控制器使用指令集的方式之间的差异。图形化的机器人编程环境和图形语言试图通过允许程序员使用图形和图片编程机器人来解决这个差异。Bioloid Motion Editor和Robosapien RS Media Body Con Editor是这类环境的两个示例,如图1-11所示。这些类型的环境通过允许图形化操作或设置机器人的动作、传感器的初始值、执行器的初始速度和力量来工作。通过设置数值、移动图形操作杆和图形控件来编程机器人。有时候,在需要传递给机器人信息和数据的软件里,填写窗体是一件简单的事情。图形环境将程序员从机器人编程的实际工作中隔离出来。图1-11 常用的一些机器人编程语言和图形编程环境的分类务必记住的是,机器人的微控制器最终读取的是汇编/机器语言。必须要有某人或某个东西来提供本地指令。因此,这些图形环境由内部编译器和解释器负责将图形化的想法转换为低级语言,并最终转换为控制器的机器语言。昂贵的机器人系统具有这些图形环境已经有很长一段时间了,但是这些图形环境现在可以用于低成本机器人了。针对低成本机器人系统,表1-3列出了一些常用的图形环境(语言)。

    傀儡模式与可视化编程机器人概念紧密相关的是直接操纵或傀儡模式的概念。傀儡模式允许程序员利用键盘、鼠标、触摸板、触摸屏或其他定位设备操纵机器人图形,同样也允许通过编程在现实世界中操纵机器人的部件到所需位置。傀儡模式扮演一个动作记录器的角色。如果想要机器人的头向左转,你可以移动机器人的头部图形到左边,傀儡模式就会记住。如果想要机器人向前移动,你将机器人的部件移动到前方位置,不论该部件是腿、轮子、牵引机构等,傀儡模式都会记住。一旦记录了想要机器人执行的所有动作,然后将该信息发送给机器人(通常使用某种有线或无线连接),机器人在现实世界中会执行记录在傀儡模式中的动作。同样,如果程序员将机器人置于傀儡模式(假定机器人有傀儡模式),则会记录程序员执行的机器人物理操作。一旦程序员取消机器人的傀儡模式,机器人会执行傀儡模式期间记录的动作序列。傀儡模式是一种模仿的编程。机器人记录它是如何被操纵的,记住那些操作,然后重复动作序列。使用傀儡模式可以使程序员无需输入一个指令序列,也使得程序员无须弄明白如何以一种机器人语言表示一个动作序列。机器人系统可视化语言、可视化环境和傀儡模式的实用性将只会增加,它们的复杂性也将随之增加。然而,大多数可视化编程环境有两个致命缺陷。1.2.3 在可视化编程环境中表示机器人场景现在回顾一下,有效编程一个自主机器人有一半的工作需要指导该机器人如何在一个场景或态势中扮演其角色。典型地,如表1-3所示,可视化机器人编程环境没有表示机器人态势或场景简单的方法。在一个有潜在、简单对象的泛化空间里,可视化编程环境只包含一个机器人的模拟。例如,在一般的可视化机器人环境中,没有一种简单的方法能用来表示我们的生日聚会场景。在编程一个不必与任何东西互动的动作序列上,可视化/图形化环境和傀儡模式方法是有效的。但是,自主机器人若想有用,就需要影响环境,就需要接受关于环境的指令,图形化环境在这方面存在不足。本书中,我们所进行的机器人编程需要一个更为有效的方法。1.2.4 Midamba的困境机器人有机器人语言。机器人可以接受指令去自主执行任务。机器人在态势和环境中接受指令。机器人可以在态势和场景内扮演角色,并在其中产生改变。这是本书的中心主题:指挥机器人在一个特定态势、场景或事件的背景中执行任务。现在来看看我们搁浅的水上摩托骑手——Midamba的不幸困境。机器人场景1当我们在引言中的机器人新兵训练营最后看到Midamba时候,他的电动水上摩托电池电量已经比较低了。Midamba有一个备用电池,但这个备件在末端上有酸性腐蚀。他的电量仅能到达附近的一个小岛,在那里他可能会找到帮助。不幸的是,岛上唯一的东西是一个自主机器人完全控制的化学实验设施。这也不是太糟,Midamba设想如果该设施中有一个化学品可以中和电池酸,他就可以清洁他的备用电池,然后上路。设施前面的办公室由几个机器人占据,室内有一些装化学品的容器、烧杯和试管,但他没有办法确定是否有用。办公室与一个存储其他化学品的仓库区隔离,没有明显进入该区域的途径。从机器人运动的仓库区的两个监视器里,Midamba可以看到机器人在运输容器、标记容器、举起物体等。前面的办公室里也有一台电脑、一个麦克风和一本Cameron Hughes和Tracey Hughes编著的名为《机器人编程实战》的手册。幸运的话,他会在手册里找到一些内容,指导他如何编程一个机器人去寻找和取回他需要的化学品。图1-12和图1-13所示的是Midamba困境的开始。现在,我们跟随Midamba的例子,他也将贯穿该手册。他翻开的第1章是“机器人词汇”。

    相关资源:ABB机器人指令详解

    最新回复(0)