必威电竞|足球世界杯竞猜平台

機器人操作系統
來源:互聯網

機器人操作系統(ROS,Robot Operating System),是一個開源的機器人軟件平臺,專為機器人軟件開發設計。ROS是一個元級操作系統(后操作系統),提供類似于操作系統的服務,如硬件抽象、底層驅動程序管理、共用功能執行、程序間消息傳遞和程序發行包管理。此外,ROS還提供一些工具和庫,用于獲取、建立、編寫和執行多機融合的程序。

ROS的運行架構是一種使用ROS通信模塊實現模塊間P2P的松耦合的網絡連接的處理架構,它執行若干種類型的通訊,包括基于服務的同步RPC通訊和基于Topic的異步數據流通訊,以及參數服務器上的數據存儲。盡管實時性在機器人控制中具有重要意義,但ROS并非實時操作系統(RTOS)。然而,通過與實時計算代碼的整合,ROS 2成為了一個主要的ROS API修訂版,利用現代的庫和技術實現核心ROS函數,并添加支持實時代碼和嵌入式系統硬件的支持。

在ROS生態系統中,軟件可以分為三類:語言-independent工具、主要客戶端庫(C++PythonLISP),這些工具和庫均受BSD協議約束,因此是開源軟件,可用于商業和科研使用。其他大部分軟件則采用各種開源許可。這些其他軟件包 implements commonly used functionality and applications,如硬件驅動、機器人模型、數據類型、規劃、感知、SLAM、仿真工具和其他算法。

主要ROS客戶端庫依賴大量開源軟件,因此主要面向Unix-like系統。由于這些客戶端庫依賴大量開源軟件,Ubuntu Linux被標記為“支持”,而其他版本(如Fedora Linux、Mac OS和Microsoft Windows)則是“實驗性”,由社區提供支持。然而,原生JavaROS客戶端庫rosjava并未受到這些限制,使ROS-based軟件得以在Android OS上編寫。rosjava還使ROS得以與 officially supported MATLAB工具箱整合,該工具箱可在Linux、macOS和Microsoft Windows上使用。

簡介

ROS的運行架構是一種使用ROS通信模塊實現模塊間P2P的松耦合的網絡連接的處理架構,它執行若干種類型的通訊,包括:

產品功能

Turing OS是一款人工智能級機器人操作系統,集成人機對話、視覺識別及運動控制等人工智能核心技術,強技術、穩服務、周期短、成本低,幫合作伙伴更快開發出屬于自己的實體機器人與智能應用。

Turing OS具有的多模態交互能力,讓人機交互更流暢多元,能綜合處理文字、語音、視覺、觸覺等多維度信息,精確解析用戶意圖,做出擬人化響應。

圖靈機器人 OS具有多種AI能力,包括身高檢測、人臉檢測、人臉識別、人臉跟蹤、聲音情緒識別、顏色識別、特征識別和在線物體識別等,助力合作伙伴開發出更豐富、體驗更好的智能機器人。

基于Turing OS 1.5版本,開發了機器人應用服務,涵蓋遠程、游戲、教育、工具、社交等諸多領域,當前應用總數達30余種。

發展經歷

2015年11月6日,人工智慧創業團隊圖靈機器人對外發布了人工智能機器人操作系統Turing OS。

2016年7月28日,在首屆圖靈機器人創新大會上再次推出人工智能機器人操作系統Turing OS 1.5。

圖靈機器人CEO俞志晨宣布:為了支撐機器人應用創新,TuringOS已從原1.0版本升級至1.5版本,視覺能力、運動控制及硬件模塊得到增強。

發展目標

ROS的首要設計目標是在機器人研發領域提高代碼復用率。ROS是一種分布式處理框架(又名Nodes)。這使可執行文件能被單獨設計,并且在運行時松散耦合。這些過程可以封裝到數據包(Packages)和堆棧(Stacks)中,以便于共享和分發。ROS還支持代碼庫的聯合系統,使得協作亦能被分發。這種從文件系統級別到社區一級的設計讓獨立地決定發展和實施工作成為可能。上述所有功能都能由ROS的基礎工具實現。

為了實現“共享與協作”這一首要目標,人們制訂了ROS架構中的其他支援性目標:

行業展望

隨著機器人產業鏈的深入發展,越來越多的科技巨頭認同“機器人產業發展將遵循PC發展軌跡”這一觀點,而在PC普及及標準化的過程中,體驗良好、操作簡單的操作系統的出現扮演了重要角色。

從該方面來看,TuringOS的發布對推動機器人產業發展及普及而言意義重大,或許,這只是圖靈機器人實現“智能機器人走進每個家庭”的第一步。

ROS

ROS 的 Filesystem Level

文件系統層概念就是你在碟片里面遇到的資源,例如:

ROS 的 Computation Graph Level

