本書以一位受困于荒島的年輕人的視角帶領(lǐng)讀者進(jìn)行一場冒險。他必須尋找到一種給機(jī)器人編程的方法才能得以逃離。本書作為一本控制自主機(jī)器人編程指南,介紹了編程機(jī)器人傳感器、電動機(jī)以及將想法轉(zhuǎn)換為機(jī)器人可以自主執(zhí)行任務(wù)的實(shí)際方法和技術(shù)。對于硬、制造商、DIY項(xiàng)目,這些技術(shù)可以用于當(dāng)今領(lǐng)先的機(jī)器人微控制器(ARM9和ARM7)和機(jī)器人平臺(包括廣泛流行的低成本Arduino平臺,LEGOMindstormsEV3、NXT,以及WoweeRSMedia機(jī)器人)。
Preface機(jī)器人新兵訓(xùn)練營警示作為機(jī)器人程序員,我們應(yīng)確保所從事的編程對于公眾和機(jī)器人自身都是安全的,這是我們的特殊責(zé)任。當(dāng)對機(jī)器人進(jìn)行編程時,首先要考慮機(jī)器人與人類、動物、其他機(jī)器人或資產(chǎn)互動時的安全。這對于所有類型機(jī)器人的編程都是適用的,尤其是可編程自主機(jī)器人,即本書所介紹的機(jī)器人類型。本書所涉及的機(jī)器人命令、指令、程序和軟件僅用于展示,就安全性而言其不適合用于與人類、動物、其他機(jī)器人的互動。
對機(jī)器人安全的深入研究超出了本書的范圍。雖然本書所給出的機(jī)器人示例和應(yīng)用經(jīng)過測試可以確保其正確性和恰當(dāng)性,但是不能保證其中的命令、指令、程序和軟件沒有任何瑕疵和錯誤,與任何適售性的特定標(biāo)準(zhǔn)一致,或滿足針對任何特別應(yīng)用的要求。
機(jī)器人代碼段、程序和示例僅用于闡述,在任何情形下當(dāng)它們的使用會導(dǎo)致人身傷害、造成財產(chǎn)或時間損失,以及產(chǎn)生理念沖突時,都不應(yīng)該再繼續(xù)使用。對于因本書中呈現(xiàn)或在相應(yīng)支持網(wǎng)站上的機(jī)器人、命令、指令、機(jī)器人程序和示例的使用所帶來的直接或間接損害,作者和出版商不負(fù)任何責(zé)任。
機(jī)器人編程新兵訓(xùn)練營歡迎閱讀本書。機(jī)器人編程“新兵訓(xùn)練營”將確保你著手開始前掌握所有必備的信息。我們已經(jīng)構(gòu)建了很多類型的機(jī)器人并對它們進(jìn)行編程,從簡單的單用途機(jī)器人到先進(jìn)的多功能自主機(jī)器人組群,因而發(fā)現(xiàn)這個短期機(jī)器人編程訓(xùn)練營對于不熟悉機(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)介紹對能夠自主運(yùn)行和執(zhí)行所分配任務(wù)的機(jī)器人進(jìn)行編程的基本概念。
如第9章所述,為滿足運(yùn)行策略而進(jìn)行不同混合并匹配,存在兩種類型機(jī)器人控制或操作的混合物。我們將會介紹混合并匹配不同的機(jī)器人控制策略的技術(shù)。
警示雖然本書并未假定讀者具有機(jī)器人編程的經(jīng)驗(yàn),但是全書假定讀者在標(biāo)準(zhǔn)編程語言(如Java或C++)方面具有一定基礎(chǔ),熟悉基本的編程技巧。同時,本書并非以Java或C++呈現(xiàn)最終的機(jī)器人程序,而是先以圖或通俗易懂的語言給出基本的機(jī)器人指令技巧和概念。本書將引導(dǎo)讀者熟悉一些程序用于設(shè)計、規(guī)劃和分析,比如機(jī)器人場景圖形規(guī)劃(RobotScenarioVisualPlanning,RSVP)和實(shí)際環(huán)境中的機(jī)器人效能熵(RobotEffectivenessQuotientUsedinRealEnvironments,REQUIRE)。
注釋本書所有機(jī)器人指令、命令和程序已經(jīng)在基于ARM7、ARM9微控制器的機(jī)器人以及流行并廣泛使用的LEGONXT、EV3機(jī)器人上進(jìn)行了測試。本書中使用的所有其他機(jī)器人軟件也均在MacOSX和Linux環(huán)境下進(jìn)行了測試與運(yùn)行。
新兵訓(xùn)練營基礎(chǔ)在試圖對機(jī)器人進(jìn)行編程前一定要回答五個基本問題:
1.?機(jī)器人屬于哪種類型?2.?機(jī)器人將要做什么?3.?機(jī)器人將要在哪里執(zhí)行任務(wù)?4.?機(jī)器人如何執(zhí)行任務(wù)?5.?如何對機(jī)器人進(jìn)行編程?許多新手和準(zhǔn)機(jī)器人程序員不能回答這些基本問題,導(dǎo)致機(jī)器人項(xiàng)目不能成功實(shí)現(xiàn)。在令任意類型的機(jī)器人執(zhí)行所分配任務(wù)的過程中,回答這些基本問題是第一步。本書演示了如何通過回答這些問題來形成一個分步的方法,從而成功指導(dǎo)一個機(jī)器人自主地執(zhí)行一系列任務(wù)。
本書介紹的機(jī)器人編程核心技巧本書中,我們將在機(jī)器人新兵訓(xùn)練營中講解的基本技巧如表I1所示。
表I1機(jī)器人新兵訓(xùn)練營技能表技巧描述機(jī)器人運(yùn)動規(guī)劃與編程手臂運(yùn)動夾持器編程末端作用器運(yùn)動機(jī)器人導(dǎo)航利用不同類型的傳感器對機(jī)器人編程紅外傳感器超聲波傳感器觸碰傳感器光傳感器射頻識別傳感器攝像機(jī)傳感器溫度傳感器聲音傳感器分析傳感器使用電動機(jī)機(jī)器人導(dǎo)航中使用的電動機(jī)機(jī)器人手臂、夾持器和末端作用器中使用的電動機(jī)傳感器定位中使用的電動機(jī)決策機(jī)器人動作選擇機(jī)器人方向選擇機(jī)器人路徑選擇指令轉(zhuǎn)換將英文指令和命令轉(zhuǎn)換成一種編程語言或一種機(jī)器人可以處理的指令形式上述技巧是讓機(jī)器人執(zhí)行幾乎任何所分配任務(wù)必需的核心技巧。對上述五個方面做出標(biāo)注是因?yàn)樗鼈兇砹撕粚?shí)機(jī)器人編程基石的第二步。
基本的通用機(jī)器人轉(zhuǎn)換器我們將在本書中使用兩個助手以一種易于理解和快速參考的形式呈現(xiàn)機(jī)器人程序和常見的機(jī)器人編程問題。第一個助手,基本通用機(jī)器人轉(zhuǎn)換器(BasicUniversalRobotTranslator,BURT),用于呈現(xiàn)本書中所有的代碼段、命令和機(jī)器人程序。BURT給出了每個代碼段、命令或機(jī)器人程序的兩個版本:
純英文版本機(jī)器人語言版本BURT用于將一組簡單且易于理解的英文指令轉(zhuǎn)換成相應(yīng)的機(jī)
Contents 目 錄
譯者序
前言
致謝
第1章 究竟什么是機(jī)器人 1
1.1 定義機(jī)器人的7個標(biāo)準(zhǔn) 1
1.1.1標(biāo)準(zhǔn)1:感知環(huán)境 2
1.1.2標(biāo)準(zhǔn)2:可編程的動作和行為 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:一個沒有生命的機(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ī)器人所在的場景 12
1.2 給機(jī)器人指令 14
1.2.1每個機(jī)器人都有一種語言 14
1.2.2 遷就機(jī)器人的語言 16
1.2.3在可視化編程環(huán)境中表示機(jī)器人場景 18
1.2.4 Midamba的困境 18
1.3 下文預(yù)告 20
第2章 機(jī)器人詞匯 21
2.1 為什么需要更多努力 22
2.2 確定動作 25
2.3 自主機(jī)器人的ROLL模型 26
2.3.1 機(jī)器人的能力 27
2.3.2場景和態(tài)勢中的機(jī)器人角色 28
2.4 下文預(yù)告 30
第3章 機(jī)器人場景圖形規(guī)劃 31
3.1 建立場景地圖 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ù)字信號 69
5.1.3 傳感器輸出 71
5.1.4 讀數(shù)存儲 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 探測距離 87
6.1.3 機(jī)器人環(huán)境的照明 87
6.1.4 校準(zhǔn)顏色傳感器 88
6.1.5 編程顏色傳感器 89
6.2用于檢測和跟蹤顏色目標(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以檢測目標(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ī)器人的航向 117
6.7 下文預(yù)告 121
第7章 電動機(jī)和伺服機(jī)構(gòu)編程 122
7.1 執(zhí)行器是輸出轉(zhuǎn)換器 122
7.1.1 電動機(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 不同類型的直流電動機(jī) 124
7.2.1 直流電動機(jī) 124
7.2.2 轉(zhuǎn)速和扭矩 126
7.2.3 齒輪電動機(jī) 127
7.3電動機(jī)配置:直接和間接動力傳動系統(tǒng) 134
7.4 室內(nèi)和室外機(jī)器人的地形挑戰(zhàn) 134
7.4.1 應(yīng)對地形挑戰(zhàn) 135
7.4.2機(jī)器人手臂和末端作用器的扭矩挑戰(zhàn) 138
7.4.3 計算扭矩和轉(zhuǎn)速需求 138
7.4.4 電動機(jī)和REQUIRE 139
7.5 通過編程使機(jī)器人移動 140
7.5.1一個電動機(jī),還是兩個、三個、更多個電動機(jī) 140
7.5.2 執(zhí)行動作 140
7.5.3 編程動作 141
7.5.4通過編程使電動機(jī)移動到指定位置 145
7.5.5使用Arduino實(shí)現(xiàn)電動機(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 計算運(yùn)動學(xué) 163
7.7 下文預(yù)告 166
第8章 開始自主:構(gòu)建機(jī)器人所對應(yīng)的軟件機(jī)器人 167
8.1 初探軟件機(jī)器人 169
8.1.1 部件部分 171
8.1.2 動作部分 171
8.1.3 任務(wù)部分 171
8.1.4 場景(態(tài)勢)部分 171
8.2機(jī)器人的ROLL模型和軟件機(jī)器人框架 172
8.2.1BURT把軟件機(jī)器人框架轉(zhuǎn)換為類 173
8.2.2第一次實(shí)現(xiàn)自主機(jī)器人程序設(shè)計 184
8.3 下文預(yù)告 185
第9章 機(jī)器人SPACES 186
9.1 機(jī)器人需要自身的SPACES 187
9.1.1 擴(kuò)展的機(jī)器人場景 187
9.1.2 REQUIRE檢查表 188
9.1.3前提或后置條件不滿足時會發(fā)生的情況 190
9.1.4前提或后置條件不滿足時的行動選擇 191
9.2 詳解機(jī)器人初始化后置條件 192
9.2.1啟動前提條件和后置條件 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 不只是動作 208
10.1.1 Birthday Robot Take 2 208
10.1.2 機(jī)器人STORIES