無人機編程實戰(zhàn):基于ArduPilot和Pixhawk
定 價:99 元
叢書名:機器人設(shè)計與制作系列
- 作者:[墨]胡里奧·阿爾貝托·門多薩-門多薩(Julio Alberto Mendoza-Mendoza)等
- 出版時間:2021/8/1
- ISBN:9787111687580
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:V279
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書包括三個部分,首先介紹自動駕駛儀和庫的特性。然后著重介紹對ArduPilot庫的重要部分的理解,其中描述了代碼的每個主要組成部分。第三部分是高級特性部分,目的是將獲得的知識擴展到實時應(yīng)用程序。每個部分都詳細(xì)描述了代碼及其組件、應(yīng)用程序和交互。
本書的目的是講授ArduPilot庫的功能以及以四旋翼通用多旋翼飛機為例的Pixhawk自動駕駛儀,同時也提供了其他類型的定制飛行器(參見附錄8)、陸地或水上交通工具,以及與上述庫兼容的其他自動駕駛儀擴展知識的指南。
本書包括三個部分:部分(引言)介紹自動駕駛儀和庫的特性;第二部分(順序操作模式)著重于對ArduPilot庫的重要部分的理解,描述了代碼的每個主要組成部分;第三部分(實時模式)介紹高級特性,目的是將獲得的知識擴展到實時應(yīng)用程序。每個部分都詳細(xì)描述了代碼及其組件、應(yīng)用程序和交互,當(dāng)然,還有作者建議的參考書目,供那些想要深入學(xué)習(xí)的讀者參考。
應(yīng)該指出,ArduPilot庫的使用并非Pixhawk自動駕駛儀所獨有,還可以擴展到許多其他平臺。但是,作者喜歡根據(jù)其性能來采用這種組合。這意味著,本書提供了基于這些庫的實訓(xùn),并允許終用戶對其工作進(jìn)行調(diào)整以適應(yīng)廣泛的自動駕駛儀和測試平臺。
先驗知識
本書的讀者至少應(yīng)具有高中學(xué)歷或技術(shù)學(xué)士學(xué)位。
必需的知識
編程:了解如何使用Arduino是必要的起點。
經(jīng)濟(jì)實力:進(jìn)行自動駕駛研究時,購買各種零部件的成本較高。你應(yīng)該有能力購買或組裝自己的飛行器和相應(yīng)的零件。
英語:為了解決某些問題,通常需要訪問國外的論壇和商店,或觀看英語視頻,因此有必要具有中等英語水平。
好有但非必需的知識
數(shù)學(xué):你應(yīng)該了解向量和矩陣的基本推導(dǎo)以及基本運算。
物理和控制:你應(yīng)該了解阻尼諧振蕩器和PD控制的概念、力和扭矩的概念、坐標(biāo)系的使用以及如何求解運動和力的分量。
預(yù)期結(jié)果
通過閱讀本書,你將能夠:
以先進(jìn)的方式對Pixhawk進(jìn)行編程。Pixhawk是ETH創(chuàng)建的開源自動駕駛儀,廣泛用于自動駕駛儀的研發(fā)領(lǐng)域。
使用ArduPilot庫,該庫是世界上大多數(shù)用戶進(jìn)行自動駕駛儀研究和開發(fā)的軟件開發(fā)接口之一。
以一種非常具體的方式利用四軸飛行器模擬和實現(xiàn)任何空中、地面和水上自動駕駛的基本半自動控制。
將理論與實踐相結(jié)合,開發(fā)自動駕駛儀。
在自動駕駛儀的設(shè)計過程中選擇硬件和軟件組件。
使用與本書介紹的技術(shù)兼容的其他硬件和軟件開發(fā)包。
熟悉該領(lǐng)域常用的科學(xué)和技術(shù)術(shù)語。
熟悉該領(lǐng)域相關(guān)的文章和書籍。
通過全向飛行器的基本理論,將四軸飛行器應(yīng)用的知識擴展到三維飛行器上(即可以實現(xiàn)“任意方向”和“任意位置”)。
在構(gòu)建自己的自動駕駛儀(通過編程微控制器、數(shù)字信號處理器(DSP)、現(xiàn)場可編程門陣列(FPGA)、嵌入式卡或任何其他方法)時,確定與自動駕駛相關(guān)的復(fù)雜事項和操作流程。
許可證
ArduPilot庫和Mission Planner軟件是GPLv3免許可證軟件,可以按照自由軟件基金會(www.fsf.org/)所述的GNU GPLv3條款和限制重新分發(fā)或修改它們。
發(fā)布代碼和程序的目的是希望它們有用,但沒有任何保證,甚至沒有對特定用途的適銷性的隱含保證。有關(guān)更多詳細(xì)信息,請參見GNU項目的“通用公共許可證”部分。
ArduPilot庫可以從http://ardupilot.org/dev/docs/apmcopter-programming-libraries.html下載。
可以從http://ardupilot.org/planner/下載Mission Planner軟件。
Pixhawk自動駕駛儀具有屬于Lorenz Meier的CC-BY-SA 3.0許可證(https://creativecommons.org/licenses/bysa/3.0/deed.es)。
其官方文檔位于https://dev.px4.io/en/contribute/licenses.html。
PX4庫具有修改的BSD許可證(https://opensource.org/licenses/BSD-3-Clause)。
幾乎所有終端都是公共領(lǐng)域的軟件。我們建議使用terminal.exe、putty或任何其他等效工具。
Java SE開發(fā)工具包8u111更新了名為jdk-8u111-windows-i586.exe的可執(zhí)行文件,它屬于Oracle,并且僅在需要正確執(zhí)行包含在庫中的Eclipse版本的情況下才需要從www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html下載。
責(zé)任條款
出版商、作者、ArduPilot或Pixhawk項目的開發(fā)社區(qū)都不對讀者使用本書知識設(shè)計、編程或操作的任何飛行器或機器人承擔(dān)任何責(zé)任。
每一位讀者都有責(zé)任做到以下幾點:
1.閱讀并正確理解這本書的全文。
2.對個人項目有適當(dāng)?shù)臋?quán)限和安全措施。
3.為項目使用合適的材料和設(shè)備。
無論是出版商、作者,還是ArduPilot或Pixhawk項目的開發(fā)社區(qū),都不會回復(fù)與每個讀者的個人項目相關(guān)的問題或看法,無論這些項目有多重要或多緊急。要明白,這本書包含了足夠詳細(xì)的資料,在非常特殊的情況下,也可以訪問在線論壇:
http://discuss.px4.io/
https://discuss.ardupilot.org/
http://ardupilot.org/dev/docs/apmcopter-programming-libraries.html的社區(qū)版塊
無論是出版商、作者,還是ArduPilot或Pixhawk項目的開發(fā)社區(qū),都不對讀者在軟件安裝過程中或之后對他們的計算機設(shè)備或嵌入式系統(tǒng)造成的損害負(fù)責(zé),每個讀者都有責(zé)任按照所提供的說明進(jìn)行操作。
無論是出版商還是作者,都不對ArduPilot開發(fā)社區(qū)或Pixhawk項目所產(chǎn)生的代碼和語法變化負(fù)責(zé)。這是可以理解
譯者序
前言
致謝
部分 引言
第1章 硬件和軟件說明 2
1.1 自動駕駛儀 2
1.2 自動駕駛儀的種類:SDK與GUI 3
1.3 SDK的種類 4
1.4 Pixhawk自動駕駛儀(硬件) 5
1.5 克隆版本與原始版本 8
1.6 商業(yè)自動駕駛儀與你自己的設(shè)計 8
1.7 ArduPilot庫(軟件) 9
1.8 兼容性和類似項目 9
1.9 硬件和軟件之間的困惑 10
1.10 本章小結(jié) 10
第2章 ArduPilot工作環(huán)境 11
2.1 ArduPilot庫的相關(guān)文件類型 11
2.2 特定數(shù)據(jù)類型 11
2.3 所用程序的描述和流程 12
2.3.1 編碼和編譯 13
2.3.2 連接和加載接口 13
2.3.3 物理執(zhí)行 13
2.3.4 顯示 13
2.3.5 反饋 14
2.4 上傳自定義代碼到自動駕駛儀 14
2.5 使用Eclipse創(chuàng)建新項目 16
2.6 錯誤校驗 21
2.7 ArduPilot庫中直接使用Arduino是否可行 26
2.8 本章小結(jié) 27
第3章 概念和定義 28
3.1 輔助組件 28
3.1.1 無刷電機 28
3.1.2 ESC 29
3.1.3 螺旋槳 30
3.1.4 框架 30
3.1.5 特殊連接器 31
3.1.6 遙測模塊(無線串行通信) 32
3.1.7 鋰電池 33
3.1.8 電池測試儀或電池監(jiān)測器 33
3.1.9 GPS模塊 34
3.1.10 分配器 34
3.1.11 電源模塊 35
3.1.12 硅線 36
3.1.13 熱電偶 36
3.1.14 緊扣件 36
3.1.15 被動防振模塊 36
3.1.16 遙控器 37
3.1.17 嵌入式車載電腦 37
3.1.18 特殊Pixhawk組件 38
3.2 計算效率與數(shù)學(xué)等式 38
3.3 使用變量、函數(shù)、模塊和對象 39
3.3.1 變量 39
3.3.2 結(jié)構(gòu)體 39
3.3.3 函數(shù) 40
3.3.4 模塊 40
3.4 getter和setter的概念 42
3.5 方向和位置的概念 42
3.6 安裝和編碼之間的區(qū)別 44
3.7 ArduPilot代碼的常用部分 44
3.8 ArduPilot代碼編程的常用模型 45
3.9 本章小結(jié) 46
參考資料和建議網(wǎng)站 47
第二部分 順序操作模式
第4章 基本輸入和輸出操作 51
4.1 頭文件 52
4.2 設(shè)置 54
4.2.1 寫入終端 54
4.2.2 讀取終端 56
4.2.3 讀取無線電信號 57
4.3 輔助通道與狀態(tài)機簡介 62
4.3.1 內(nèi)部傳感器讀取位置和方向 64
4.3.2 外部位置傳感器讀數(shù)(GPS) 68
4.3.3 讀取模擬傳感器 72
4.3.4 信號濾波 73
4.3.5 讀寫數(shù)字 75
4.3.6 電池讀數(shù) 77
4.3.7 通過主LED使用視覺警報 78
4.4 本章小結(jié) 79
第5章 高級操作 80
5.1 有線和無線串行通信 80
5.2 通信程序 83
5.2.1 發(fā)送數(shù)據(jù)的過程 84
5.2.2 數(shù)據(jù)驗證過程 87
5.2.3 基本“校驗和”方法的描述 87
5.2.4 XOR“校驗和”方法的描述 87
5.3 輪詢 89
5.4 通過串行通信和開發(fā)板從外部設(shè)備讀取信息 97
5.5 寫入無刷電機(BLDC電機) 99
5.5.1 代碼優(yōu)化 106
5.5.2 寫入電機的簡化函數(shù) 106
5.6 寫入標(biāo)準(zhǔn)直流電機(有刷) 110
5.7 使用步進(jìn)電機 117
5.8 使用伺服電機執(zhí)行輔助任務(wù) 118
5.9 ArduPilot兼容電機總結(jié) 121
5.10 數(shù)據(jù)的使用與存儲 121
5.11 使用Mission Planner GUI繪制SD數(shù)據(jù) 126
5.12 時間管理 133
5.13 本章小結(jié) 135
第6章 控制具有平穩(wěn)飛行模式的四軸飛行器 136
6.1 多軸飛行器的基本建模 140
6.2 第二個例子:雙軸飛行器(同軸電機分析) 149
6.3 速度運動學(xué)關(guān)系 155
6.3.1 動態(tài)平移方程 157
6.3.2 動態(tài)旋轉(zhuǎn)方程 158
6.4 飛行模式 161
6.5 解耦的任務(wù) 163
6.6 控制方法 165
6.7 閉環(huán)與開環(huán) 165
6.8 飽和PD控制(飛行的軟模式基本控制) 166
6.9 無人機飛行的實施 175
6.10 本章小結(jié) 180
參考資料 180
第三部分 實 時 模 式
第7章 實時工作環(huán)境 184
7.1 鏈接器 184
7.2 調(diào)度程序說明 184
7.3 實時模式/調(diào)度程序模式下的ArduPilot常用部件 185
7.4 測量任務(wù)執(zhí)行時間 186
7.5 本章小結(jié) 190
第8章 應(yīng)用程序代碼 191
8.1 radio.pde模塊 194
8.2 control.pde模塊 194
8.3 data.pde模塊 197
8.4 pose.pde模塊 200
8.5 本章小結(jié) 201
參考資料 202
附錄1 與其他SDK命令的比較 203
附錄2 設(shè)置擴展代碼 205
附錄3 擴展頭文件 206
附錄4 完整功能代碼 210
附錄5 有用的關(guān)鍵字 215
附錄6 安裝ArduPilot庫 216
附錄7 推力矢量 234
附錄8 全向性 236
附錄9 擴展功率的方法 239
附錄10 四軸飛行器設(shè)計總結(jié) 241
附錄11 使用頭文件 245