JavaScript机器人编程指南

978-7-115-43678-8
作者: 【美】Kassandra Perch(珀芝)
译者: 张霄翀
编辑: 陈冀康

图书目录:

详情

近年来,JavaScript已经成为编程语言中的佼佼者,众多应用的开发都开始采用JavaScript语言。除此之外,JavaScript在机器人编程方面也表现出了极大地潜力。本书重在介绍如何利用JavaScript和开源硬件实现更强大的机器人编程,帮助读者设计、构建并编程实现更加强大的机器人性能。

图书摘要

版权信息

书名:JavaScript机器人编程指南

ISBN:978-7-115-43678-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美] Kassandra Perch

  译    张霄翀

  责任编辑 陈冀康

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


Copyright © 2015 Packt Publishing. First published in the English language under the title Learning JavaScript Robotics.

All rights reserved.

本书由美国Packt Publishing公司授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


本书是应用JavaScript及相关的技术实现机器人编程的实践指南。本书将介绍使用Johnny-Five和JavaScript语言来为Arduino和其他机器人技术平台编写代码。

全书共分为9章,涉及搭建Arduino Uno并探索NodeBots、Johnny-Five基础知识、输入/输出设备和传感器、舵机和电机等运动设备、Animation库等方面的知识。最后,本书会讲解如何将机器人连接到互联网上,以及怎样将Johnny-Five代码跨平台迁移。

本书适合有一定JavaScript编程基础交想要从事机器人编程的程序员阅读,也适合机器人编程的初学者学习参考。


Kassandra Perch是一名开源互联网工程师和支持者。她早期是前端开发工程师,随着Node.js的出现特别是受到了NodeBots社区发展的吸引而转向后端开发。她周游世界在各种大会上进行关于NodeBots及其精彩社区的演讲。她在开发机器人的业余时间里,还会编织、做布艺、雕刻或和她的猫一起玩电子游戏。

我想要感谢我的导师,像我之前说的,如果没有你我不知道会是什么样,但我确定的是遇到你我的生活一定是变得更好了。我的父母在我小的时候很支持我拆散各种东西,他们的支持让我可以继续做这样的事情并构造出自己的东西。

还有十分感谢NodeBots社区:你们在学习新东西时的好奇心和对趣味性的追求激励我前进。特别感谢Rick和Raquel促使我开始写这本书。


Chris S. Crawford (@chris_crawford_) 是佛罗里达大学人机交互技术的一名博士生。他现在是人本体验实验室的人脑计算交互研究组的一名研究生研究员。他的研究专注在人脑机器人交互领域,包括研究将生理信号(如脑电图EEG)用于扩展人机交互的方式。Chris有工作在不同领域的经验,包括感知运算、3D计算机绘图、电话投票以及原生/互联网应用开发。现在,他还是SeniorGeek Communications, LLC的一名软件总工程师。

Tomomi Imura (@girlie_mac) 是一名热心的开源互联网和开源技术的拥护者,一名前端工程师,和一名很有创造力的技术专家。在开始工作在互联网相关开发之前,她已经在移动设备领域活跃了8年了。她喜爱硬件技术,有时会在大会和工作坊上做关于Raspberry Pi上IoT原型的分享。

她在旧金山的数据提供商PubNub中,就像一个高级开发人员一样,支持着更好的开发人员体验。


大家好!欢迎阅读本书。在这本书里,你会学到怎样使用Johnny-Five以JavaScript语言来为Arduino和其他机器人技术平台编写代码。我们会介绍Johnny-Five的基础、输入/输出设备和运动设备,比如舵机和电机。最后,我们会探索怎样将你的机器人连接到互联网上,以及怎样将Johnny-Five代码跨平台迁移。

第1章,开始学习JS机器人技术,会帮助你开始搭建Arduino Uno并探索NodeBots的世界。

第2章,使用Johnny-Five,介绍了Johnny-Five的基础,包括Read-Eval-Print-Loop(REPL),以及我们会构建第一个自己的项目。

第3章,使用数字和PWM输出引脚,介绍了基本输出设备,使用了数字和PWM引脚。

