ROS Indigo文件系統(tǒng)導(dǎo)航

總體結(jié)構(gòu)

根據(jù)ROS系統(tǒng)代碼的維護(hù)者和分布來(lái)標(biāo)示,主要有兩大部分:

  • main:核心部分生巡,主要由Willow Garage公司和一些開(kāi)發(fā)者設(shè)計(jì)耙蔑、提供以及維護(hù)。它提供了一些分布式計(jì)算的基本工具孤荣,以及整個(gè)ROS的核心部分的程序編寫(xiě)纵潦。
  • universe:全球范圍的代碼,有不同國(guó)家的ROS社區(qū)組織開(kāi)發(fā)和維護(hù)垃环。一種是庫(kù)的代碼邀层,如OpenCV、PCL等;庫(kù)的上一層是從功能角度提供的代碼遂庄,如人臉識(shí)別寥院,他們調(diào)用下層的庫(kù);最上層的代碼是應(yīng)用級(jí)的代碼,讓機(jī)器人完成某一確定的功能涛目。

一般是從另一個(gè)角度對(duì)ROS分級(jí)的秸谢,主要分為三個(gè)級(jí)別:計(jì)算圖級(jí)凛澎、文件系統(tǒng)級(jí)社區(qū)級(jí)估蹄。

計(jì)算圖級(jí) Computation Graph level

計(jì)算圖是ROS處理數(shù)據(jù)的一種點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式塑煎。程序運(yùn)行時(shí),所有進(jìn)程以及他們所進(jìn)行的數(shù)據(jù)處理臭蚁,將會(huì)通過(guò)一種點(diǎn)對(duì)點(diǎn)的網(wǎng)絡(luò)形式表現(xiàn)出來(lái)最铁。這一級(jí)主要包括幾個(gè)重要概念:節(jié)點(diǎn)(node)、消息(message)垮兑、主題(topic)冷尉、服務(wù)(service)。

節(jié)點(diǎn) Node

節(jié)點(diǎn)就是一些直行運(yùn)算任務(wù)的進(jìn)程系枪。ROS利用規(guī)娜干冢可增長(zhǎng)的方式是代碼模塊化:一個(gè)系統(tǒng)就是典型的由很多節(jié)點(diǎn)組成的。在這里私爷,節(jié)點(diǎn)也可以被稱(chēng)之為“軟件模塊”雾棺。我們使用“節(jié)點(diǎn)”使得基于ROS的系統(tǒng)在運(yùn)行的時(shí)候更加形象化:當(dāng)許多節(jié)點(diǎn)同時(shí)運(yùn)行時(shí),可以很方便的將端對(duì)端的通訊繪制成一個(gè)圖表衬浑,在這個(gè)圖表中捌浩,進(jìn)程就是圖中的節(jié)點(diǎn),而端對(duì)端的連接關(guān)系就是其中弧線(xiàn)連接嚎卫。

消息 Message

節(jié)點(diǎn)之間是通過(guò)傳送消息進(jìn)行通訊的嘉栓。每一個(gè)消息都是一個(gè)嚴(yán)格的數(shù)據(jù)結(jié)構(gòu)宏榕。原來(lái)標(biāo)準(zhǔn)的數(shù)據(jù)類(lèi)型(整型拓诸,浮點(diǎn)型,布爾型等等)都是支持的麻昼,同時(shí)也支持原始數(shù)組類(lèi)型奠支。消息可以包含任意的嵌套結(jié)構(gòu)和數(shù)組(很類(lèi)似于C語(yǔ)言的結(jié)構(gòu)structs)。

主題 Topic

消息以一種發(fā)布/訂閱的方式傳遞抚芦。一個(gè)節(jié)點(diǎn)可以在一個(gè)給定的主題中發(fā)布消息倍谜。一個(gè)節(jié)點(diǎn)針對(duì)某個(gè)主題關(guān)注與訂閱特定類(lèi)型的數(shù)據(jù)〔媛眨可能同時(shí)有多個(gè)節(jié)點(diǎn)發(fā)布或者訂閱同一個(gè)主題的消息尔崔。總體上褥民,發(fā)布者和訂閱者不了解彼此的存在季春。

服務(wù) Service

