ROS是機(jī)器人操作系統(tǒng)(Robot Operating System)的簡(jiǎn)稱,用于編寫機(jī)器人的軟件程序。
ROS是一種具有高度靈活性的軟件架構(gòu),能夠幫助軟件開發(fā)者快速創(chuàng)建機(jī)器人應(yīng)用軟件。
ROS提供了一系列程序庫(kù)和工具,包括:硬件抽象、設(shè)備驅(qū)動(dòng)、庫(kù)函數(shù)、可視化、進(jìn)程間消息傳遞和軟件包管理等。
ROS是一個(gè)分布式的進(jìn)程(也就是“節(jié)點(diǎn)”)框架,這些進(jìn)程被封裝在不同的程序包或功能包中。
ROS可以分成兩層:底層是操作系統(tǒng)層(通常不需要用戶關(guān)心),上層則是實(shí)現(xiàn)不同功能的軟件包,如感知、定位、規(guī)劃、控制等。
了解了ROS的目錄文件結(jié)構(gòu)之后:ROS的目錄文件結(jié)構(gòu)
本文主要介紹幾個(gè)ROS的重要概念:節(jié)點(diǎn)(node)、消息(message)、主題(topic)、服務(wù)(service),ROS控制器(ROS master),幫助初學(xué)者快速了解ROS。
1、節(jié)點(diǎn)(node)
節(jié)點(diǎn)是進(jìn)行運(yùn)算任務(wù)的進(jìn)程。一個(gè)系統(tǒng)可以由很多節(jié)點(diǎn)組成,節(jié)點(diǎn)也可以稱為軟件模塊。
ROS是以節(jié)點(diǎn)的形式開發(fā)的,節(jié)點(diǎn)是根據(jù)其目的,可以細(xì)分的可執(zhí)行程序的最小單位。
節(jié)點(diǎn)使基于ROS的系統(tǒng)在運(yùn)行時(shí)更加形象化,當(dāng)許多節(jié)點(diǎn)同時(shí)進(jìn)行時(shí),可以將不同節(jié)點(diǎn)的通訊繪制成下圖。

2、消息(message)
節(jié)點(diǎn)之間通過傳送消息進(jìn)行通訊。每一個(gè)消息都是一種數(shù)據(jù)結(jié)構(gòu)。
ROS的消息支持標(biāo)準(zhǔn)的數(shù)據(jù)類型(整型、浮點(diǎn)型、布爾型等),還包括數(shù)組、結(jié)構(gòu)體、自定義的數(shù)據(jù)類型等等。
3、主題(topic)
消息以一種 發(fā)布/訂閱 的方式傳遞,一個(gè)或多個(gè)節(jié)點(diǎn)可以在一個(gè)給定的主題中發(fā)布消息,多個(gè)節(jié)點(diǎn)可以訂閱同一個(gè)主題。

發(fā)布者和訂閱者不了解彼此的存在。
4、服務(wù)(service)
基于主題 發(fā)布/訂閱 的通信方法是一種異步方法,該 發(fā)布/訂閱 模型是一種很靈活的通訊模式。但在某些情況下,需要一種同時(shí)使用請(qǐng)求和響應(yīng)的同步消息交換方案,ROS提供了叫做服務(wù)的消息同步方法,是一種一對(duì)一的機(jī)制。
一個(gè)服務(wù)被分成服務(wù)服務(wù)器和服務(wù)客戶端,其中服務(wù)服務(wù)器只在有請(qǐng)求(request)的時(shí)候才響應(yīng)(response),而服務(wù)客戶端會(huì)在發(fā)送請(qǐng)求后接收響應(yīng)。與話題不同,服務(wù)是一次性消息通信。
因此,當(dāng)服務(wù)的請(qǐng)求和響應(yīng)完成時(shí),兩個(gè)連接的節(jié)點(diǎn)將被斷開。
服務(wù)通常被用作請(qǐng)求機(jī)器人執(zhí)行特定操作時(shí)使用的命令,或者用于根據(jù)特定條件需要產(chǎn)生事件的節(jié)點(diǎn)。
由于它是一次性的通信方式,在網(wǎng)絡(luò)上的負(fù)載很小,所以它也被用作代替 基于主題 發(fā)布/訂閱 的通信手段。
5、ROS控制器(ROS master)
在上面概念的基礎(chǔ)上,需要有一個(gè)控制器,可以使所有節(jié)點(diǎn)有條不紊地執(zhí)行,這就是ROS的控制器(ROS master)。
ROS master 通過RPC(Remote Procedure Call Protocol,遠(yuǎn)程過程調(diào)用)提供登記列表和對(duì)其他節(jié)點(diǎn)/主題的查找。

總結(jié)為一句話就是:ROS中最小的進(jìn)程單元就是節(jié)點(diǎn)(node),節(jié)點(diǎn)之間通過主題(topic)傳遞消息數(shù)據(jù)(message)。

消息記錄包(bag)是一種用于保存和回放ROS消息數(shù)據(jù)的文件格式。
ROS提供了可以將bag文件可視化的圖形工具,詳見:ROS bag的繪圖工具:rqt_bag和PlotJuggler