第4章,使用特殊输出设备,介绍了使用一个或多个引脚的专门的输出设备。

第5章,使用输入设备和传感器,介绍了使用模拟和GPIO引脚的输入设备。

第6章,让机器人动起来,介绍了Johnny-Five中基本的舵机和电机的使用。

第7章,通过Animation库进行高级的移动,介绍了Animation库以及怎样为你的NodeBots创建高级移动方案。

第8章,高级模块——SPI、I2C 和其他设备,介绍了 SPI、I2C 和其他高级组件在Johnny-Five中的使用。

第9章,让NodeBots与世界相连接,介绍了怎样将你的NodeBots连接到互联网,以及将Johnny-Five代码用于非Arduino平台。

在开始这本书之前,你会需要如下知识和物品。

如果你之前接触过Arduino或者你是电路学的新人,想学习用JavaScript来写脚本,这本书就很适合你。对于JavaScript和Node.js的基本知识会让你更好地从本书中获益。

这本书中,你会发现不同的文本样式,表示了不同类型的信息。下面是这些样式的例子和解释。

代码文本、数据库表名称、文件夹名称、文件名称、文件扩展名、路径名、伪URL、用户输入和Twitter账号会以如下形式显示:“例如,LED对象的on()和off()函数会开启和关闭LED灯。”

代码段会以如下形式显示。

   var myPin = new five.Pin(11);
   myPin.on('high', function(){
   console.log('pin 11 set to high!');
   });

当我们希望让你注意到代码段中的某一部分时,会用粗体显示。

   var myPin = new five.Pin(11); 
   myPin.on('high', function(){ 
   console.log('pin 11 set to high!'); 
   }); 

任何命令行输入或输出都如下显示。

> node LED-repl.js

新的用语和重要的文字会用粗体显示。你会在屏幕中看到的文字,比如在菜单或对话框中,如下显示:“现在,我们会构建一些项目来示范怎样使用更多的高级传感器:一个光电管和一个温度传感器。”


警告和重要的提示会出现在这样的框中。


提示和窍门会这样表示。

我们十分欢迎读者反馈。让我们知道你对这本书的想法,喜欢的和不喜欢的地方。读者反馈对我们十分重要,它能帮助我们发现更多能帮助你获益的方面。

普通的反馈请给feedback@packtpub.com发邮件,并在标题中注明书的名称。

如果有个主题是你很擅长并乐于撰写或参与撰写一本书的,请参考www.packtpub.com/ authors的作者指南。

现在你是Packt书籍的读者了,我们可以帮助你从购买中获益更多。

你可以使用你的账号从http://www.packtpub.com上下载你购买的所有Packt发布的书籍的样例代码。如果你从别处购买的这本书,你可以访问http://www.packtpub.com/support并且注册来获得邮件发送的文件。

我们还提供一个PDF文件,包含书中所有的截图和示意图的彩色图片版。彩色图片会帮助你更好地理解输出的改变。你可以从https://www.packtpub.com/sites/default/ files/downloads/ 3347OS_ColoredImages.pdf下载到该文件。

虽然,我们已经很认真地保证内容的准确度了,但错误可能还是不可避免的。如果你发现了我们书中的错误,也许是文字或代码的错误,如果能告之我们,我们会很感谢的。这样,你不仅可以帮助其他读者阅读到正确的内容,还可以让我们改进本书之后的版本。如果你找到任何错误,请通过http://www.packtpub.com/submit-errata告诉我们,选择书名,然后单击Errata Submission Form链接,输入错误的细节。一旦错误被确认了,你的提交会被接受,这个错误会更新到网站上或添加到任何已有的勘误表中。

想查看以前提交的错误,请访问https://www.packtpub.com/books/content/support并且在搜索框里输入书的名称。Errata部分会显示出需要的信息。

网络上有版权的资料的侵权一直是所有媒体关注的问题。在Packt,我们很重视版权和许可的保护。如果你在网上看到任何形式的非法拷贝,请立即告诉我们链接或网站名称,我们会采取措施。

