機器人操作系統ROS詳細介紹

發(fā)布時(shí)間:2013-6-6 21:39    發(fā)布者:1046235000
關(guān)鍵詞: 機器人 , 操作系統 , ROS
  ROS(機器人操作系統,RobotOperatingSystem),是專(zhuān)為機器人軟件開(kāi)發(fā)所設計出來(lái)的一套電腦操作系統架構。它是一個(gè)開(kāi)源的元級操作系統(后操作系統),提供類(lèi)似于操作系統的服務(wù),包括硬件抽象描述、底層驅動(dòng)程序管理、共用功能的執行、程序間消息傳遞、程序發(fā)行包管理,它也提供一些工具和庫用于獲取、建立、編寫(xiě)和執行多機融合的程序。
  ROS的運行架構是一種使用ROS通信模塊實(shí)現模塊間P2P的松耦合的網(wǎng)絡(luò )連接的處理架構,它執行若干種類(lèi)型的通訊,包括基于服務(wù)的同步RPC(遠程過(guò)程調用)通訊、基于Topic的異步數據流通訊,還有參數服務(wù)器上的數據存儲。
  發(fā)展目標
  ROS的首要設計目標是在機器人研發(fā)領(lǐng)域提高代碼復用率。ROS是一種分布式處理框架(又名Nodes)。這使可執行文件能被單獨設計,并且在運行時(shí)松散耦合。這些過(guò)程可以封裝到數據包(Packages)和堆棧(Stacks)中,以便于共享和分發(fā)。ROS還支持代碼庫的聯(lián)合系統。使得協(xié)作亦能被分發(fā)。這種從文件系統級別到社區一級的設計讓獨立地決定發(fā)展和實(shí)施工作成為可能。上述所有功能都能由ROS的基礎工具實(shí)現。
  為了實(shí)現“共享與協(xié)作”這一首要目標,人們制訂了ROS架構中的其他支援性目標:
  “輕便”:ROS是設計得盡可能方便簡(jiǎn)易。您不必替換主框架與系統,因為ROS編寫(xiě)的代碼可以用于其他機器人軟件框架中。毫無(wú)疑問(wèn)的,ROS更易于集成與其他機器人軟件框架。事實(shí)上ROS已完成與OpenRAVE、Orocos和Player的整合。
  ROS-agnostic庫:【agnostic:不可知論】建議的開(kāi)發(fā)模型是使用clear的函數接口書(shū)寫(xiě)ROS-agnostic庫。
  語(yǔ)言獨立性:ROS框架很容易在任何編程語(yǔ)言中執行。我們已經(jīng)能在Python和C++中順利運行,同時(shí)添加有Lisp、Octave和Java語(yǔ)言庫。
  測試簡(jiǎn)單:ROS有一個(gè)內建的單元/組合集測試框架,稱(chēng)為“rostest”。這使得集成調試和分解調試很容易。
  擴展性:ROS適合于大型實(shí)時(shí)系統與大型的系統開(kāi)發(fā)項目。

  ROS的概念
  ROS有三個(gè)層次的概念:分別為Filesystemlevel,Computationgraphlevel,以及Communicationlevel。以下內容具體的總結了這些層次及概念。除了這三個(gè)層次的概念,ROS也定義了兩種名稱(chēng)--Package資源名稱(chēng)和Graph資源名稱(chēng)。同樣會(huì )在以下內容中提及。
  ROS的FilesystemLevel
  文件系統層概念就是你在碟片里面遇到的資源,例如:
  Packages:ROS的基本組織,可以包含任意格式文件。一個(gè)Package可以包含ROS執行時(shí)處理的文件(nodes),一個(gè)ROS的依賴(lài)庫,一個(gè)數據集合,配置文件或一些有用的文件在一起。
  Manifests:Manifests(manifest.xml)提供關(guān)于Package元數據,包括它的許可信息和Package之間依賴(lài)關(guān)系,以及語(yǔ)言特性信息像編譯旗幟(編譯優(yōu)化參數)。
  Stacks:Stacks是Packages的集合,它提供一個(gè)完整的功能,像“navigationstack”Stack與版本號關(guān)聯(lián),同時(shí)也是如何發(fā)行ROS軟件方式的關(guān)鍵。
  ManifestStackManifests:Stackmanifests(stack.xml)提供關(guān)于Stack元數據,包括它的許可信息和Stack之間依賴(lài)關(guān)系。
  Message(msg)types:信息描述,位置在路徑:my_package/msg/MyMessageType.msg,定義數據類(lèi)型在ROS的messagesROS里面。
  Service(srv)types:服務(wù)描述,位置在路徑:my_package/srv/MyServiceType.srv,定義這個(gè)請求和相應的數據結構在ROSservices里面。
  ROS的ComputationGraphLevel
  ComputationGraphLevel(計算圖)就是用ROS的P2P(peer-to-peer網(wǎng)絡(luò )傳輸協(xié)議)網(wǎng)絡(luò )集中處理所有的數據;镜腃omputationGraph的概念包括Node,Master,ParameterSever,messages,services,topics,和bags,以上所有的這些都以不同的方式給Graph傳輸數據。

  Nodes:Nodes(節點(diǎn))是一系列運行中的程序。ROS被設計成在一定顆粒度下的模塊化系統。一個(gè)機器人控制系統通常包含許多Nodes。比如一個(gè)Node控制激光雷達,一個(gè)Node控制車(chē)輪馬達,一個(gè)Node處理定位,一個(gè)Node執行路徑規劃,另外一個(gè)提供圖形化界面等等。一個(gè)ROS節點(diǎn)是由LibrariesROSclientlibrary寫(xiě)成的,例如roscpp和rospy.
  Master:ROSMaster提供了登記列表和對其他計算圖的查找。沒(méi)有Master,節點(diǎn)將無(wú)法找到其他節點(diǎn),交換消息或調用服務(wù)。
  ServerParameterServer:參數服務(wù)器使數據按照鑰匙的方式存儲。目前,參數服務(wù)器是主持的組成部分。
  Messages:節點(diǎn)之間通過(guò)messages來(lái)傳遞消息。一個(gè)message是一個(gè)簡(jiǎn)單的數據結構,包含一些歸類(lèi)定義的區。支持標準的原始數據類(lèi)型(整數、浮點(diǎn)數、布爾數,等)和原始數組類(lèi)型。message可以包含任意的嵌套結構和數組(很類(lèi)似于C語(yǔ)言的結構structs)
  Topics:Messages以一種發(fā)布/訂閱的方式傳遞。一個(gè)node可以在一個(gè)給定的topic中發(fā)布消息。Topic是一個(gè)name被用于描述消息內容。一個(gè)node針對某個(gè)topic關(guān)注與訂閱特定類(lèi)型的數據?赡芡瑫r(shí)有多個(gè)node發(fā)布或者訂閱同一個(gè)topic的消息;也可能有一個(gè)topic同時(shí)發(fā)布或訂閱多個(gè)topic?傮w上,發(fā)布者和訂閱者不了解彼此的存在。主要的概念在于將信息的發(fā)布者和需求者解耦、分離。邏輯上,topic可以看作是一個(gè)嚴格規范化的消息bus。每個(gè)bus有一個(gè)名字,每個(gè)node都可以連接到bus發(fā)送和接受符合標準類(lèi)型的消息。
  Services:發(fā)布/訂閱模型是很靈活的通訊模式,但是多對多,單向傳輸對于分布式系統中經(jīng)常需要的“請求/回應”式的交互來(lái)說(shuō)并不合適。因此,“請求/回應”是通過(guò)services來(lái)實(shí)現的。這種通訊的定義是一種成對的消息:一個(gè)用于請求,一個(gè)用于回應。假設一個(gè)節點(diǎn)提供了一個(gè)服務(wù)提供下一個(gè)name和客戶(hù)使用服務(wù)發(fā)送請求消息并等待答復。ROS的客戶(hù)庫通常以一種遠程調用的方式提供這樣的交互。
  Bags:Bags是一種格式,用于存儲和播放ROS消息。對于儲存數據來(lái)說(shuō)Bags是一種很重要的機制。例如傳感器數據很難收集但卻是開(kāi)發(fā)與測試中必須的。
  在ROS的計算圖中,ROS的Master以一個(gè)nameservice的方式工作。它給ROS的節點(diǎn)存儲了topics和service的注冊信息。Nodes與Master通信從而報告它們的注冊信息。當這些節點(diǎn)與master通信的時(shí)候,它們可以接收關(guān)于其他以注冊節點(diǎn)的信息并且建立與其它以注冊節點(diǎn)之間的聯(lián)系。當這些注冊信息改變時(shí)Master也會(huì )回饋這些節點(diǎn),同時(shí)允許節點(diǎn)動(dòng)態(tài)創(chuàng )建與新節點(diǎn)之間的連接。

  節點(diǎn)之間的連接是直接的;Master僅僅提供了查詢(xún)信息,就像一個(gè)DNS服務(wù)器。節點(diǎn)訂閱一個(gè)topic將會(huì )要求建立一個(gè)與發(fā)布該topics的節點(diǎn)的連接,并且將會(huì )在同意連接協(xié)議的基礎上建立該連接。ROS里面使用最廣的連接協(xié)議是TCPROS,這個(gè)協(xié)議使用標準的TCP/IP接口。
  這樣的架構允許脫鉤工作(decoupledoperation),通過(guò)這種方式大型或是更為復雜的系統得以建立,其中names方式是一種行之有效的手段。names方式在ROS系統中扮演極為重要的角色:topics,services,andparameters都有各自的names。每一個(gè)ROS客戶(hù)端庫都支持重命名,這等同于,每一個(gè)編譯成功的程序能夠以另一種形似【名字】運行。
  例如,為了控制一個(gè)北陽(yáng)激光測距儀(Hokuyolaserrange-finder),我們可以啟動(dòng)這個(gè)hokuyo_node驅動(dòng),這個(gè)驅動(dòng)可以給與激光儀進(jìn)行對話(huà)并且在"掃描"topic下可以發(fā)布sensor_msgs/LaserScan的信息。為了處理數據,我們也許會(huì )寫(xiě)一個(gè)使用laser_filters的node來(lái)訂閱"掃描"topic的信息。訂閱之后,我們的過(guò)濾器將會(huì )自動(dòng)開(kāi)始接收激光儀的信息。注意兩邊是如何脫鉤工作的。所有的hokuyo_node的節點(diǎn)都會(huì )完成發(fā)布"掃描",不需要知道是否有節點(diǎn)被訂閱了。所有的過(guò)濾器都會(huì )完成"掃描"的訂閱,不論知道還是不知道是否有節點(diǎn)在發(fā)布"掃描"。在不引發(fā)任何錯誤的情況下,這兩個(gè)nodes可以任何的順序啟動(dòng),終止,或者重啟。
  以后我們也許會(huì )給我們的機器人加入另外一個(gè)激光器,這會(huì )導致我們重新設置我們的系統。我們所需要做的就是重新映射已經(jīng)使用過(guò)的names。當我們開(kāi)始我們的第一個(gè)hokuyo_node時(shí),我們可以說(shuō)它用base_scan代替了映射掃描,并且和我們的過(guò)濾器節點(diǎn)做相同的事,F在,這些節點(diǎn)將會(huì )用base_scan的topic來(lái)通信從而代替,并且將不再監聽(tīng)"掃描"topic的信息。然后我們就可以為我們的新激光測距儀啟動(dòng)另外一個(gè)hokuyo_node。(ROS社區)
本文地址:http://selenalain.com/thread-116126-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
yuhuikeji 發(fā)表于 2015-12-23 22:46:23
謝謝分享。。。。。!
bijinyi 發(fā)表于 2017-9-8 17:50:37
學(xué)習了。。。。。。。。!
nudt_dhl 發(fā)表于 2017-11-23 09:46:19
學(xué)習!
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页