雖然基于話(huà)題的發(fā)布/訂閱模型是很靈活的通訊模式,但是它廣播式的路徑規(guī)劃對(duì)于可以簡(jiǎn)化節(jié)點(diǎn)設(shè)計(jì)的同步傳輸模式并不適合消返。在ROS中载弄,我們稱(chēng)之為一個(gè)服務(wù)耘拇,用一個(gè)字符串和一對(duì)嚴(yán)格規(guī)范的消息定義:一個(gè)用于請(qǐng)求,一個(gè)用于回應(yīng)宇攻。這類(lèi)似于web服務(wù)器惫叛,web服務(wù)器是由URIs定義的,同時(shí)帶有完整定義類(lèi)型的請(qǐng)求和回復(fù)文檔逞刷。需要注意的是嘉涌,不像話(huà)題,只有一個(gè)節(jié)點(diǎn)可以以任意獨(dú)有的名字廣播一個(gè)服務(wù):只有一個(gè)服務(wù)可以稱(chēng)之為“分類(lèi)象征”亲桥,比如說(shuō)洛心,任意一個(gè)給出的URI地址只能有一個(gè)web服務(wù)器。

節(jié)點(diǎn)控制器 Master

在上面概念的基礎(chǔ)上题篷,需要有一個(gè)控制器可以使所有節(jié)點(diǎn)有條不紊的執(zhí)行词身,這就是一個(gè)ROS的控制器(Master)。

ROS Master通過(guò)RPC(Remote Procedure Call Protocol番枚,遠(yuǎn)程過(guò)程調(diào)用)提供了登記列表和對(duì)其他計(jì)算圖表的查找法严。沒(méi)有控制器,節(jié)點(diǎn)將無(wú)法找到其他節(jié)點(diǎn)葫笼,交換消息或調(diào)用服務(wù)深啤。

比如控制節(jié)點(diǎn)訂閱和發(fā)布消息的模型如下:

ROS的控制器給ROS的節(jié)點(diǎn)存儲(chǔ)了主題和服務(wù)的注冊(cè)信息。節(jié)點(diǎn)與控制器通信從而報(bào)告它們的注冊(cè)信息路星。當(dāng)這些節(jié)點(diǎn)與控制器通信的時(shí)候溯街,它們可以接收關(guān)于其他以注冊(cè)及節(jié)點(diǎn)的信息并且建立與其它以注冊(cè)節(jié)點(diǎn)之間的聯(lián)系。當(dāng)這些注冊(cè)信息改變時(shí)控制器也會(huì)回饋這些節(jié)點(diǎn)洋丐,同時(shí)允許節(jié)點(diǎn)動(dòng)態(tài)創(chuàng)建與新節(jié)點(diǎn)之間的連接呈昔。

節(jié)點(diǎn)與節(jié)點(diǎn)之間的連接是直接的,控制器僅僅提供了查詢(xún)信息友绝,就像一個(gè)DNS服務(wù)器堤尾。節(jié)點(diǎn)訂閱一個(gè)主題將會(huì)要求建立一個(gè)與出版該主題的節(jié)點(diǎn)的連接,并且將會(huì)在同意連接協(xié)議的基礎(chǔ)上建立該連接迁客。

另:ROS控制器控制服務(wù):

文件系統(tǒng)級(jí) Filesystem level

ROS文件系統(tǒng)級(jí)指的是在硬盤(pán)上面查看的ROS源代碼的組織形式郭宝。

ROS中有無(wú)數(shù)的節(jié)點(diǎn)、消息掷漱、服務(wù)粘室、工具和庫(kù)文件,需要有效的結(jié)構(gòu)去管理這些代碼卜范。在ROS的文件系統(tǒng)級(jí)衔统,有以下幾個(gè)重要概念:包(package)、堆(stack)、

包 Package

ROS的軟件以包的方式組織起來(lái)缰冤。包包含節(jié)點(diǎn)犬缨、ROS依賴(lài)庫(kù)、數(shù)據(jù)套棉浸、配置文件怀薛、第三方軟件、或者任何其他邏輯構(gòu)成迷郑。包的目標(biāo)是提供一種易于使用的結(jié)構(gòu)以便于軟件的重復(fù)使用枝恋。總得來(lái)說(shuō)嗡害,ROS的包短小精干焚碌。

堆 Stack

堆是包的集合,它提供一個(gè)完整的功能霸妹,像“navigation stack”十电。Stack與版本號(hào)關(guān)聯(lián),同時(shí)也是如何發(fā)行ROS軟件方式的關(guān)鍵叹螟。

ROS是一種分布式處理框架鹃骂。這使可執(zhí)行文件能被單獨(dú)設(shè)計(jì),并且在運(yùn)行時(shí)松散耦合罢绽。這些過(guò)程可以封裝到包(Packages)和堆(Stacks)中畏线,以便于共享和分發(fā)。下圖是在包和堆在文件中的具體結(jié)構(gòu):

Manifests (manifest.xml):提供關(guān)于Package元數(shù)據(jù)良价,包括它的許可信息和Package之間依賴(lài)關(guān)系寝殴,以及語(yǔ)言特性信息像編譯旗幟(編譯優(yōu)化參數(shù))。

Stack manifests (stack.xml):提供關(guān)于Stack元數(shù)據(jù)明垢,包括它的許可信息和Stack之間依賴(lài)關(guān)系蚣常。

