本書以一位受困于荒島的年輕人的視角帶領(lǐng)讀者進(jìn)行一場(chǎng)冒險(xiǎn)。他必須尋找到一種給機(jī)器人編程的方法才能得以逃離。本書作為一本控制自主機(jī)器人編程指南,介紹了編程機(jī)器人傳感器、電動(dòng)機(jī)以及將想法轉(zhuǎn)換為機(jī)器人可以自主執(zhí)行任務(wù)的實(shí)際方法和技術(shù)。對(duì)于硬、制造商、DIY項(xiàng)目,這些技術(shù)可以用于當(dāng)今領(lǐng)先的機(jī)器人微控制器(ARM9和ARM7)和機(jī)器人平臺(tái)(包括廣泛流行的低成本Arduino平臺(tái),LEGOMindstormsEV3、NXT,以及WoweeRSMedia機(jī)器人)。
Preface機(jī)器人新兵訓(xùn)練營(yíng)警示作為機(jī)器人程序員,我們應(yīng)確保所從事的編程對(duì)于公眾和機(jī)器人自身都是安全的,這是我們的特殊責(zé)任。當(dāng)對(duì)機(jī)器人進(jìn)行編程時(shí),首先要考慮機(jī)器人與人類、動(dòng)物、其他機(jī)器人或資產(chǎn)互動(dòng)時(shí)的安全。這對(duì)于所有類型機(jī)器人的編程都是適用的,尤其是可編程自主機(jī)器人,即本書所介紹的機(jī)器人類型。本書所涉及的機(jī)器人命令、指令、程序和軟件僅用于展示,就安全性而言其不適合用于與人類、動(dòng)物、其他機(jī)器人的互動(dòng)。
對(duì)機(jī)器人安全的深入研究超出了本書的范圍。雖然本書所給出的機(jī)器人示例和應(yīng)用經(jīng)過測(cè)試可以確保其正確性和恰當(dāng)性,但是不能保證其中的命令、指令、程序和軟件沒有任何瑕疵和錯(cuò)誤,與任何適售性的特定標(biāo)準(zhǔn)一致,或滿足針對(duì)任何特別應(yīng)用的要求。
機(jī)器人代碼段、程序和示例僅用于闡述,在任何情形下當(dāng)它們的使用會(huì)導(dǎo)致人身傷害、造成財(cái)產(chǎn)或時(shí)間損失,以及產(chǎn)生理念沖突時(shí),都不應(yīng)該再繼續(xù)使用。對(duì)于因本書中呈現(xiàn)或在相應(yīng)支持網(wǎng)站上的機(jī)器人、命令、指令、機(jī)器人程序和示例的使用所帶來的直接或間接損害,作者和出版商不負(fù)任何責(zé)任。
機(jī)器人編程新兵訓(xùn)練營(yíng)歡迎閱讀本書。機(jī)器人編程“新兵訓(xùn)練營(yíng)”將確保你著手開始前掌握所有必備的信息。我們已經(jīng)構(gòu)建了很多類型的機(jī)器人并對(duì)它們進(jìn)行編程,從簡(jiǎn)單的單用途機(jī)器人到先進(jìn)的多功能自主機(jī)器人組群,因而發(fā)現(xiàn)這個(gè)短期機(jī)器人編程訓(xùn)練營(yíng)對(duì)于不熟悉機(jī)器人編程或想要學(xué)習(xí)新技術(shù)進(jìn)行機(jī)器人編程的人來說是不可缺少的。
準(zhǔn)備、設(shè)置、走起!無需繁瑣接線圖I1給出了機(jī)器人控制和操作的兩種基本分類。
圖I1機(jī)器人操作的兩種基本分類遙控機(jī)器人是由一名操作員用某種遠(yuǎn)程控制裝置或木偶模式(puppetmode)遠(yuǎn)程控制機(jī)器人的操作。有些遠(yuǎn)程控制要求一條連線(某種類型的線)以物理方式連接于機(jī)器人,而其他遠(yuǎn)程控制類型則是無線的(如無線電控制或紅外控制)。
自主機(jī)器人是一類不需要人類操作員控制的機(jī)器人。它們能自主地訪問和執(zhí)行一組指令,不需要遠(yuǎn)程控制的干預(yù)或中斷。
本書主要關(guān)注自主機(jī)器人操作和編程。雖然我們常討論、解釋、比較遙控機(jī)器人和自主機(jī)器人,但是本書將重點(diǎn)介紹對(duì)能夠自主運(yùn)行和執(zhí)行所分配任務(wù)的機(jī)器人進(jìn)行編程的基本概念。
如第9章所述,為滿足運(yùn)行策略而進(jìn)行不同混合并匹配,存在兩種類型機(jī)器人控制或操作的混合物。我們將會(huì)介紹混合并匹配不同的機(jī)器人控制策略的技術(shù)。
警示雖然本書并未假定讀者具有機(jī)器人編程的經(jīng)驗(yàn),但是全書假定讀者在標(biāo)準(zhǔn)編程語言(如Java或C++)方面具有一定基礎(chǔ),熟悉基本的編程技巧。同時(shí),本書并非以Java或C++呈現(xiàn)最終的機(jī)器人程序,而是先以圖或通俗易懂的語言給出基本的機(jī)器人指令技巧和概念。本書將引導(dǎo)讀者熟悉一些程序用于設(shè)計(jì)、規(guī)劃和分析,比如機(jī)器人場(chǎng)景圖形規(guī)劃(RobotScenarioVisualPlanning,RSVP)和實(shí)際環(huán)境中的機(jī)器人效能熵(RobotEffectivenessQuotientUsedinRealEnvironments,REQUIRE)。
注釋本書所有機(jī)器人指令、命令和程序已經(jīng)在基于ARM7、ARM9微控制器的機(jī)器人以及流行并廣泛使用的LEGONXT、EV3機(jī)器人上進(jìn)行了測(cè)試。本書中使用的所有其他機(jī)器人軟件也均在MacOSX和Linux環(huán)境下進(jìn)行了測(cè)試與運(yùn)行。
新兵訓(xùn)練營(yíng)基礎(chǔ)在試圖對(duì)機(jī)器人進(jìn)行編程前一定要回答五個(gè)基本問題:
1.?機(jī)器人屬于哪種類型?2.?機(jī)器人將要做什么?3.?機(jī)器人將要在哪里執(zhí)行任務(wù)?4.?機(jī)器人如何執(zhí)行任務(wù)?5.?如何對(duì)機(jī)器人進(jìn)行編程?許多新手和準(zhǔn)機(jī)器人程序員不能回答這些基本問題,導(dǎo)致機(jī)器人項(xiàng)目不能成功實(shí)現(xiàn)。在令任意類型的機(jī)器人執(zhí)行所分配任務(wù)的過程中,回答這些基本問題是第一步。本書演示了如何通過回答這些問題來形成一個(gè)分步的方法,從而成功指導(dǎo)一個(gè)機(jī)器人自主地執(zhí)行一系列任務(wù)。
本書介紹的機(jī)器人編程核心技巧本書中,我們將在機(jī)器人新兵訓(xùn)練營(yíng)中講解的基本技巧如表I1所示。
表I1機(jī)器人新兵訓(xùn)練營(yíng)技能表技巧描述機(jī)器人運(yùn)動(dòng)規(guī)劃與編程手臂運(yùn)動(dòng)夾持器編程末端作用器運(yùn)動(dòng)機(jī)器人導(dǎo)航利用不同類型的傳感器對(duì)機(jī)器人編程紅外傳感器超聲波傳感器觸碰傳感器光傳感器射頻識(shí)別傳感器攝像機(jī)傳感器溫度傳感器聲音傳感器分析傳感器使用電動(dòng)機(jī)機(jī)器人導(dǎo)航中使用的電動(dòng)機(jī)機(jī)器人手臂、夾持器和末端作用器中使用的電動(dòng)機(jī)傳感器定位中使用的電動(dòng)機(jī)決策機(jī)器人動(dòng)作選擇機(jī)器人方向選擇機(jī)器人路徑選擇指令轉(zhuǎn)換將英文指令和命令轉(zhuǎn)換成一種編程語言或一種機(jī)器人可以處理的指令形式上述技巧是讓機(jī)器人執(zhí)行幾乎任何所分配任務(wù)必需的核心技巧。對(duì)上述五個(gè)方面做出標(biāo)注是因?yàn)樗鼈兇砹撕粚?shí)機(jī)器人編程基石的第二步。
基本的通用機(jī)器人轉(zhuǎn)換器我們將在本書中使用兩個(gè)助手以一種易于理解和快速參考的形式呈現(xiàn)機(jī)器人程序和常見的機(jī)器人編程問題。第一個(gè)助手,基本通用機(jī)器人轉(zhuǎn)換器(BasicUniversalRobotTranslator,BURT),用于呈現(xiàn)本書中所有的代碼段、命令和機(jī)器人程序。BURT給出了每個(gè)代碼段、命令或機(jī)器人程序的兩個(gè)版本:
純英文版本機(jī)器人語言版本BURT用于將一組簡(jiǎn)單且易于理解的英文指令轉(zhuǎn)換成相應(yīng)的機(jī)
Contents 目 錄
譯者序
前言
致謝
第1章 究竟什么是機(jī)器人 1
1.1 定義機(jī)器人的7個(gè)標(biāo)準(zhǔn) 1
1.1.1標(biāo)準(zhǔn)1:感知環(huán)境 2
1.1.2標(biāo)準(zhǔn)2:可編程的動(dòng)作和行為 2
1.1.3標(biāo)準(zhǔn)3:改變環(huán)境、與環(huán)境交互或作用于環(huán)境 2
1.1.4 標(biāo)準(zhǔn)4:具備電源 2
1.1.5標(biāo)準(zhǔn)5:適用于表示指令和數(shù)據(jù)的語言 3
1.1.6標(biāo)準(zhǔn)6:無需外部干預(yù)的自主性 3
1.1.7標(biāo)準(zhǔn)7:一個(gè)沒有生命的機(jī)器 4
1.1.8 機(jī)器人分類 4
1.1.9 傳感器 6
1.1.10 執(zhí)行器 7
1.1.11 末端作用器 8
1.1.12 控制器 8
1.1.13 機(jī)器人所在的場(chǎng)景 12
1.2 給機(jī)器人指令 14
1.2.1每個(gè)機(jī)器人都有一種語言 14
1.2.2 遷就機(jī)器人的語言 16
1.2.3在可視化編程環(huán)境中表示機(jī)器人場(chǎng)景 18
1.2.4 Midamba的困境 18
1.3 下文預(yù)告 20
第2章 機(jī)器人詞匯 21
2.1 為什么需要更多努力 22
2.2 確定動(dòng)作 25
2.3 自主機(jī)器人的ROLL模型 26
2.3.1 機(jī)器人的能力 27
2.3.2場(chǎng)景和態(tài)勢(shì)中的機(jī)器人角色 28
2.4 下文預(yù)告 30
第3章 機(jī)器人場(chǎng)景圖形規(guī)劃 31
3.1 建立場(chǎng)景地圖 31
3.1.1 創(chuàng)建平面圖 32
3.1.2 機(jī)器人的世界 34
3.1.3 RSVP READ設(shè)置 36
3.2 偽代碼和繪制RSVP流程圖 38
3.2.1 控制流程和控制結(jié)構(gòu) 39
3.2.2 子程序 43
3.3 目標(biāo)和機(jī)器人狀態(tài)圖 46
3.4 下文預(yù)告 50
第4章 檢驗(yàn)機(jī)器人的實(shí)際能力 51
4.1 微控制器的實(shí)際檢驗(yàn) 53
4.2 傳感器的實(shí)際檢驗(yàn) 56
4.3 執(zhí)行器和末端作用器的檢驗(yàn) 60
4.4 REQUIRE機(jī)器人效能 62
4.5 下文預(yù)告 64
第5章 詳解傳感器 65
5.1 傳感器感知 66
5.1.1 模擬和數(shù)字傳感器 68
5.1.2 讀取模擬和數(shù)字信號(hào) 69
5.1.3 傳感器輸出 71
5.1.4 讀數(shù)存儲(chǔ) 72
5.1.5 有源和無源傳感器 72
5.1.6 傳感器與微控制器的連接 74
5.1.7 傳感器屬性 77
5.1.8 范圍和分辨率 78
5.1.9 精度和準(zhǔn)確度 78
5.1.10 線性度 79
5.1.11 傳感器校準(zhǔn) 80
5.1.12 傳感器相關(guān)問題 81
5.1.13 終端用戶校準(zhǔn)過程 81
5.1.14 校準(zhǔn)方法 82
5.2 下文預(yù)告 83
第6章 通過編程控制機(jī)器人的傳感器 84
6.1 使用顏色傳感器 84
6.1.1 顏色傳感器模式 86
6.1.2 探測(cè)距離 87
6.1.3 機(jī)器人環(huán)境的照明 87
6.1.4 校準(zhǔn)顏色傳感器 88
6.1.5 編程顏色傳感器 89
6.2用于檢測(cè)和跟蹤顏色目標(biāo)的數(shù)碼相機(jī) 92
6.3 利用RS Media跟蹤顏色目標(biāo) 92
6.4使用Pixy Vision傳感器跟蹤顏色目標(biāo) 95
6.4.1 訓(xùn)練Pixy以檢測(cè)目標(biāo) 96
6.4.2 編程Pixy 98
6.4.3 詳解屬性 101
6.5 超聲波傳感器 101
6.5.1超聲波傳感器的局限性和準(zhǔn)確性 102
6.5.2 超聲波傳感器的模式 106
6.5.3 采樣讀數(shù) 106
6.5.4 傳感器讀數(shù)的數(shù)據(jù)類型 107
6.5.5 校準(zhǔn)超聲波傳感器 107
6.5.6 編程超聲波傳感器 108
6.6 羅盤傳感器計(jì)算機(jī)器人的航向 117
6.7 下文預(yù)告 121
第7章 電動(dòng)機(jī)和伺服機(jī)構(gòu)編程 122
7.1 執(zhí)行器是輸出轉(zhuǎn)換器 122
7.1.1 電動(dòng)機(jī)特性 123
7.1.2 電壓 123
7.1.3 電流 123
7.1.4 轉(zhuǎn)速 123
7.1.5 扭矩 123
7.1.6 電阻 123
7.2 不同類型的直流電動(dòng)機(jī) 124
7.2.1 直流電動(dòng)機(jī) 124
7.2.2 轉(zhuǎn)速和扭矩 126
7.2.3 齒輪電動(dòng)機(jī) 127
7.3電動(dòng)機(jī)配置:直接和間接動(dòng)力傳動(dòng)系統(tǒng) 134
7.4 室內(nèi)和室外機(jī)器人的地形挑戰(zhàn) 134
7.4.1 應(yīng)對(duì)地形挑戰(zhàn) 135
7.4.2機(jī)器人手臂和末端作用器的扭矩挑戰(zhàn) 138
7.4.3 計(jì)算扭矩和轉(zhuǎn)速需求 138
7.4.4 電動(dòng)機(jī)和REQUIRE 139
7.5 通過編程使機(jī)器人移動(dòng) 140
7.5.1一個(gè)電動(dòng)機(jī),還是兩個(gè)、三個(gè)、更多個(gè)電動(dòng)機(jī) 140
7.5.2 執(zhí)行動(dòng)作 140
7.5.3 編程動(dòng)作 141
7.5.4通過編程使電動(dòng)機(jī)移動(dòng)到指定位置 145
7.5.5使用Arduino實(shí)現(xiàn)電動(dòng)機(jī)編程 151
7.6 機(jī)器人手臂和末端作用器 154
7.6.1 不同類型的機(jī)器人手臂 154
7.6.2 機(jī)器人手臂的扭矩 155
7.6.3 不同類型的末端作用器 157
7.6.4 為機(jī)器人的手臂進(jìn)行編程 159
7.6.5 計(jì)算運(yùn)動(dòng)學(xué) 163
7.7 下文預(yù)告 166
第8章 開始自主:構(gòu)建機(jī)器人所對(duì)應(yīng)的軟件機(jī)器人 167
8.1 初探軟件機(jī)器人 169
8.1.1 部件部分 171
8.1.2 動(dòng)作部分 171
8.1.3 任務(wù)部分 171
8.1.4 場(chǎng)景(態(tài)勢(shì))部分 171
8.2機(jī)器人的ROLL模型和軟件機(jī)器人框架 172
8.2.1BURT把軟件機(jī)器人框架轉(zhuǎn)換為類 173
8.2.2第一次實(shí)現(xiàn)自主機(jī)器人程序設(shè)計(jì) 184
8.3 下文預(yù)告 185
第9章 機(jī)器人SPACES 186
9.1 機(jī)器人需要自身的SPACES 187
9.1.1 擴(kuò)展的機(jī)器人場(chǎng)景 187
9.1.2 REQUIRE檢查表 188
9.1.3前提或后置條件不滿足時(shí)會(huì)發(fā)生的情況 190
9.1.4前提或后置條件不滿足時(shí)的行動(dòng)選擇 191
9.2 詳解機(jī)器人初始化后置條件 192
9.2.1啟動(dòng)前提條件和后置條件 194
9.2.2編碼前提條件和后置條件 195
9.2.3 前提和后置條件的出處 200
9.3 SPACES檢查和RSVP狀態(tài)圖 204
9.4 下文預(yù)告 206
第10章 自主機(jī)器人需要STORIES 207
10.1 不只是動(dòng)作 208
10.1.1 Birthday Robot Take 2 208
10.1.2 機(jī)器人STORIES