JavaScript机器人:用Raspberry Pi、Arduino和BeagleBone构建NodeBots(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-09 14:33:54

点击下载

作者:(美)瑞克·沃尔德龙(Rick Waldron)

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

JavaScript机器人:用Raspberry Pi、Arduino和BeagleBone构建NodeBots

JavaScript机器人:用Raspberry Pi、Arduino和BeagleBone构建NodeBots试读:

前言

第1章 用Lo-tech材料建造机器人1.1 构建SimpleBot1.1.1 材料单1.1.2 构建步骤1.1.3 安装Node.js包1.1.4 使用基本程序测试构建1.1.5 故障排除——接线1.1.6 一个简单的驱动程序1.1.7 故障排除——伺服电机1.2 切断电源线1.2.1 构建无线SimpleBot1.2.2 连接1.2.3 控制SimpleBot1.2.4 疑难解答1.3 进一步探索

第2章 TypeBot2.1 材料清单2.2 剖析机器人手臂2.2.1 设计手臂2.2.2 约束手臂2.3 构建硬件2.3.1 底座和肩膀2.3.2 肘部2.3.3 腕部2.3.4 手指2.3.5 脑部2.4 编写软件2.4.1 创建项目文件2.4.2 控制伺服2.4.3 初始化2.4.4 按键排序2.4.5 首次运行2.4.6 微调手臂2.5 进一步探索

第3章 节点船3.1 材料清单3.2 潜艇电机吊舱3.2.1 为什么要使用电机驱动器3.2.2 电机吊舱零件3.2.3 修改电机3.2.4 测试电机3.2.5 完成电机3.2.6 插入电机3.2.7 打孔3.2.8 关闭电机吊舱3.2.9 电线的防水3.3 安装Spark核心板3.4 第一个Spark项目3.5 焊接电机驱动器3.6 给小船接线3.6.1 给电机驱动器供电3.6.2 连接Spark核心板和电机驱动器3.6.3 连接电机3.7 电机的控制:代码3.7.1 添加按键事件3.7.2 记录按键状态3.8 船体装配3.9 伺服系统3.9.1 伺服系统编程3.9.2 安装方向舵3.10 启航3.11 进一步探索

第4章 piDuino5移动机器人平台4.1 材料清单4.2 安装开发板和软件4.2.1 在树莓派上安装Node.js4.2.2 下载piDuino5代码和依赖项4.2.3 插入Arduino4.2.4 通过WebSockets测试Johnny-Five4.2.5 浏览app.js4.2.6 初始化Johnny-Five4.2.7 控制硬件4.2.8 使用WebSockets进行低延迟控制4.2.9 从任何地方连接4.3 装配硬件4.4 用智能手机控制4.4.1 下载piDuino5Web应用程序4.4.2 将localtunnel发布到Web应用程序上4.4.3 在手机上试用Web应用程序4.5 浏览app.js和index.html4.5.1 存储localtunnel地址和前端4.5.2 服务用户界面4.5.3 触摸屏操纵杆4.5.4 建立连接4.5.5 发送命令4.6 进一步探索

第5章 用Johnny-Five控制六足机器人5.1 材料清单5.2 从命令行控制机器人5.3 phoenix.js简介5.4 组装机器人5.4.1 准备底盘5.4.2 安装电子产品5.4.3 准备伺服5.4.4 安装髋关节5.4.5 安装股骨5.4.6 安装胫骨5.5 坐标系统5.6 修整伺服5.6.1 修整髋关节5.6.2 修整股骨5.6.3 修整胫骨5.7 为伺服添加范围5.8 步行不易5.9 认识动画类5.9.1 一个伺服数组作为对象5.9.2 一个Servo.Array作为对象5.9.3 一个Servo.Arrays数组作为对象5.10 第一个动画片段5.11 步行5.11.1 行步态5.11.2 走步态5.11.3 跑步态5.12 转弯5.13 命令参考5.14 进一步探索

第6章 构建语音控制的NodeBots6.1 材料清单6.2 构建项目6.3 构建一个继电器电路6.4 构建麦克风前置放大器电路6.5 构建命令服务器6.6 使用Web SpeechAPI进行简单的语音控制6.7 整合命令服务器与继电器电路6.8 使用Android可穿戴设备的高级语音控制6.8.1 Android移动应用6.8.2 Android Wear应用6.9 进一步探索

第7章 室内日晷7.1 材料清单7.2 开始制作日晷7.3 制作和组装核心结构7.4 连接和设置伺服7.4.1 连接伺服7.4.2 设置伺服7.5 制作底座7.6 制作圆盘7.7 制作底座包围和日晷圆盘支撑7.7.1 制作底座的包围7.7.2 放置圆盘7.7.3 制作日晷圆盘的支撑7.8 完成所有零件的装配7.8.1 制作方位臂7.8.2 制作立面弧7.8.3 切割晷针7.8.4 连接由LED模拟的“太阳”7.9 编写代码并控制日晷7.9.1 理解sundial.js文件的代码7.9.2 在sundial.js中添加配置选项7.9.3 sundial.js的具体细节7.10 组装所有零件7.11 实现目标7.12 进一步探索

第8章 万圣节恶搞灯光秀8.1 材料清单8.2 背景8.3 组装LED点阵8.3.1 所需工具8.3.2 准备8.3.3 连接控制器与LED点阵8.3.4 装饰LED8.3.5 疑难解答8.4 控制LED点阵8.4.1 准备Arduino开发板8.4.2 运行测试程序8.4.3 Matrix构造函数选项8.4.4 控制LED点阵显示8.5 开发Web应用程序8.5.1 开发工具8.5.2 使用express-generator8.5.3 开发API8.5.4 添加用户界面8.5.5 扩展应用程序8.6 进一步探索

第9章 CheerfulJ59.1 材料清单9.2 接线电路9.3 CheerfulJ5代码9.3.1 连接到Arduino9.3.2 控制RGB9.3.3 使用Node.js Read-Eval-Print循环9.3.4 定义CheerLights颜色图9.3.5 访问CheerLights ThingSpeakAPI9.3.6 使用Twitter StreamingAPI9.4 使用Spark WiFi开发套件实现无线连接9.4.1 将Spark添加到你的电路中9.4.2 使用Spark-io IO插件9.4.3 切换到电池电量9.5 打包9.6 进一步探索

第10章 使用BeagleBone Black的交互式RGB LED显示屏10.1 材料清单10.1.1 BeagleBone Black10.1.2 WiFi USB适配器(可选)10.1.3 外部5V电源(半可选)10.1.4 RGB LED10.1.5 传感器10.1.6 其他10.2 准备:软件10.2.1 LEDScape10.2.2 连接LED10.3 连接RGB LED10.4 使用JavaScript编写代码10.4.1 运行测试脚本10.4.2 添加Johnny-Five/Beagle-bone-io10.4.3 添加光敏电阻10.4.4 用加速度计改变颜色10.5 进一步探索

第11章 物理安全、JavaScript和你11.1 简易超声波传感器项目:实验控制测试(SUSPECT)11.2 SMS增强超声波传感器应用:一般实验(SAUSAGE)11.3 进入点监控系统(PoEMS)11.4 激光给敌人和战友都留下深刻印象,谢谢(LIBERTY)11.5 状态指示器、按钮和二极管(SINBaD)11.6 进一步探索!

第12章 人工智能:蝙蝠机器人12.1 人工智能的基础知识12.1.1 遥控机器人12.1.2 半自动机器人12.1.3 自主机器人12.1.4 蝙蝠机器人12.2 材料清单12.3 组装12.4 第1步:远程控制12.4.1 移动机器人12.4.2 控制机器人12.4.3 依赖声呐指向和读数12.5 第2步:自治12.6 疑难解答12.7 进一步探索

第13章 三角洲机器人和运动学13.1 材料清单13.2 三角洲结构解析13.3 构建Junky Delta13.3.1 让它移动13.3.2 通过运动学可预测的定位13.4 更复杂的三角洲选项13.4.1 酒保机器人13.4.2 机器人军队13.5 进一步探索

第14章 喵喵鞋14.1 材料清单14.2 零件说明14.3 制作传感器插件14.3.1 将传感器焊接到接线上14.3.2 将传感器安装到鞋子中14.3.3 将导线穿出鞋子14.4 连接鞋子14.5 将鞋子连接到Arduino14.5.1 准备接线14.5.2 焊接Arduino14.5.3 将Arduino连接到右鞋上14.6 用Johnny-Five运行代码14.6.1 连接到Johnny-Five14.6.2 设置传感器14.6.3 记录传感器输出14.6.4 示例行为14.7 进一步探索

附录A译者序

群体智慧是共享集结众人的意见进而转化为决策的一种过程。它是从许多个体的合作与竞争中涌现出来的,在细菌、动物、人类以及计算机网络中形成,并以多种形式协商一致的决策模式出现,本书的翻译就是群体智慧最好的体现。

MBH群体翻译(https://www.mbh.ai/translate)与凯文·凯利在《失控》一书中所描述的蜂巢思维有着异曲同工之妙。我们的译者来自全国各地,虽然大家社会身份不同,但团队分工明确;MBH群体翻译打破传统意义的束缚,让翻译工作不再单一无趣,译者之间的地理与空间已经无关紧要,重要的是有共同兴趣爱好的译者在同一个虚拟的世界中的即时交流。为了让大众可以更好地理解书中的内容,译者们全身心投入到翻译工作当中,通过不断推敲,让文字更适合受众的思维。

参与本书翻译的译者(按译者姓氏笔画排序)包括:王学昭、曲岩、刘端阳、李建伟、陈成坤、尚智豪、耿宁子、康世豪。愿每个读者都有一个美好的阅读之旅。译者2019年6月

前言

Rick Waldron

我喜欢编程和制作。当我发现Chris Will-iams的node-serialport模块(用于Node.js)时,我记得我在想:“现在我可以对我制作的东西进行编程了。”所以我做到了!我贡献了一个Arduino程序,它将光敏电阻传感器值打印到开放的串口和一个小的JavaScript处理程序,该程序监听数据并向终端打印“图形”。几个月后,我开始投身Cam Pedersen的duino项目,直到Julian Gaultier就他对Firmata协议的JavaScript实现向我求助。从那时起,我们开始构建一个高级零件类集合,目标是:让使用JavaScript控制硬件变得简单而有趣。本书将向你展示我们构建的内容以及如何使用它来编写你所制作的东西。

虽然设计硬件项目的物理挑战与用任何其他语言编程的项目相同,但本书将以直观设计的接口形式,展示根据维护状态和提供控制行为的对象来思考硬件的方法。

那么,如何口头描述将LED添加到项目然后再打开?你可能会说:“将LED连接到地和引脚9,然后将其打开。”使用Johnny-Five框架,可将其写为:

如何连接伺服体然后将喇叭设置为特定角度(以度为单位)?“将伺服连接到引脚10并将其喇叭定位到110°。”如以下代码所示:

这些示例都解释了输出,但是输入呢?考虑一下Arduino程序是如何工作的:它们通常依赖于程序循环,并且在读取和处理输入时经常会引入某种形式的延迟。这意味着你的Arduino程序在等待输入时会被阻止。在JavaScript中编写程序时,永远不会阻止该过程。事实上,你的处理程序等待数据到达并异步处理Arduino程序:

这些都是微不足道的示例,但它们说明了你将在本书中反复重复的模式。每个项目都将向你展示如何在物理意义上构建它,然后在抽象编程意义上构建它,后者将与前者同步。

有了这些概念,你将构建和编程:

·步行机器人、打字机器人、节点船和PiDuino5移动机器人平台(第1章至第4章)

·六足机器人(第5章)

·声控继电器控制(第6章)

·室内日晷(第7章)

·万圣节恶搞灯光秀、桌面心情灯或照明装置(第8章至第10章)

·安全和通知系统(第11章)

·蝙蝠机器人(第12章)

·三角洲机器人(第13章)

·喵喵鞋(第14章)

对我来说,本书最令人兴奋的部分是作者本人。这个小组是NodeBots社区成员的绝佳代表,从一开始就脱颖而出。他们不仅仅是作家或工程师,他们还是教师、传播者、领导者,在我看来他们是英雄。毫不夸张地讲,如果没有他们我就不可能完成本书。

让我们少一些言语,多一些实践。不必按任何特定顺序完成这些项目,请查看目录,找到一个看起来很有趣的项目,然后开始构建!

排版约定

本书使用以下印刷约定:

斜体

表示URL、电子邮件地址。

等宽字体

用于程序列表。

等宽粗体

显示应由用户按字面输入的命令或其他文本。此图标表示提示、建议或一般说明。此图标表示警告或注意。

每章中的零件号使用以下缩写:

·MS:Maker Shed(http://makershed.com)

·AZ:Amazon(http://amazon.com)

·AF:Adafruit(http://adafruit.com)

·SF:SparkFun加代码Xii 1(http://sparkfun.com)

使用代码示例

本书可以帮助你完成工作。通常,你可以在程序和文档中使用本书中的代码。除非你复制了大部分代码,否则无须与我们联系以获得许可。例如,使用本书中的多个代码块编写程序不需要获得许可。销售或分发Make:系列图书中的示例CD-ROM需要获得许可。通过引用本书和引用示例代码来回答问题不需要获得许可。将本书中的大量示例代码合并到产品文档中需要获得许可。

我们感谢但不要求你列出引用出处。出处信息通常包括标题、作者、出版商和ISBN。例如:“Make:JavaScript Robotics由Jonathan Beri、Donovan Buck、Julian DavidDuque、Andrew Fisher、Lyza DangerGardner、Anna Gerber、Sara Gorecki、Susan Hinton、Bryan Hughes、Kassandra Perch、David Resseguie、Emily Rose、Pawl Szymczykowski、Raquel Velez以及Rick Waldron(Maker Media)撰写。版权归Backstop Media所有,ISBN978-1-4571-86950。”

如果你认为你对代码示例的使用超出了许可范围,请随时通过bookpermissions

@maker media.com与我们联系。

Safari在线电子书

Safari BooksOnline是一个按需数字图书馆,以书籍和视频形式提供来自世界领先的技术和商业作者的专业内容。

技术专业人员、软件开发人员、网页设计人员以及商业和创意专业人员可以使用Safari BooksOnline作为研究、解决问题、学习和认证培训的主要资源。

Safari BooksOnline为企业、政府、教育和个人提供一系列计划和优惠的价格。

会员可以在一个完全可搜索的数据库中访问数千本书籍、培训视频和预发布稿件,数据库来自O’Reilly Media、Prentice HallProfessional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley&Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones&Bartlett、Course Technology,等等。有关Safari BooksOnline的更多信息,请在线访问我们。

本书中所有示例的源代码都可以在以下网址找到:https://github.com/rwaldron/javascript-robotics。

如果你认为你对代码示例的使用不合理或超出上述许可,请随时与我们联系permissions@oreilly.com。

致谢

Julián Duque

NodeBots就是在学习的同时享受乐趣,对我而言,这是一种实现社会影响的方式。一切都始于2013年的NodeConf,这是我第一次在由Rick Waldron和Raquel Velez指导的NodeBots研讨会上使用Johnny-Five。我的第一次尝试是用压电蜂鸣器,但当时图书馆不支持Piezo课程,所以我向Rick请教如何使用它,Rick对我说:“我无法使其工作,自学怎么样?”从此,我开始致力于完成这个项目。另外,Raquel给了我第一个Arduino套件作为礼物并告诉我:“带上这个套件,实践你在哥伦比亚学到的东西。”这件小事振奋人心,我在哥伦比亚的Medellín开始了我的NodeBots篇章。我还通过研讨会和谈话的方式,在乌拉圭、危地马拉和墨西哥帮助建立社区。我非常感谢Rick和Raquel,是他们鼓舞我并让我成为这场创客革命的一部分。第1章 用Lo-tech材料建造机器人Andrew Fisher

当提到机器人时,你可能会想象无人机、自动驾驶汽车或类人机器人,如Atlas或Asimo。其中很多更规范的机器人至少花费数千美元,而且没有真正的上限(例如,Atlas的成本超过100万美元)。事实上,可以用一些便宜的电子元件与一些可以在家里找到的材料相结合,制造小而有趣的机器人。

NodeBots的一大优点是能够快速进行原型设计。JavaScript等易于使用的语言与Arduino等友好硬件的结合意味着你可以探索各种想法并了解其运作方式。使用机器人技术进行原型设计和尝试有助于快速学习和探索概念。

本章将使用名为SimpleBot(见图1-1)的基本机器人探索几个机器人概念。SimpleBot的第一个设计挑战来自于我的孩子,他们在某个晚上要求一起建造一个机器人。随着时间的推移,睡前仅有一小时的工作时间,这意味着只能使用手头的工具,没有激光切割机、CNC铣床或3D打印机。怀揣着真正的黑客精神,我们使用纸板、电缆扎带和橡皮筋完成了制作。图1-1 完整版SimpleBot

图1-2显示了我们当晚制作的SimpleBot。在制作完成之后,我们爱上了使用纸板、电缆等材料进行原型设计,最近还使用了用于机器人的corflute(瓦楞塑料板)。这些材料价格低廉,易于使用剪刀或优质工艺刀操作。你不必使用激光切割机等工具,但如果有激光切割机,可更快更准确地切割这些材料。你可以在餐桌上切割这些材料,孩子们也可以轻松地参与其中。

在第一次努力之后,我多次修缮了SimpleBot,现在用它做一些NodeBot事件的教学机器人。希望你已经相信用纸板等简单材料制造机器人是一个好主意。本章将涵盖:

·构建基本的SimpleBot平台。

·切断电源线,从计算机上取下我们的SimpleBot。图1-2 首个SimpleBot1.1 构建SimpleBot

在构建SimpleBot之前,请记住构建方法没有正确或错误之分。SimpleBot故意保持开放式设计,因此你可以按照想要的方式进行操作。一些人一边尽可能少地构建版本,一边自动化Nerf-Gun-Toting平台。SimpleBot的目的是发挥、探索和扩展,以加强你对机器人的了解——因此可以自定义。1.1.1 材料单

SimpleBot项目分为两部分,每个部分都需要零件。表1-1中列出了本章的所有零件,文中的对应位置会再次列出每个阶段所需的零件。表1-2列出了无线版本所需的零件。表1-1 SimpleBot材料表1-2 无线SimpleBot材料1.1.2 构建步骤

1.切掉纸板上的模板。不需要苛求完美。做内孔时,使用刀、切割垫和尺子比使用剪刀更容易。使用轮子可以切除或保留中心孔,中心孔只是一个参照,标注中心位置,以便你可以通过它拧到伺服体。

你现在应该有一整套的碎片。最后有凸起的大块是底座,凸起是前面的。使用凸块推动较小矩形上的小孔,你可以将其用作保险杠以安装物体。

2.将车轮安装到伺服体。拿十字形伺服喇叭(你的伺服体中应该有一包不同的塑料配件),并将中心与车轮中心对齐。你可以使用一根电线或一根针在材料上戳小孔以标记要拧的点(见图1-3)。

将车轮牢固地拧到伺服喇叭上。如果你愿意,只需将它们黏上(但之后你就不能再使用伺服喇叭)——两种方式都可以。将车轮安装在伺服喇叭上后,将车轮中心和喇叭拧入伺服体的小齿轮。转动螺丝刀时,请轻轻握住所有零件,在这里会不小心剥离伺服体中的齿轮并导致它们滑动。为两个伺服体执行此操作,你将拥有两个轮子。图1-3 使用伺服喇叭和一根电线标记螺钉点

轻轻旋转伺服体以确保其自由转动。如果你使用纸板或corflute,你的安装螺丝可能会有点长。螺丝不必完全穿过,但需确保在你转动它们时,它们在清除伺服体。当你连接电缆扎带时,只需拧紧它们以便停止移动,但不要太紧以防撕裂纸板或corflute。

3.将伺服体安装到机箱上,如图1-4所示。适当地将这些放在前面,以便重量平衡。你可以把它们放在任何地方,但请记住,如果你发现它倾斜了你可能需要平衡一端。安装伺服体,使带轮子的一侧最靠近机箱前部,并用两根电缆扎带将它们连接在安装孔上,以使它们保持在适当位置。使用两根电缆扎带,以便在开始行驶时伺服体不会扭曲。图1-4 在底座上安装伺服体

4.将电池安装在车轮之间,如图1-5所示。同样,你可以使用扎带,但如果你想轻松充电,双面胶带或蓝丁胶也适用于此。随身携带修剪电缆扎带或者安装一切都有点困难。

5.为SimpleBot设计一个简单的“滑动”环以保持平衡。你可以通过将电缆扎带环绕在机箱中间的SimpleBot背面来完成此操作。从顶部做这个,以免扎带的触手被缠住。环的下侧应与车轮一半的高度大致相同,以便车身保持水平。这看起来“松散”,但不要担心,你可以在下一步用面包板确保牢固。图1-5 在机箱上安装电池

6.添加面包板。将面包板安装在你放置防滑电缆扎带的位置,以便电路板保持滑动。电缆扎带可以沿着通道所在的电路板的长度向下延伸,你仍然可以在其上放置IC。

现在你已经完成了机械工作,是时候开始学习电子设备了。完整的接线图如图1-6所示,下面将对每个部分进行说明。

7.创建一个电池电源轨。面包板的背面给你提供至少7.4V的电压。面包板两侧同时接地。将Arduino Nano安装在一端并接地。如你所见,将Nano放置在主通道的另一侧,通过电缆扎带,并在一侧连接USB,以便插入,如图1-7所示。图1-6 SimpleBot线路图图1-7 电压分配

8.为伺服体通电。伺服电机需要6V电压,因此电池电压过高,所以使用+6V稳压器为伺服电机平稳地输出6V电压。将6V电压放在面包板的另一个导轨上,以便安装伺服系统。请注意,我们正在使用面包板从“后面”将电压从电池输入到调节器,然后从“前面”将电压从调节器送到另一个轨道。在本章后面调试电路时,这是一种很好的方法,可以使电路一目了然。

9.伺服电机可以连接到前电源轨,电压和接地都可以连接到每个电源轨。左伺服信号线连接到引脚9,右伺服信号线连接到Arduino上的引脚8,如图1-8所示。

放松一下,整理所有电线,确保没有任何东西遗落。现在你已经准备好开始处理代码了。

本书示例的所有源代码都可以在GitHub上找到。图1-8 伺服电路1.1.3 安装Node.js包

确保已安装Node.js。你只需要为Simple Bot提供几个软件包,可以从终端shell安装:1.1.4 使用基本程序测试构建

你的Arduino需要Firmata(参见“Ar-duino”),所以要做的第一件事是在构建更复杂的东西以控制SimpleBot之前测试所有东西。下面的代码通过USB连接到Arduino,然后向前运行伺服体3秒,停止3秒,向后运行3秒,最后在退出前停止。

将SimpleBot连接到计算机并运行例1-1中所示的脚本,并将替换为Arduino所连接的串行端口。

如果这一切都有效,太好了!你的SimpleBot正常工作。1.1.5 故障排除——接线

如果你的SimpleBot没有按照描述工作,请不要担心,是时候进行一些调试了:

两个伺服都没转

检查线路。

每个伺服电机应连接到电池的电源轨、红色端、棕色(或黑色)端、接地端。左侧伺服电机的信号线应连接到Arduino上的引脚8,右侧伺服电机的信号线连接到Arduino上的引脚9。

根据接线图,确保电池接地连接到Arduino接地,你需要跨电源的公共接地。

其中一个伺服没有运转

检查你的接线,特别注意确保你的伺服电机信号线连接到Arduino上的正确引脚。

例1-1 servo-test.js(伺服电机测试代码)

SimpleBot当场旋转

这是由伺服电机在不同方向上旋转而不是代码错误引起的。你可以解开伺服电机并将其翻转,这将使所有其他代码示例运行。否则,只需修改代码即可将违规伺服的命令从servo.ccw()更改为servo.cw(),反之亦然。1.1.6 一个简单的驱动程序

现在SimpleBot正常工作,你可以创建一个简单的程序来驱动它。作为一个起点,让我们从键盘输入,以便向前和向后驱动SimpleBot,向左或向右旋转,并停止它。例1-2中显示的代码是如何使用键盘控制进行驱动的一个非常基本的示例。

例1-2 simplebot.js(驱动示例)

❶使用命令行的串行连接服务连接到电路板。

❷设置一个等待键盘按键的事件。

❸检查按下的键,然后根据你想要去的方向接合电机。

将SimpleBot连接到计算机并运行脚本:

你现在应该可以使用键盘上的箭头键在桌子或地板上驾驶SimpleBot,然后按空格键停止。1.1.7 故障排除——伺服电机

以下是一些提示,以防你遇到困难:

一个或两个伺服电机不运转

有关跟踪布线问题,请参阅1.1.5节。

你敲击空格键让机器人停下来,但它继续移动一点点

这是因为连续旋转伺服系统会攻击普通伺服系统,同时每个伺服系统的制造略有不同。有些伺服系统在后面有一个“调音罐”,可以转动,以便在你将其设置为停止时停止。

如果没有这些,那么你可以在代码中设置停止点。

在CR伺服系统中,停止位置定义为中心(回想一下,普通伺服系统工作的弧度通常为180°),该位置通常为90°。设置一个低于此值的值将使伺服电机朝一个方向旋转,高于此值将朝另一个方向旋转。

在停止代码中,将伺服电机设置为移动到90°位置。因此,你可能需要稍微调整停止点,将停止代码更改为:

没有“正确”的数字,且每个伺服电机都会略有不同,所以几分钟的修补就能让你找出伺服电机所需的数字。

驱动因素

SimpleBot驱动系统基于一种名为差动驱动的方法,其中每个车轮由连接在其上的伺服电机独立控制。这是两轮机器人非常常见的设计,因为两个轮子既可以控制前后运动,也可以控制整个方向。最基本的形式使得机器人非常易于控制。

·为了前进,我们将两个车轮向前旋转。

·为了倒退,我们将两个轮子反向旋转。

·为了向左转,我们向后停止或旋转左轮并向前驱动右轮。

·为了向右转,我们向后停止或旋转右轮并向前驱动左轮。

这种设计的最大含义是,当你想要改变方向时,你的机器人通常会在现场旋转。可以(而不是在现场)转动弧形(通过相对于另一个减慢一个轮子),但是这会导致代码复杂。

将这种差速驱动设计与汽车驱动方式进行对比:两个轮子(或四个,如果车辆具有全轮驱动)由单个电机通过轴旋转以产生驱动,然后两个轮子按不同角度定向改变方向。

不同的驱动系统各有优缺点,但差动驱动是一个很好的切入点。1.2 切断电源线

SimpleBot已经可以围绕着桌子运动了,但是也遇到了一个很大的局限,即连接SimpleBot与计算机的USB线的长度有限。很显然,我们可以通过使用长一点的线来解决这个问题,然而,任何超过3米长的线路都会出现信号问题,同时还可能存在线路缠结的可能性,并且还要考虑机器人拖拽的重量。

切断电源线是一种较好的解决方式,这样可以让SimpleBot脱离USB线的束缚,能够自由运动。1.2.1 构建无线SimpleBot

在构建无线SimpleBot过程中,由于一切都使用一个电池,我们将使用一个带有旁路滤波器的单个电池来缓和由伺服电机产生的电压峰值。这里还会使用WiFi,这是因为WiFi比蓝牙可使用范围稍广泛一些,而且只要有WiFi的地方,都可以使用,没有地域限制。

在这个电路中使用的WiFi模块价格低廉,大约12美元,电路显露出设计者的智慧。该模块作为WiFi到串行的连接器工作,所以通过网络发送到WiFi模块的内容都会被复制到串行线路,反之亦然。这也意味着我们的Arduino设置几乎可以与之前相同,但是却可以通过该模块进行无线连接,而且达到这样的效果只需要花费12美元以及对代码进行一次更改。

材料清单

这一阶段所需的材料如下:

·50V 0.1μF陶瓷电容器

·公对公跳线

·公对母跳线

·USR WiFi232-T模块1.2.2 连接

开始之前,先从USB上拔下Arduino,这样可以防止在构建电路时发生故障。

无线的种类是什么?

在该项目中,我们已经选择了WiFi,但是也有许多其他可以使用的无线电类型,例如蓝牙和433MHz串口。每个无线电类型都有其优势、弱势以及权衡。关键是要考虑其频率、功率和成本。

较高的频率可以提供更高的比特率,但是可以轻松地被障碍物阻挡。更大的功率可以让信号“更响亮”,所以信号可以传播得更远,但是会更快地耗尽电池。经验法则就是在比特率、范围和成本中选择两个来考虑。

1.首先要做的是在Arduino接地和VIN上添加去耦电容,这是因为它会由电池供电。同时还要为每个伺服体的电源和接地添加电容,如图1-9所示。图1-9 WiFi布线图

2.无线模块使用2mm间距接头,因此也无法直接插入面包板中。使用公对母跳线将该模块连接到面包板上。然后按照图1-10的内容添加WiFi模块,具体连接内容也可以参照表1-3。表1-3 WiFi模块连接图1-10 添加无线模块

3.再三检查你的接线,因为这些模块没有反向或者过流保护,所以电压过高或电流从负极向正极流经WiFi模块时会将其烧毁。

这些模块是用于连接外部天线的,所以如果不使用外部天线,那么作用范围将大大缩小。使用蓝色胶块或热胶能够让天线轻松地连接到底座上。

4.将电源线上的跳线连接到Arduino上的VIN引脚。这会为Arduino提供7.4V电压,确保其正常运行。

现在开始设置软件方面。1.2.3 控制SimpleBot

让我们分阶段介绍无线部分的内容。在移除电线时,操作更加复杂,所以在进行下一步前,应确保每个部分都是工作的。如果过程中出现了错误,返回去再试一次。

测试、配置模块

如果提供3.3V电压,那么WiFi模块会充上电。在默认情况下,它会处于接入点模式。大约等待10~15秒,然后你应该可以在计算机上可用的网络中,发现“USR-WIFI232-T”标识。连接到该网络,一旦连接成功,你可以通过尝试两件事情确认WiFi模块是否全部正常工作。

该模块的IP地址是10.10.100.254,它有一个DHCP服务器,所以一旦连接上它就会为你制定一些东西。测试IP地址10.10.100.254,如果得到如例1-3中显示的响应内容,那么进入下一步。

例1-3 检查与模块的连接

如果没有得到响应,那么诊断一下网络端口,并确保你没有使用静态IP或覆盖DHCP的其他配置。

现在打开Web浏览器,输入IP地址“10.10.100.254”。在默认情况下,用户名和密码都是“admin”。在该界面中,你可以修改模块本身的常用设置。尝试将其设置为在STA+A模式下运行,这意味着它可以作为WiFi站(连接到你的WiFi网络)运行,但如果你需要,它也可以作为接入点运行(例如将SimpleBot带到公园时)。

如果你曾经配置过WiFi路由器,那么一切都会非常熟悉。提供网络连接详细信息,获取要连接的模块。现在你应该能看到所有的连接信息。如果由于某种原因无法使用这些方法进入无线模块,那么请尝试直接连接串口。你需要一些像FTDI或其他串行ttl USB线的东西。使用115200波特率的串行控制台进行连接。WIFI232-T用户指南提供了更多有关使用AT命令的信息。

设置Arduino

因为WiFi模块可以以更高的波特率工作,Arduino也应该以这个速度工作。想要更改该设置,请打开StandardFirmata程序,然后对像这样的命令行执行“查找”:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载