ROS機器人編程:原理與應用 ( 簡體 字) |
作者:〔美〕 懷亞特·S.紐曼(Wyatt S. Newman) 著 | 類別:1. -> 電子工程 -> 機器人 |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 51131 詢問書籍請說出此書號!【缺書】 NT售價: 995 元 |
出版日:5/1/2019 |
頁數:450 |
光碟數:0 |
|
站長推薦: |
印刷:全彩印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787111625766 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:ROS(Robot Operating System,機器人操作系統)正在成為現代機器人學的實際標準編程方法。 ROS生態系統現在由全世界數以萬計的用戶組成,覆蓋了從桌面愛好項目到大型工業自動化系統。
為什么是ROS?在1956年,Joseph Engelberger創立了Unimation公司,世界上第一個機器人公司〔7〕。然而,在過去的半個世紀里,機器人技術的進步令人失望。世界范圍內的機器人學研究也僅限于實驗室里的演示和探奇。這一領域的新生研究人員通常一無所有,從頭開始構建新型機器人,解決執行器和傳感器接口的問題,構建底層的伺服控制,并且通常在實現更高級的機器人能力之前就已經精疲力竭了,而這些自定義的機器人和軟件很少被復用于后續工作。
人們認識到采用構建巴比塔的模式是徒勞的,構建更智能的機器人的任務需要持續的、協作的努力,并建立在能夠不斷達到更高層能力的基礎上。在1984年,Vincent Hayward和Richard Paul引入了機器人控制C庫(Robot Control C Library, RCCL)〔15〕作為解決這一長期問題的方法。不幸的是,RCCL沒有獲得機器人研究人員足夠的認可。National Instruments〔24〕和Microsoft〔39-40〕均引入了試圖使機器人編程標準化的產品。然而,研究人員發現這些方法煩瑣而昂貴。
ROS于2007年由斯坦福人工智能實驗室發起〔26〕,它試圖統一零碎的谷歌所采用的機器人學方法,且于2008年至2013年得到Willow Garage的支持〔12〕,隨后自2013年至今得到谷歌開源機器人基金會(Open Source Robotics Foundation,OSRF)的支持〔10〕。ROS方法遵循了開源軟件和分布式協作的現代方法。此外,它橋接和提升了其他并行的開源工作,包括OpenCV〔28〕、PointCloudLibrary〔21〕、Open Dynamics Engine〔8〕、Gazebo〔19〕和Eigen〔20〕。對于研究人員而言,ROS在開放性和易用性方面可能與RCCL相似,而谷歌持續七年的支持是ROS存活的關鍵。
ROS現在在學術界、工業界和研究機構中得到了全世界的廣泛使用。開發人員提供了數以千計的軟件包,包括來自一些世界領先的專家在相關領域的解決方案。新的機器人公司在它們的產品上提供了ROS接口,并且已建立的工業機器人公司也引入了ROS接口。隨著廣泛采用ROS作為機器人編程實際標準的做法,人們對提高機器人的能力有了新的希望。在最近的DARPA機器人挑戰賽中,大多數入圍的團隊使用了ROS。新型自動駕駛汽車的開發商正在開發ROS。新的機器人公司正在崛起,這部分是由ROS資源驅動的。鑒于ROS的勢頭和功績,顯而易見,當今的機器人工程師必須精通ROS編程。
什么是ROS?將其稱為“機器人操作系統”并不全面。簡潔地定義ROS很困難,因為它包含了很多方面,包括:編程風格(特別是依賴于松散耦合的分布式節點),節點間通信的接口定義和范例,庫和包合并的接口定義,可視化、調試、數據記錄和系統診斷的工具集合,共享源代碼的存儲倉庫,橋接多個有用的、獨立的開源庫的橋梁。因此,ROS是機器人程序員的一種生活方式,而不只是一種簡單的操作系統。 ROS是一個針對機器人的開源、元級操作系統。它提供了用戶在操作系統上所期望的服務,包括硬件抽象、低層設備控制、常用功能的實現、進程之間的消息傳遞以及包管理。它還提供了在多臺計算機上獲取、生成、編寫以及運行代碼的工具和庫。
ROS的主要目標是支持機器人研究和開發中的代碼復用。ROS是一個分布式的進程(也稱節點)框架,它能使可執行的文件單獨設計以及在運行時松散耦合。這些進程可以打包成易于共享和分發的包。ROS還支持一個代碼庫的聯合系統,能夠同時分發協作。從文件系統級到社區級的這個設計實現了開發和部署的獨立決策,但所有這些都可以與ROS的基礎底層工具一起使用。 我是這樣解釋ROS的:
1.?管道:ROS提供了發布-訂閱消息傳遞基礎結構,旨在支持分布式計算系統的快速、輕松構建。
2.?工具:ROS提供了一套廣泛用于配置、啟動、反思、調試、可視化、記錄、測試和停止的分布式計算系統的工具。
3.?功能:聚焦于移動性、操作性和感知性,ROS提供了實現機器人有用的功能的廣泛庫集。
4.?生態系統:ROS擁有規模龐大的社區支持,并通過著力聚焦于集成和文檔而不斷改進。ros.org是一個一站式的站點,在這里可以查找和了解來自世界各地開發者的成千上萬個可用ROS包。
來自參考文獻〔13〕對ROS的解釋如下:
ROS(發音Ross〔rs〕)的主要目標是提供一個統一的開源編程框架,用于在各種真實世界和仿真環境中控制機器人。
來自參考文獻〔13〕中的ROS管道:
ROS中的核心實體稱為節點。節點通常是用Python或C++編寫的小程序,用于執行一些相對簡單的任務或過程。節點可以相互獨立地啟動和停止,并通過傳遞消息進行通信。節點可以在某些主題上發布消息或向其他節點提供服務。
例如,發布器節點可能會報告從連接到機器人微控制器的傳感器傳來的數據。/head-sonar主題上數值為0.5的消息意味著傳感器當前檢測的物體有0.5 m遠。任何想從這個傳感器知曉讀數的節點只需訂閱/head-sonar主題即可。為了使用這些值,訂閱器節點定義了一個回調函數,每當新消息到達訂閱的主題時它就會執行。這種情況發生的頻率取決于發布器節點更新其消息的速率。
節點還可以定義一個或多個服務。當從另一個節點發送請求時,ROS服務會產生某個行為或發送應答。一個簡單的例子就是打開或關閉LED的服務。一個更復雜的例子是,當給定一個目標位置和機器人的初始位姿時,返回一個移動機器人導航規劃的服務。
學習ROS的方法:ROS有很多功能、工具、風格和習慣。ROS的學習曲線陡峭,因為在富有成效地使用它之前需要掌握很多細節。ROS wiki有文檔和一系列教程的鏈接。然而,這些對于ROS的初學者而言可能很難遵循,因為定義是分散的,并且所呈現的細節水平千差萬別,從未經說明的示例到面向復雜用戶的解釋。本書的目的是從簡單的代碼示例以及相應的操作理論層面向讀者介紹ROS的基本組件。這種介紹只會觸及表面,但應該能讓讀者開始建立有用的ROS節點,并使教程變得更可讀。
ROS代碼可以用C++或Python編寫。本書僅使用C++。對于Python,讀者可參考《ROS機器人編程實踐》(中文版已出版,ISBN:978-7-111-58529-9)〔34〕。
本書配套的代碼示例假定采用Linux Ubuntu 14.04和ROS Indigo。如果你使用PC運行Windows或使用Mac運行OSX,則一個選擇是安裝VirtualBox來設置虛擬Linux計算機,以便在不影響原操作系統的情況下運行。 配置計算機來使用ROS可能是一個挑戰。可參考《機器人操作系統(ROS)淺析》(中文版已出版)〔27〕以進一步闡明和協助ROS的安裝,并獲得ROS組織和通信的更多細節和幕后解釋。 本書內容無法面面俱到。感興趣的學生、研究者、自動化工程師或機器人愛好者可以自行探索數以千計的ROS包。此外,還有在線教程有更詳細的細節和擴展內容。本書的目的是提供一個概覽,使讀者能夠理解ROS、ROS包和ROS工具的組織,將現有ROS包納入新的應用中,并開發新的包用于機器人和自動化系統。本書使讀者能夠更好地了解現有的在線文檔以便進一步學習。
本書內容分為六部分:
ROS基礎
ROS中的仿真和可視化
ROS中的感知處理
ROS中的移動機器人
ROS中的機械臂
系統集成與高級控制
每個主題都覆蓋了廣泛的領域,包含了大量專業研究成果。本書無法一一在這些領域指導讀者。然而,機器人系統需要集成的元素橫跨硬件集成、人機界面、控制理論、運動學和動力學、操作規劃、運動規劃、圖像處理、場景解釋和人工智能等一系列主題。機器人工程師必須是通才,因此至少需要了解這些領域的基本實踐。ROS生態系統的一個目的就是讓工程師可以導入以上每個領域現有的包,并將它們集成到一個定制的系統中,而不必成為每個領域的專家。因此,了解每個領域的ROS接口和ROS方法對系統集成商來說極具價值,可以充分利用世界各地的機器人研究者、計算機科學家和軟件工程師所貢獻的專業知識。
致謝
在學術界,工作樂趣之一就是經常接觸聰明且富有激情的學生們。感謝我的前顧問Chad Rockey和Eric Perko,他們于2010年將我帶入ROS的大門。從此,我從一個ROS質疑者變成了傳播者。感謝這一路相伴的學生們,包括Tony Yanick、Bill Kulp、Ed Venator、Der-Lin Chow、Devin Schwab、Neal Aungst、Tom Shkurti、TJ Pech和Luc Bettaieb,他們幫我實現了轉變并學習了新的ROS技巧。
感謝Sethu Vijayakumar教授和蘇格蘭信息學與計算機科學聯盟,感謝他們對我在愛丁堡大學開設ROS課程和本書基礎課程時給予的支持。感謝愛丁堡大學的Chris Swetenham、Vladimir Ivan和Michael Camilleri,我們在DARPA機器人挑戰賽中一起開展ROS編程合作。在這個過程中,他們教會了我很多額外的ROS編程技巧。
感謝Hung Hing Ying家庭的支持,他們的基金會使得我成為香港大學的Hung Hing Ying客座教授,期間與香港大學DARPA機器人挑戰賽團隊一起組織并開展工作。這是一次寶貴的實踐ROS的經歷。感謝東京大學的Kei Okada及其學生對我們港大團隊所做的貢獻,包括ROS使用的寶貴意見和技巧。
感謝Taylor and Francis的資深策劃編輯Randi Cohen,她鼓勵并指導了本書的出版。感謝為本書提出了寶貴建議的審稿者,他們是NASA Goddard空間飛行中心和馬里蘭大學的Craig Carignan博士和廣東工業大學的Juan Rojas教授。
最后,感謝我的妻子Peggy Gallagher、女兒Clea和Alair Newman的支持,以及不斷的鼓勵和幫助。
感謝谷歌和開源機器人基金、許多創建了有價值的ROS包和在線教程以及回答大量ROS問題的在線貢獻者,正是有了他們的支持,ROS才能成功。 |
內容簡介:ROS(機器人操作系統)已成為機器人領域的實際標準編程方法,并成功應用于大型工業自動化系統。本書不同于以往ROS相關圖書只注重實踐操作,還對ROS的底層原理做了深入的解釋,對機器人學的一些基礎知識也做了必要的介紹。除了系統講解ROS內部的工作機制外,還著重介紹了移動機器人和機械臂的工作原理,以及系統集成與高級控制等方面的應用,能夠讓讀者充分了解ROS原理及其在機器人主要領域的實踐應用。
本書特色:
覆蓋六大主題:ROS基礎、ROS仿真和可視化、ROS中的感知處理、ROS中的移動機器人、ROS中的機械臂、系統集成和高級控制。
在ROS基本知識(包括ROS工具和節點、定義消息、使用類以及創建庫)的基礎上,講解了如何使用Gazebo和rviz進行仿真和可視化,以及如何使用立體相機、三維激光雷達和深度相機等完成感知處理。
從理論聯系實踐的層面詮釋了移動機器人的運動控制和導航,機械臂的運動學、運動規劃和關節控制。
最后,整體論述了系統集成與高級控制。 |
目錄:譯者序 前言 第一部分 ROS基礎 / 1 第1章 概述:ROS工具和節點 / 2 1.1 ROS基礎概念 / 2 1.2 編寫ROS節點 / 5 1.2.1 創建ROS程序包 / 5 1.2.2 編寫一個最小的ROS發布器 / 8 1.2.3 編譯ROS節點 / 11 1.2.4 運行ROS節點 / 12 1.2.5 檢查運行中的最小發布器節點 / 13 1.2.6 規劃節點時間 / 15 1.2.7 編寫一個最小ROS訂閱器 / 17 1.2.8 編譯和運行最小訂閱器 / 19 1.2.9 總結最小訂閱器和發布器節點 / 21 1.3 更多的ROS工具:catkin_simple、roslaunch、rqt_console和rosbag / 21 1.3.1 用catkin_simple簡化CMakeLists.txt / 21 1.3.2 自動啟動多個節點 / 23 1.3.3 在ROS控制臺觀察輸出 / 25 1.3.4 使用rosbag記錄并回放數據 / 26 1.4 最小仿真器和控制器示例 / 28 1.5 小結 / 32 第2章 消息、類和服務器 / 33 2.1 定義自定義消息 / 33 2.1.1 定義一條自定義消息 / 34 2.1.2 定義一條變長的消息 / 38 2.2 ROS服務介紹 / 43 2.2.1 服務消息 / 43 2.2.2 ROS服務節點 / 45 2.2.3 與ROS服務手動交互 / 47 2.2.4 ROS服務客戶端示例 / 48 2.2.5 運行服務和客戶端示例 / 50 2.3 在ROS中使用C++類 / 51 2.4 在ROS中創建庫模塊 / 56 2.5 動作服務器和動作客戶端介紹 / 61 2.5.1 創建動作服務器包 / 62 2.5.2 定義自定義動作服務器消息 / 62 2.5.3 設計動作客戶端 / 68 2.5.4 運行示例代碼 / 71 2.6 參數服務器介紹 / 80 2.7 小結 / 84 第二部分 ROS中的仿真和可視化 / 85 第3章 ROS中的仿真 / 86 3.1 簡單的2維機器人仿真器 / 86 3.2 動力學仿真建模 / 93 3.3 統一的機器人描述格式 / 95 3.3.1 運動學模型 / 95 3.3.2 視覺模型 / 98 3.3.3 動力學模型 / 99 3.3.4 碰撞模型 / 102 3.4 Gazebo介紹 / 104 3.5 最小關節控制器 / 112 3.6 使用Gazebo插件進行關節伺服控制 / 118 3.7 構建移動機器人模型 / 124 3.8 仿真移動機器人模型 / 132 3.9 組合機器人模型 / 136 3.10 小結 / 139 第4章 ROS中的坐標變換 / 141 4.1 ROS中的坐標變換簡介 / 141 4.2 轉換偵聽器 / 149 4.3 使用Eigen庫 / 156 4.4 轉換ROS數據類型 / 161 4.5 小結 / 163 第5章 ROS中的感知與可視化 / 164 5.1 rviz中的標記物和交互式標記物 / 168 5.1.1 rviz中的標記物 / 168 5.1.2 三軸顯示示例 / 172 5.1.3 rviz中的交互式標記物 / 176 5.2 在rviz中顯示傳感器值 / 183 5.2.1 仿真和顯示激光雷達 / 183 5.2.2 仿真和顯示彩色相機數據 / 189 5.2.3 仿真和顯示深度相機數據 / 193 5.2.4 rviz中點的選擇 / 198 5.3 小結 / 201 第三部分 ROS中的感知處理 / 203 第6章 在ROS中使用相機 / 204 6.1 相機坐標系下的投影變換 / 204 6.2 內置相機標定 / 206 6.3 標定立體相機內參 / 211 6.4 在ROS中使用OpenCV / 217 6.4.1 OpenCV示例:尋找彩色像素 / 218 6.4.2 OpenCV示例:查找邊緣 / 223 6.5 小結 / 224 第7章 深度圖像與點云信息 / 225 7.1 從掃描LIDAR中獲取深度信息 / 225 7.2 立體相機的深度信息 / 230 7.3 深度相機 / 236 7.4 小結 / 237 第8章 點云數據處理 / 238 8.1 簡單的點云顯示節點 / 238 8.2 從磁盤加載和顯示點云圖像 / 244 8.3 將發布的點云圖像保存到磁盤 / 246 8.4 用PCL方法解釋點云圖像 / 248 8.5 物體查找器 / 257 8.6 小結 / 261 第四部分 ROS中的移動機器人 / 263 第9章 移動機器人的運動控制 / 264 9.1 生成期望狀態 / 264 9.1.1 從路徑到軌跡 / 264 9.1.2 軌跡構建器庫 / 268 9.1.3 開環控制 / 273 9.1.4 發布期望狀態 / 274 9.2 機器人狀態估計 / 282 9.2.1 從Gazebo獲得模型狀態 / 282 9.2.2 里程計 / 286 9.2.3 混合里程計、GPS和慣性傳感器 / 292 9.2.4 混合里程計和LIDAR / 297 9.3 差分驅動轉向算法 / 302 9.3.1 機器人運動模型 / 303 9.3.2 線性機器人的線性轉向 / 304 9.3.3 非線性機器人的線性轉向 / 306 9.3.4 非線性機器人的非線性轉向 / 308 9.3.5 仿真非線性轉向算法 / 309 9.4 相對于地圖坐標系的轉向 / 312 9.5 小結 / 317 第10章 移動機器人導航 / 318 10.1 構建地圖 / 318 10.2 路徑規劃 / 323 10.3 move_base客戶端示例 / 328 10.4 修改導航棧 / 331 10.5 小結 / 335 第五部分 ROS中的機械臂 / 337 第11章 底層控制 / 338 11.1 單自由度移動關節機器人模型 / 338 11.2 位置控制器示例 / 339 11.3 速度控制器示例 / 342 11.4 力控制器示例 / 344 11.5 機械臂的軌跡消息 / 349 11.6 7自由度臂的軌跡插值動作服務器 / 353 11.7 小結 / 354 第12章 機械臂運動學 / 355 12.1 正向運動學 / 356 12.2 逆向運動學 / 360 12.3 小結 / 365 第13章 手臂運動規劃 / 366 13.1 笛卡兒運動規劃 / 367 13.2 關節空間規劃的動態規劃 / 368 13.3 笛卡兒運動動作服務器 / 372 13.4 小結 / 376 第14章 Baxter仿真器進行手臂控制 / 377 14.1 運行Baxter仿真器 / 377 14.2 Baxter關節和主題 / 379 14.3 Baxter夾具 / 382 14.4 頭盤控制 / 385 14.5 指揮Baxter關節 / 387 14.6 使用ROS關節軌跡控制器 / 390 14.7 關節空間記錄和回放節點 / 391 14.8 Baxter運動學 / 397 14.9 Baxter笛卡兒運動 / 399 14.10 小結 / 404 第15章 object-grabber包 / 405 15.1 object-grabber代碼組織 / 405 15.2 對象操作查詢服務 / 407 15.3 通用夾具服務 / 410 15.4 object-grabber動作服務器 / 412 15.5 object-grabber動作客戶端示例 / 415 15.6 小結 / 425 第六部分 系統集成與高級控制 / 427 第16章 基于感知的操作 / 428 16.1 外部相機標定 / 428 16.2 綜合感知和操作 / 431 16.3 小結 / 440 第17章 移動操作 / 441 17.1 移動機械手模型 / 441 17.2 移動操作 / 442 17.3 小結 / 446 第18章 總結 / 447 參考文獻 / 449 |
序: |