请将有嫌疑的内容链接发送到copyright@packtpub.com。

你的帮助保护了我们的作者,也让我们能够有能力带给你更多有价值的内容。

如果你有任何关于本书的问题,你可以通过questions@packtpub.com联系我们,我们会以最大努力去纠正问题。


欢迎来到JavaScript机器人的世界!让我们探索一下用Arduino和Johnny-Five来编写机器人程序有多么简单吧。

在这一章中,我们会做如下事情:

JavaScript是近几年才开始成为机器人技术语言的,这要从Chris Williams编写的一个NPM模块node-serialport开始说起。这个模块允许Node.JS通过串行连接与设备通信,这包括老式计算机的典型串行连接或USB和蓝牙连接这些我们常用的连接类型。那么NodeBot到底是什么?我们又是怎样将它们和Johnny-Five组合使用的呢?

一个NodeBot指的是任何一块可以用JavaScript和/或Node.JS来控制的硬件。这里包含了大量的项目,有无数方法来实现一个NodeBot。在这本书中,我们会使用Johnny-Five库,这是Rick Waldron创建的一个开源项目。


写给刚刚接触机器人技术的读者:一个微控制器是一个包含处理器、内存和输入/输出插口的小计算机。这是我们项目的大脑,我们的项目会与之通信或直接加载在其之上。微控制器会以各种形态和大小出现,并有着各种各样的功能。

我们会在项目中使用一个微控制器。你应该使用哪种微控制器呢?很幸运,我们使用Johnny-Five意味着我们的选择范围很广,并且都可以使用本书中的代码!

到底Johnny-Five是什么?好用在哪里呢?