Computation Graph Level(計算圖)就是用ROS的P2P(peer-to-peer網絡傳輸協議)網絡集中處理所有的數據。基本的Computation Graph的概念包括Node,Master,Parameter Server,messages,services,topics,和bags,以上所有的這些都以不同的方式給Graph傳輸數據。

Nodes: Nodes(節點)是一系列運行中的程序。ROS被設計成在一定顆粒度下的模塊化系統。一個機器人控制系統通常包含許多Nodes。比如一個Node控制激光雷達,一個Node控制車輪馬達,一個Node處理定位,一個Node執行路徑規劃,另外一個提供圖形化界面等等。一個ROS節點是由Libraries ROS client library寫成的,例如 roscpp和rospy。

Master: ROS Master 提供了登記列表和對其他計算圖的查找。沒有Master,節點將無法找到其他節點,交換消息或調用服務。

Server Parameter Server: 參數服務器使數據按照鑰匙的方式存儲。參數服務器是主持的組成部分。

Messages:節點之間通過messages來傳遞消息。一個message是一個簡單的數據結構,包含一些歸類定義的區。支持標準的原始數據類型(整數、浮點數、布爾數,等)和原始數組類型。message可以包含任意的嵌套結構和數組(很類似于c語言的結構structs)

Topics: Messages以一種發布/訂閱的方式傳遞。一個node.js可以在一個給定的topic中發布消息。Topic是一個人名被用于描述消息內容。一個node針對某個topic關注與訂閱特定類型的數據。可能同時有多個node發布或者訂閱同一個topic的消息;也可能有一個node同時發布或訂閱多個topic。總體上,發布者和訂閱者不了解彼此的存在。主要的概念在于將信息的發布者和需求者解耦、分離。邏輯上,topic可以看作是一個嚴格規范化的消息總線。每個bus有一個名字,每個node都可以連接到bus發送和接受符合標準類型的消息。

Services:發布/訂閱模型是很靈活的通訊模式,但是多對多,單向傳輸對于分布式系統中經常需要的“請求/回應”式的交互來說并不合適。因此,“請求/回應”是通過services來實現的。這種通訊的定義是一種成對的消息:一個用于請求,一個用于回應。假設一個節點提供了一個服務提供下一個name和客戶使用服務發送請求消息并等待答復。ROS的客戶庫通常以一種遠程調用的方式提供這樣的交互。

Bags: Bags是一種格式,用于存儲和播放ROS消息。對于儲存數據來說Bags是一種很重要的機制。例如傳感器數據很難收集但卻是開發與測試中必須的。

在ROS的計算圖中,ROS的Master以一個人名 service的方式工作。它給ROS的節點存儲了topics和service的注冊信息。Nodes 與Master通信從而報告它們的注冊信息。當這些節點與master通信的時候,它們可以接收關于其他已注冊節點的信息并且建立與其它已注冊節點之間的聯系。當這些注冊信息改變時Master也會回饋這些節點,同時允許節點動態創建與新節點之間的連接。

節點之間的連接是直接的; Master僅僅提供了查詢信息,就像一個DNS服務器。節點訂閱一個topic將會要求建立一個與發布該topics的節點的連接,并且將會在同意連接協議的基礎上建立該連接。ROS里面使用最廣的連接協議是TCPROS,這個協議使用標準的TCP/IP 接口。

這樣的架構允許解耦操作(decoupled operation),通過這種方式大型或是更為復雜的系統得以建立,其中names方式是一種行之有效的手段。names方式在ROS系統中扮演極為重要的角色: topics,services,and parameters 都有各自的names。每一個ROS客戶端庫都支持重命名,這等同于,每一個編譯成功的程序能夠以另一種形式【名字】運行。

例如,為了控制一個北陽激光測距儀(Hokuyo laser range-finder),我們可以啟動這個hokuyo_node 驅動,這個驅動可以給與激光儀進行對話并且在"掃描"topic下可以發布sensor_msgs/LaserScan 的信息。為了處理數據,我們也許會寫一個使用laser_filters的node來訂閱"掃描"topic的信息。訂閱之后,我們的過濾器將會自動開始接收激光儀的信息。注意兩邊是如何脫鉤工作的。所有的hokuyo_node的節點都會完成發布"掃描",不需要知道是否有節點被訂閱了。所有的過濾器都會完成"掃描"的訂閱,不論知道還是不知道是否有節點在發布"掃描"。在不引發任何錯誤的情況下,這兩個nodes可以任何的順序啟動,終止,或者重啟。

以后我們也許會給我們的機器人加入另外一個激光器,這會導致我們重新設置我們的系統。我們所需要做的就是重新映射已經使用過的names。當我們開始我們的第一個hokuyo_node時,我們可以說它用base_scan代替了映射掃描,并且和我們的過濾器節點做相同的事。這些節點將會用Base_scan的topic來通信從而代替,并且將不再監聽"掃描"topic的信息。然后我們就可以為我們的新激光測距儀啟動另外一個hokuyo_node。

參考資料 >

生活家百科家居網