iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
Arm Platforms

ROS with Deep learning 開發與實戰系列 第 2

DAY 2 ROS介紹

前言

在過去還沒有 ROS 的年代,我們要去設計一款機器人是非常困難的,而這邊的機器人是一個統稱,並非只單針對人型、輪型、服務型等機器人。假設我們想要去設計一款機器人,我們需要完成以下這些項目,才能製造出我們要的機器人,那有哪些呢?

  • 機械結構
  • 電子電路
  • 通訊協定
  • 驅動程式
  • 組裝測試
  • 控制程式

可以看到這個工作量是十分巨大的,如果你是一位機器人工程師,你可能變成這樣


圖片來源(壹讀)

當你遇到在運作時突然發現某一個部分罷工了,你可能會直接發瘋,然而我們在設計的機器人其實跟古老時期的電腦一樣,沒有作業系統可以來協助我們,所以需要直接來控制硬體來進行除錯、寫程式等等作業,當出現作業系統後,我們只需要根據作業系統來提供驅動就好,ROS 便是沿著這條老路再進行的。

我們希望所有的硬體開發商,像是雷達、底盤、攝影機等等的硬體設備,都可以透過一個平台來讓我們直接調用就可以使用,不用每次都自己造輪子來讓我們的程式碼跑起來,逢甲某資訊系教授名言:自己造輪子是浪費時間的事情。所以我們如果有現成的可以幫助你減少寫程式時間的工具,為何不用呢? 而 ROS 的出現便是幫助我們達成這件事情。

歷史

說了這麼多,那到底什麼是 ROS , 我們先從他的歷史說起,在2000多年時,由 Leland Stanford Junior University 的一個人工智慧實驗室 STAIR(Stanford Artificial Intelligence Robot),開發了一套機器人軟體系統框架,接下來在 2007 年時, ROS 項目正式啟動,由 Willow Garage 與 STAIR 共同合作來開發 ROS ,而 Willow Garage 這個組織以開發出 PR2 和 TutleBot 2 等 機器人而聞名,在 2010 年時發布了 ROS 1.0,由此開始便陸續新增了許多的版本,再發展的過程也有無數的研發人員將他們的研究貢獻到 ROS 項目中,這也是 ROS 到現在仍然是維持著 BSD 協議的原因,在 2013年後 ROS 改由開源基金會 Open Source Robotics Foundation(OSRF)繼續維護

下面這張圖就是從以前到現在的所有版本,你可以發現他每一代的都是以烏龜來進行繪製,而每一個版本都有一個官方推薦的作業系統版本,所以你可以根據你的作業系統來進行安裝。這邊要注意的是 ROS 是有分成短期支援跟長期支援板,這邊建議都使用長期支援板,會比較保險。在 2018 年時,ROS 正式進入 2.0 的時代。

ROS版本 發布時間
Noetic Ninjemys 2020.5
Melodic Morenia 2018.5
Lunar Loggerhead 2017.5
Kinetic Kame 2016.5
Jade Turtle 2015.5
Indigo lgloo 2014.7
Hydro Medusa 2013.9
Groovy Galapagos 2012.12
Fuerte Turtle 2012.4
Electric Emys 2011.8
Diamondback 2011.3
C Turtle 2010.8
Box TurtleBox Turtle 2010.3

介紹

講道這邊我們開始來說 ROS 是什麼,大家不要以為他名稱中有作業系統這幾個字,就認為他是一個作業系統,但其實並不是這樣的,其實呢他只是最為我們程式碼跟系統的中間溝通層,只不過它提供了一些類似作業系統的功能,我們才將他稱作作業系統,那他提供了哪一些功能呢?

  • 硬體抽象
  • 底層設備控制
  • 常用涵式的調用
  • 程序(進程)間的消息傳遞
  • 與套件管理

而在 ROS 官方所提到的 ROS 是由以下四點組合而成

框架

我們有時候只 ROS ,有時後指的只有通訊框架這一個部分,而框架指的是說,有人去訂定了一個既有的規範,我們只需要跟著規則走就好,而 ROS 定訂了一個分布式的架構,可以同時執行多個程序,而每一個程序又可以單獨的去設計,然後放在一起去把他們給組合起來。

而在 ROS 中我們不會以程序來進行命名,而是以 Node 節點來進行使用。

以上面這張圖為例,robot 是一個 node , laser 是一個 node , map 也是一個 node,以此類推,而 ROS 便是提供了一個框架(可以讓他們互相溝通的橋樑)來管理這些 Node。

那為甚麼要這樣做呢? 假設我今天要去更換我的 laser , 我只需要把 laser 這個 node 替換掉就好,不用去動到其他的部分,該給的 api 就是那些,甚至不用去改通訊協定,我發送跟舊版的 laser 相同 type 的訊息過去就好,這點在開發上是非常好用的。

套件(工具)

在工具的部分 ROS 有許多種開源工具,可以用來做一些模擬、數據可視化、圖形介面、數據紀錄等等

  • Gazeboo

  • RVIZ

功能

ROS 也提供了許多的功能,像是 控制、規劃、視覺、建圖等等,假設我們現在想要開發一台會做人臉辨識,然後看到人會跟著你走的行李箱,我們只需寫一下人臉辨識的部分,行走、路徑規劃等等的 ROS 都有基本的涵式庫可以直接調用,這可以加速我們寫程式的速度,而且只需撰寫我們擅長的部份就好。

社區

那我們去哪邊找這些套件呢? 一個方法是去官網的 wiki ,上面有各式各樣的內容和教程,第二個是 GITHUB,上面都有教學、文檔來供我們查看。

總結

介紹的部分先到這邊告一段落,最後給大家看一下 ROS 10 周年所拍的紀念影片,明天開始來進行 ROS 安裝!!

#Arm Arm Platforms


上一篇
DAY 1 系列文章啟文
下一篇
Day 3 ROS 安裝
系列文
ROS with Deep learning 開發與實戰11

尚未有邦友留言

立即登入留言