Johnny-Five(http://johnny-five.io)是一个开源的Node.JS机器人技术库。它由Rick Waldron创建并且有由贡献者和支持者组成的活跃社区。在基于Node.JS 4.x写这本书时,这个模块可以很好地工作在Windows、Mac和Linux计算机系统上。

Johnny-Five构建于node-serialport之上,并且让我们可以通过编写JavaScript应用来以不同类型的连接与不同的微控制器通信。对于某些微处理器,比如Arduino-compatible开发板,Johnny-Five使用了串行连接。而对于一些新的开发板,Johnny-Five通过一个网络服务模拟了串行连接!

Johnny-Five对多种开发板类型的支持是通过它的包装器系统实现的。一旦安装了核心系统,你就可以为特定的微控制器安装一个包装器,并且API保持不变。这是一个很强大的功能,你可以在不同的平台间轻松地移植代码,无需改动。

我们会使用Arduino Uno开发板来实现这本书里的示例。你可以在网上买到这些开发板,比如Adafruit(www.adafruit.com)、SparkFun(www.sparkfun.com)等。你还可以使用Arduino Uno兼容的开发板。例如SainSmart售卖的Uno-like开发板用于我们的示例也没有问题。在这一章里,你会需要这个开发板和一根配套的USB数据线。

在之后的章节里,我们会使用其他的模块,每一章都会列出一张该章节项目需要的材料清单表。

现在我们已经了解了基本概念,接下来要开始为第一个项目搭建环境了。写这本书的时候,这里使用到的所有软件都可以用于Windows、Mac和Linux桌面系统。

如果你还没有安装Node.JS,可以在nodejs.org上下载一个安装器。这个安装器还会安装NPM或Node Package Manager,可以用来管理我们使用的其他软件。

在你的机器上运行安装器,这里可能会需要重启。然后,打开命令行应用,运行如下命令。

node --version

这行命令的输出值应该是4.x.x,其中,x为整数。

在你的命令行应用中,为你的项目创建一个文件夹并且改变路径到这个文件夹:

mkdir my-robotics-project
cd my-robotics-project

接下来开始安装Johnny-Five:

npm install johnny-five

你应该会看到一个等待图示和一些输出。如果在输出行的最后没有ERR NOT OK的消息,就表示安装Johnny-Five成功了。


在Mac机器上,你可能需要先安装XCode开发者命令行工具。

首先,你应该准备好Arduino IDE。当然我们还是使用JavaScript,但是,我们需要确保开发板上运行着供Johnny-Five正常通信的专门的sketch(Arduino开发里对程序的称呼)。

你可以从Arduino网站(http://www.arduino.cc/en/Main/Software)获得安装器。在这本书中假设你使用的是1.6.4版本,但1.4左右的版本也应该可以正常工作。

下载好软件后运行它。然后我们要确定串行连接工作正常。


如果你使用的不是Arduino开发板,这一步并不是必要的。但应该会有其他的步骤。你的开发板的包装器插件应该会注明的。

将USB数据线插入开发板和计算机。开发板上的一些LED灯会亮起来,这是正常现象。然后,在Arduino IDE的Tools菜单下,将鼠标指针悬停在Ports子菜单上,你会看到类似图1.1所示的端口列表。

图1.1

你应该会在表中至少看到一条内容匹配如下格式:/dev/cu.usbmodem*****。也许有Arduino Uno后缀,也许没有。找到了就单击它,这个就是你需要用于Firmata安装的端口。看到它说明你的开发板可以与计算机进行通信,并且也可以开始安装Firmata了。

想要在你的开发板安装Firmata,如图1.2所示,进入File | Examples | Firmata | StandardFirmata菜单。

图1.2

一旦你打开了sketch,你会看到如图1.3所示的一个IDE窗口。

图1.3

一旦sketch启动了,单击Upload按钮(看上去像个向右的箭头)就可将Firmata上传到你的开发板上。等到上传结束,可以关闭Arduino IDE,之后就可以开始用JavaScript工作了。


一个名叫Suz Hinton(@noopkat)的程序员正在开发一个叫AVRGirl的node项目,很快这个项目会使我们不再需要这一步。用户可以在www.github.com/noopkat/avrgirl上了解到更多细节!  

现在我们已经搭建好开发环境了,可以通过写JavaScript来使用我们的Arduino开发板了。我们会从Arduino微控制器上的LED灯闪烁开始。

使用你喜爱的IDE,在你的项目目录中创建一个hello-world.js文件。然后,复制粘贴或键入如下代码。

  var five = require("johnny-five");
  var board = new five.Board();

  board.on("ready", function() {
    var led = new five.Led(13);
    led.blink(500);
    });

我们会在第2章中介绍更多这段代码的细节,简单介绍就是:我们在Johnny-Five模块里引入这段代码并用它创建一个新的开发板对象。当这个开发板准备好后,我们会在引脚13(这个引脚已经被连接到Arduino Uno开发板的板载LED灯上)创建一个LED对象。然后我们编程让这个LED灯每半秒闪烁一次。

想要运行脚本,先打开命令行应用,进入项目目录,运行如下命令。

node hello-world.js

应该会看到如图1.4所示的输出。

图1.4

应该看到Arduino Uno开发板上有一个LED灯在闪烁。图1.5展示了板载LED灯的位置。

图1.5

如果一切正常并且LED灯在闪烁,恭喜你!你已经可以开始用Arduino和Johnny-Five构建机器人和应用了!


如果在这里遇到了问题,可以去Johnny-Five网站(www.johnny-five.io)寻求解决方法。

在这一章里,我们学习了JS机器人技术和理解了什么是NodeBot 。我们了解了在这本书中需要用到的硬件模块,并且学习了怎样搭建开发环境。最后,我们了解了怎样使板载LED灯闪烁。在下一章里,我们会更深入地了解Johnny-Five为什么这么强大,并且开始编写和构建一些更加复杂的项目。


相关图书

低代码打造RPA——Power Automate Desktop基础实战
低代码打造RPA——Power Automate Desktop基础实战
机器人传感技术
机器人传感技术
情感对话机器人
情感对话机器人
从生物材料到微纳机器人
从生物材料到微纳机器人
国之重器出版工程 空间机器人遥操作系统及控制
国之重器出版工程 空间机器人遥操作系统及控制
国之重器出版工程 空间机器人总论
国之重器出版工程 空间机器人总论

相关文章

相关课程