ROS-Industrial Overview

這裏寫這個ROS-Industrial Overview的目的是對前面文章中一直說的ROS-Industrial進行一下補充說明,同時明確之後的工作路線,在這裏寫下我做這些的目的:記錄將ABB Yumi機器人和ROS聯合在一起,然後進行與智能相關的物理實驗。一是用來鞭策自己,二是明確之後的方向。

目錄


ROS-Industrial高層架構

首先看一下在官方網站上提供的ROS-Industrial High Level Architecture
ROS-Industrial High Level Architecture
在以上架構圖中,我是以從下到上,從左到右的順序對每一功能色塊進行了序號標識,方便接下來的闡述。先總體說一個ROS-I,ROS-Industrial是一個在BSD (legacy) / Apache 2.0 (preferred)許可下的程序項目,它包括了用於工業硬件的庫、工具和驅動程序。 ROS-Industrial的目標列舉如下:

  • Create a community supported by industrial robotics researchers and professionals
  • Provide a one-stop location for industry-related ROS applications
  • Develop robust and reliable software that meets the needs of industrial applications
  • Combine the relative strengths of ROS with existing industrial technologies (i.e. combining ROS high-level functionality with the low-level reliability and safety of industrial robot controllers)
  • Create standard interfaces to stimulate“hardware-agnostic”software development (using standardized ROS messages)
  • Provide an easy path to apply cutting-edge research in industrial applications, using a common ROS architecture
  • Provide simple, easy-to-use, well-documented APIs

架構理解

對於ROS-I架構的理解是仁者見仁,智者見智,這裏只是表述一下自己的看法,對於這張架構圖我是從下往上看的,因爲我要弄明白底層是如何實現的,根據目的不同,看的角度也不一樣,如果是做應用設計,那隻關注上層就可以。在前面的文章中一直在研究ABB的ROS Server是如何寫的,也用了四篇文章的篇幅搞清楚了每一行代碼的功能與意義。那前面的四篇文章就是對應着最底的一層:ROS-I Controller Layer層,而我們具體到了ABB的,所以也就是相當於vendor specific的部分。

① ROS-I Controller Layer:這一層是控制器層,作爲整個框架的最底層,這一層是在具體的機器人控制器上編寫指令,從之前的文章來看,就是在對應的機器人控制器上寫一個Server,讓ROS傳送來的數據可以在機器人控制器本地進行解析,然後調用機器人本身的控制接口進行機器人的具體控制。比如我們自己寫的機器人控制器,用C++寫的最底層函數支持驅動器的電流讀取,同時也可以指定指令處理週期,直線圓弧插補、運動速度調整等,甚至可以直接編寫好一個演示作業,你對外要做的就是當有指令進入控制器,你要對其進行解析,且解析之後可以調用對應的函數,讓機器人進行相應的動作。簡而言之,這一層的作用就是在機器人已有的動作函數與上層,例如ROS,傳輸的指令之間搭建一個橋樑。

② ROS-I Simple Message Layer:這一層從其名字中也可以看出一二,是對信息傳輸格式進行規範,所以這一層的作用就是在底層和其上的層次之間加入一條規範的通道,所以向上傳送和向下傳送的數據必須按照這條通道規範的格式進行傳送,不然就報錯。所以,簡單的理解,就是ROS與機器人控制器中的服務器進行通信的協議,就如同我們常見的TCP/IP協議,小型飛行器上用的MAVLINK協議等,規定了數據的每一部分代表了什麼意義,同時也通過其中某部分的不同,對進一步的數據解析行爲進行了指定。

③ ROS-I Interface Layer:這一層提供了數據傳輸的接口,就如同我們在前面四篇文章中分析ROS Server的Socket函數及其附屬或是擴展的函數那樣,這一層指明瞭ROS的數據如何壓縮到對應的數據結構中,並且如何一步步的將指令與數據通過這一層的接口,按照協議規定的格式,發送到底層控制器層。從其中的流程框架中,我們可以大體上分析出機器人的軌跡動作序列數據,要在這一層進行數據封裝,流程經過Simple Message層,就表明封裝的格式要按照Simple Message Layer的格式規範,最後將數據傳送到機器人控制器,而機器人控制器的反饋數據則通過相同的過程與相反的流程反饋到的ROS。所以對機器人的實際控制指令與數據就在①②③這三層之間流轉。

④ ROS-I Configuration:這一層是機器人及機器人控制器相關的配置信息,比如裏面寫的URDF,用於在Gazebo或是RVIZ中進行機器人的建模,parameters等指定機器人的相關參數,控制器的IP地址,各種可能用到的或用不到的信號量等等,諸如此類的信息或是函數。ROS-I Conventions可以理解爲機器人或控制器在工業上的一些需要的傳統的參數等。

⑤ ROS Layer:這一層就是完全是ROS的內容,任何在ROS生態中的都可以,不多解釋。

⑥ MoveIt Layer:這一層這裏先不說,以後會涉及到。

⑦ ROS-I Application Layer:這一層是針對工業應用的應用層,未來可能會包括工業的工藝規劃,狀態機等功能,不過狀態機的功能ROS已經有對應的Package進行支持。

⑧ ROS GUI 與 ⑨ ROS-I GUI:對應一些界面上的東西,平時不怎麼寫界面,通用純代碼做的基本上是用代碼,需要交互的時候纔去寫個界面,就不多說了。

路線

從上面的分析中,已經可以比較清楚的知道接一來的一步要進行如何進行,在前面的工作中我們從ABB的RAPID代碼入手,進行了底層ROS Server的理解與分析,在整個架構中相當於完成了最底一層的理解,接下來要完成搞清楚如何將機器人與ROS完美的接合到一起,我們還需要對ROS-I Simple Message Layer,實際上就是simple_message這個package進行深入的理解,這一步之後則需要繼續弄明白industrial_robot_client這個package如何工作,在完成這兩步的前提下,基本上對於整個系統的搭建與融合就完成了,之後的其它應用會隨着研究的深入,逐漸使用到。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章