ROS(機(jī)器人操作系統(tǒng)迫摔,RobotOperatingSystem),是專為機(jī)器人軟件開發(fā)所設(shè)計(jì)出來(lái)的一套電腦操作系統(tǒng)架構(gòu)。它是一個(gè)開源的元級(jí)操作系統(tǒng)(后操作系統(tǒng))哮怯,提供類似于操作系統(tǒng)的服務(wù),包括硬件抽象描述彼兆、底層驅(qū)動(dòng)程序管理危漱、共用功能的執(zhí)行、程序間消息傳遞邀秕、程序發(fā)行包管理赐匕,它也提供一些工具和庫(kù)用于獲取、建立、編寫和執(zhí)行多機(jī)融合的程序背零。
ROS的運(yùn)行架構(gòu)是一種使用ROS通信模塊實(shí)現(xiàn)模塊間P2P的松耦合的網(wǎng)絡(luò)連接的處理架構(gòu)腰吟,它執(zhí)行若干種類型的通訊,包括基于服務(wù)的同步RPC(遠(yuǎn)程過程調(diào)用)通訊徙瓶、基于Topic的異步數(shù)據(jù)流通訊毛雇,還有參數(shù)服務(wù)器上的數(shù)據(jù)存儲(chǔ)。
發(fā)展目標(biāo)
ROS的首要設(shè)計(jì)目標(biāo)是在機(jī)器人研發(fā)領(lǐng)域提高代碼復(fù)用率侦镇。ROS是一種分布式處理框架(又名Nodes)灵疮。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合壳繁。這些過程可以封裝到數(shù)據(jù)包(Packages)和堆棧(Stacks)中震捣,以便于共享和分發(fā)。ROS還支持代碼庫(kù)的聯(lián)合系統(tǒng)闹炉。使得協(xié)作亦能被分發(fā)蒿赢。這種從文件系統(tǒng)級(jí)別到社區(qū)一級(jí)的設(shè)計(jì)讓獨(dú)立地決定發(fā)展和實(shí)施工作成為可能。上述所有功能都能由ROS的基礎(chǔ)工具實(shí)現(xiàn)剩胁。
為了實(shí)現(xiàn)“共享與協(xié)作”這一首要目標(biāo)诉植,人們制訂了ROS架構(gòu)中的其他支援性目標(biāo):
“輕便”:ROS是設(shè)計(jì)得盡可能方便簡(jiǎn)易。您不必替換主框架與系統(tǒng)楞虾,因?yàn)镽OS編寫的代碼可以用于其他機(jī)器人軟件框架中蘑砖。毫無(wú)疑問的,ROS更易于集成與其他機(jī)器人軟件框架引宙。事實(shí)上ROS已完成與OpenRAVE永僚、Orocos和Player的整合。
ROS-agnostic庫(kù):【agnostic:不可知論】建議的開發(fā)模型是使用clear的函數(shù)接口書寫ROS-agnostic庫(kù)夸莱。
語(yǔ)言獨(dú)立性:ROS框架很容易在任何編程語(yǔ)言中執(zhí)行伙二。我們已經(jīng)能在Python和C++中順利運(yùn)行,同時(shí)添加有Lisp恤柴、Octave和Java語(yǔ)言庫(kù)崔三。
測(cè)試簡(jiǎn)單:ROS有一個(gè)內(nèi)建的單元/組合集測(cè)試框架,稱為“rostest”扯蕾。這使得集成調(diào)試和分解調(diào)試很容易软旁。
擴(kuò)展性:ROS適合于大型實(shí)時(shí)系統(tǒng)與大型的系統(tǒng)開發(fā)項(xiàng)目。
ROS的概念
ROS有三個(gè)層次的概念:分別為Filesystemlevel锚署,Computationgraphlevel扛肩,以及Communicationlevel。以下內(nèi)容具體的總結(jié)了這些層次及概念骨田。除了這三個(gè)層次的概念耿导,ROS也定義了兩種名稱--Package資源名稱和Graph資源名稱声怔。同樣會(huì)在以下內(nèi)容中提及。
ROS的FilesystemLevel文件系統(tǒng)層概念就是你在碟片里面遇到的資源舱呻,例如:
Packages:ROS的基本組織醋火,可以包含任意格式文件。一個(gè)Package可以包含ROS執(zhí)行時(shí)處理的文件(nodes)狮荔,一個(gè)ROS的依賴庫(kù)胎撇,一個(gè)數(shù)據(jù)集合,配置文件或一些有用的文件在一起殖氏。
Manifests:Manifests(manifest.xml)提供關(guān)于Package元數(shù)據(jù)晚树,包括它的許可信息和Package之間依賴關(guān)系,以及語(yǔ)言特性信息像編譯旗幟(編譯優(yōu)化參數(shù))雅采。
Stacks:Stacks是Packages的集合爵憎,它提供一個(gè)完整的功能,像“navigationstack”Stack與版本號(hào)關(guān)聯(lián)婚瓜,同時(shí)也是如何發(fā)行ROS軟件方式的關(guān)鍵宝鼓。
ManifestStackManifests:Stackmanifests(stack.xml)提供關(guān)于Stack元數(shù)據(jù),包括它的許可信息和Stack之間依賴關(guān)系拖见。
Message(msg)types:信息描述乾爆,位置在路徑:my_package/msg/MyMessageType.msg,定義數(shù)據(jù)類型在ROS的messagesROS里面滓莱。
Service(srv)types:服務(wù)描述舆伺,位置在路徑:my_package/srv/MyServiceType.srv,定義這個(gè)請(qǐng)求和相應(yīng)的數(shù)據(jù)結(jié)構(gòu)在ROSservices里面咏哈。
ROS的ComputationGraphLevel ComputationGraphLevel(計(jì)算圖)就是用ROS的P2P(peer-to-peer網(wǎng)絡(luò)傳輸協(xié)議)網(wǎng)絡(luò)集中處理所有的數(shù)據(jù)阀洛。基本的ComputationGraph的概念包括Node萄罐,Master调拳,ParameterSever,messages吧玉,services杀肩,topics,和bags警畴,以上所有的這些都以不同的方式給Graph傳輸數(shù)據(jù)洞难。
Nodes:Nodes(節(jié)點(diǎn))是一系列運(yùn)行中的程序。ROS被設(shè)計(jì)成在一定顆粒度下的模塊化系統(tǒng)泪漂。一個(gè)機(jī)器人控制系統(tǒng)通常包含許多Nodes。比如一個(gè)Node控制激光雷達(dá)歪泳,一個(gè)Node控制車輪馬達(dá)萝勤,一個(gè)Node處理定位,一個(gè)Node執(zhí)行路徑規(guī)劃,另外一個(gè)提供圖形化界面等等敌卓。一個(gè)ROS節(jié)點(diǎn)是由LibrariesROSclientlibrary寫成的慎式,例如roscpp和rospy.
Master:ROSMaster提供了登記列表和對(duì)其他計(jì)算圖的查找。沒有Master趟径,節(jié)點(diǎn)將無(wú)法找到其他節(jié)點(diǎn)瘪吏,交換消息或調(diào)用服務(wù)。
ServerParameterServer:參數(shù)服務(wù)器使數(shù)據(jù)按照鑰匙的方式存儲(chǔ)蜗巧。目前掌眠,參數(shù)服務(wù)器是主持的組成部分。
Messages:節(jié)點(diǎn)之間通過messages來(lái)傳遞消息幕屹。一個(gè)message是一個(gè)簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)孤批,包含一些歸類定義的區(qū)。支持標(biāo)準(zhǔn)的原始數(shù)據(jù)類型(整數(shù)触良、浮點(diǎn)數(shù)谒绍、布爾數(shù),等)和原始數(shù)組類型颓腮。message可以包含任意的嵌套結(jié)構(gòu)和數(shù)組(很類似于C語(yǔ)言的結(jié)構(gòu)structs)
Topics:Messages以一種發(fā)布/訂閱的方式傳遞底悍。一個(gè)node可以在一個(gè)給定的topic中發(fā)布消息。Topic是一個(gè)name被用于描述消息內(nèi)容谭某。一個(gè)node針對(duì)某個(gè)topic關(guān)注與訂閱特定類型的數(shù)據(jù)蜡瓜。可能同時(shí)有多個(gè)node發(fā)布或者訂閱同一個(gè)topic的消息;也可能有一個(gè)topic同時(shí)發(fā)布或訂閱多個(gè)topic期庆⌒總體上,發(fā)布者和訂閱者不了解彼此的存在耐陵。主要的概念在于將信息的發(fā)布者和需求者解耦晃尖、分離。邏輯上俏蛮,topic可以看作是一個(gè)嚴(yán)格規(guī)范化的消息bus撑蚌。每個(gè)bus有一個(gè)名字,每個(gè)node都可以連接到bus發(fā)送和接受符合標(biāo)準(zhǔn)類型的消息搏屑。
Services:發(fā)布/訂閱模型是很靈活的通訊模式争涌,但是多對(duì)多,單向傳輸對(duì)于分布式系統(tǒng)中經(jīng)常需要的“請(qǐng)求/回應(yīng)”式的交互來(lái)說(shuō)并不合適辣恋。因此亮垫,“請(qǐng)求/回應(yīng)”是通過services來(lái)實(shí)現(xiàn)的。這種通訊的定義是一種成對(duì)的消息:一個(gè)用于請(qǐng)求伟骨,一個(gè)用于回應(yīng)饮潦。假設(shè)一個(gè)節(jié)點(diǎn)提供了一個(gè)服務(wù)提供下一個(gè)name和客戶使用服務(wù)發(fā)送請(qǐng)求消息并等待答復(fù)燃异。ROS的客戶庫(kù)通常以一種遠(yuǎn)程調(diào)用的方式提供這樣的交互。
Bags:Bags是一種格式继蜡,用于存儲(chǔ)和播放ROS消息回俐。對(duì)于儲(chǔ)存數(shù)據(jù)來(lái)說(shuō)Bags是一種很重要的機(jī)制。例如傳感器數(shù)據(jù)很難收集但卻是開發(fā)與測(cè)試中必須的稀并。
在ROS的計(jì)算圖中仅颇,ROS的Master以一個(gè)nameservice的方式工作。它給ROS的節(jié)點(diǎn)存儲(chǔ)了topics和service的注冊(cè)信息梗力。Nodes與Master通信從而報(bào)告它們的注冊(cè)信息瘦肥。當(dāng)這些節(jié)點(diǎn)與master通信的時(shí)候,它們可以接收關(guān)于其他以注冊(cè)節(jié)點(diǎn)的信息并且建立與其它以注冊(cè)節(jié)點(diǎn)之間的聯(lián)系葵张。當(dāng)這些注冊(cè)信息改變時(shí)Master也會(huì)回饋這些節(jié)點(diǎn)局限,同時(shí)允許節(jié)點(diǎn)動(dòng)態(tài)創(chuàng)建與新節(jié)點(diǎn)之間的連接。
節(jié)點(diǎn)之間的連接是直接的;Master僅僅提供了查詢信息哀擒,就像一個(gè)DNS服務(wù)器棵辟。節(jié)點(diǎn)訂閱一個(gè)topic將會(huì)要求建立一個(gè)與發(fā)布該topics的節(jié)點(diǎn)的連接,并且將會(huì)在同意連接協(xié)議的基礎(chǔ)上建立該連接讳董。ROS里面使用最廣的連接協(xié)議是TCPROS渗蚁,這個(gè)協(xié)議使用標(biāo)準(zhǔn)的TCP/IP接口。
這樣的架構(gòu)允許脫鉤工作(decoupledoperation)豺章,通過這種方式大型或是更為復(fù)雜的系統(tǒng)得以建立尖洞,其中names方式是一種行之有效的手段。names方式在ROS系統(tǒng)中扮演極為重要的角色:topics搅厕,services煞秤,andparameters都有各自的names。每一個(gè)ROS客戶端庫(kù)都支持重命名吉捶,這等同于夺鲜,每一個(gè)編譯成功的程序能夠以另一種形似【名字】運(yùn)行。
例如呐舔,為了控制一個(gè)北陽(yáng)激光測(cè)距儀(Hokuyolaserrange-finder)币励,我們可以啟動(dòng)這個(gè)hokuyo_node驅(qū)動(dòng),這個(gè)驅(qū)動(dòng)可以給與激光儀進(jìn)行對(duì)話并且在"掃描"topic下可以發(fā)布sensor_msgs/LaserScan的信息珊拼。為了處理數(shù)據(jù)食呻,我們也許會(huì)寫一個(gè)使用laser_filters的node來(lái)訂閱"掃描"topic的信息。訂閱之后澎现,我們的過濾器將會(huì)自動(dòng)開始接收激光儀的信息仅胞。注意兩邊是如何脫鉤工作的。所有的hokuyo_node的節(jié)點(diǎn)都會(huì)完成發(fā)布"掃描"剑辫,不需要知道是否有節(jié)點(diǎn)被訂閱了干旧。所有的過濾器都會(huì)完成"掃描"的訂閱影兽,不論知道還是不知道是否有節(jié)點(diǎn)在發(fā)布"掃描"。在不引發(fā)任何錯(cuò)誤的情況下莱革,這兩個(gè)nodes可以任何的順序啟動(dòng),終止焊握,或者重啟揣洁。
以后我們也許會(huì)給我們的機(jī)器人加入另外一個(gè)激光器,這會(huì)導(dǎo)致我們重新設(shè)置我們的系統(tǒng)园赴。我們所需要做的就是重新映射已經(jīng)使用過的names铭轩。當(dāng)我們開始我們的第一個(gè)hokuyo_node時(shí),我們可以說(shuō)它用base_scan代替了映射掃描宴凌,并且和我們的過濾器節(jié)點(diǎn)做相同的事∈砟Γ現(xiàn)在,這些節(jié)點(diǎn)將會(huì)用base_scan的topic來(lái)通信從而代替凉灯,并且將不再監(jiān)聽"掃描"topic的信息猪破。然后我們就可以為我們的新激光測(cè)距儀啟動(dòng)另外一個(gè)hokuyo_node。
聲明:本網(wǎng)站所收集的部分公開資料來(lái)源于互聯(lián)網(wǎng)玻啡,轉(zhuǎn)載的目的在于傳遞更多信息及用于網(wǎng)絡(luò)分享滓乡,并不代表本站贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),也不構(gòu)成任何其他建議捌轮。本站部分作品是由網(wǎng)友自主投稿和發(fā)布咆下、編輯整理上傳,對(duì)此類作品本站僅提供交流平臺(tái)虽另,不為其版權(quán)負(fù)責(zé)暂刘。如果您發(fā)現(xiàn)網(wǎng)站上所用視頻、圖片捂刺、文字如涉及作品版權(quán)問題谣拣,請(qǐng)第一時(shí)間告知,我們將根據(jù)您提供的證明材料確認(rèn)版權(quán)并按國(guó)家標(biāo)準(zhǔn)支付稿酬或立即刪除內(nèi)容叠萍,以保證您的權(quán)益芝发!聯(lián)系電話:010-58612588 或 Email:editor@mmsonline.com.cn。
- 暫無(wú)反饋
編輯推薦
- 2025新年特刊:打造新質(zhì)生產(chǎn)力狂秘,智啟未來(lái)新篇章
- 定義制造業(yè)未來(lái)的數(shù)控加工中心技術(shù)專題
- 航空航天及交通領(lǐng)域先進(jìn)制造技術(shù)應(yīng)用專題
- 解碼消費(fèi)電子產(chǎn)品生產(chǎn)的數(shù)字化之路技術(shù)專題
- 精密智能機(jī)床躯肌,助力制造升級(jí)技術(shù)專題
- 汽車輕量化驅(qū)動(dòng)下的零部件加工應(yīng)用專題
- 高性能銑刀實(shí)現(xiàn)高精加工生產(chǎn)技術(shù)專題
- 航空航天發(fā)動(dòng)機(jī)解決方案專題
- 高效齒輪加工生產(chǎn)技術(shù)方案專題
- 金屬加工液的性能不止?jié)櫥夹g(shù)應(yīng)用專題