社區(qū)級(jí) Community level

ROS的社區(qū)級(jí)概念是ROS網(wǎng)絡(luò)上進(jìn)行代碼發(fā)布的一種表現(xiàn)形式。結(jié)構(gòu)如下圖所示:

代碼庫(kù)的聯(lián)合系統(tǒng)袖外。使得協(xié)作亦能被分發(fā)史隆。這種從文件系統(tǒng)級(jí)別到社區(qū)一級(jí)的設(shè)計(jì)讓獨(dú)立地發(fā)展和實(shí)施工作成為可能魂务。正是因?yàn)檫@種分布式的結(jié)構(gòu)曼验,似的ROS迅速發(fā)展,軟件倉(cāng)庫(kù)中包的數(shù)量指數(shù)級(jí)增加粘姜。

文件系統(tǒng)工具

代碼分布在許多ROS packages中鬓照,用命令行工具比如ls和cd去尋找起來(lái)非常的枯燥,這就是為什么提供ROS工具去幫助你的原因孤紧。

rospack

rospack可以看到許多packages的信息豺裆。這里我們以find選項(xiàng)為例,用來(lái)返回package的路徑。用法:

$ rospack find [package_name]

例子:

$ rospack find roscpp

返回:

/opt/ros/indigo/share/roscpp

roscd

roscd是rosbash套件的一部分臭猜,可以用來(lái)改變當(dāng)前工作目錄躺酒。

用法:

$ roscd [location_name[/subdir]]

例子:

$ roscd roscpp

可以用Unix命令打印絕對(duì)路徑:

$ pwd

可以看到:

/opt/ros/indigo/share/roscpp

注意:roscd和其它ros工具只會(huì)在ROS_PACKAGE_PATH中指定了的目錄中才能找到ROS packages,查看ROS_PACKAGE_PATH蔑歌,可以用命令:

$ echo $ROS_PACKAGE_PATH

ROS_PACKAGE_PATH中有許多用冒號(hào)分開(kāi)的路徑羹应,看起來(lái)像:

/home/ros/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks

roscd命令也可以進(jìn)入packages或者stack的子目錄

$ roscd roscpp/cmake

輸出:

/opt/ros/indigo/share/roscpp/cmake

roscd log

roscd log命令可以進(jìn)入ROS儲(chǔ)存log文件的文件夾。注意如果你至今還沒(méi)有運(yùn)行任何ros程序次屠,那么會(huì)出現(xiàn)錯(cuò)誤說(shuō)命令不存在园匹。

如果你之前已經(jīng)運(yùn)行過(guò)一些ros程序,可以運(yùn)行:

$ roscd log

rosls

rosls是rosbash套件的一部分劫灶,可以列出一個(gè)packages中的目錄裸违。

用法:

$ rosls [location_name[/subdir]]

例子:

$ rosls roscpp_tutorials

返回:

cmake  package.xml  srv

回顧

不難發(fā)現(xiàn)ros工具的名字都是在對(duì)應(yīng)的UNIX命令的前面加上一個(gè)ros:

  • rospack = ros + pack(age)
  • roscd = ros + cd
  • rosls = ros + ls

現(xiàn)在你可以在ROS中到天馬行空了,讓我們一起創(chuàng)建一個(gè)package吧本昏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末供汛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涌穆,更是在濱河造成了極大的恐慌紊馏,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒲犬,死亡現(xiàn)場(chǎng)離奇詭異朱监,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)原叮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)赫编,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人奋隶,你說(shuō)我怎么就攤上這事擂送。” “怎么了唯欣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵嘹吨,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我境氢,道長(zhǎng)蟀拷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任萍聊,我火速辦了婚禮问芬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寿桨。我一直安慰自己此衅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著挡鞍,像睡著了一般骑歹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墨微,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天陵刹,我揣著相機(jī)與錄音,去河邊找鬼欢嘿。 笑死衰琐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炼蹦。 我是一名探鬼主播羡宙,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掐隐!你這毒婦竟也來(lái)了狗热?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤虑省,失蹤者是張志新(化名)和其女友劉穎匿刮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體探颈,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡熟丸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伪节。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片光羞。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情榴嗅,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布潜慎,位于F島的核電站,受9級(jí)特大地震影響蓖康,放射性物質(zhì)發(fā)生泄漏铐炫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一钓瞭、第九天 我趴在偏房一處隱蔽的房頂上張望驳遵。 院中可真熱鬧淫奔,春花似錦山涡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)竞穷。三九已至,卻和暖如春鳞溉,著一層夾襖步出監(jiān)牢的瞬間瘾带,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工熟菲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留看政,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓抄罕,卻偏偏與公主長(zhǎng)得像允蚣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子呆贿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容