2017年11月1日 星期三

Opensource licences 簡單比較



目前使用opensource開發,商用都會遇到是否要開放原始碼的問題導致在選擇opensource license時都要特別小心. 現在主流的license主要是MIT/BSD/Apache/LGPL/GPL, 以下將會針對這五種進行簡單的比較

介紹的部分可以參考wikipedia的說明:
Apache : https://zh.wikipedia.org/wiki/Apache%E8%AE%B8%E5%8F%AF%E8%AF%81
BSDhttps://zh.wikipedia.org/wiki/BSD
GPLhttps://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81
LGPLhttps://zh.wikipedia.org/wiki/GNU%E5%AE%BD%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%E8%AE%B8%E5%8F%AF%E8%AF%81
MIThttps://www.google.com.tw/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjRpv3g657XAhXBjLwKHZSlA-UQFgglMAA&url=https%3A%2F%2Fzh.wikipedia.org%2Fzh-tw%2FMIT%25E8%25A8%25B1%25E5%258F%25AF%25E8%25AD%2589&usg=AOvVaw14b0TXC_VYEFDJVFusGH20

擷取重點來說,
GPL是只要有使用到就必須開放原始碼, 具有感染性,
LGPL則是只要不針對LGPL保護的部分進行修改就可以使用在商業用途, 例如引用library但針對自己的需求修改library後重新編譯使用,個人的內容也必需要開放原始碼.
BSD需要在文件內附上引用的license說明, binary檔需另附說明檔案, 不可使用創作人的名稱或機構當做產品名稱
Apache需要在文檔內附上license說明, binary檔需另付說明文件
MIT需附上license說明,binary需另付說明文件, 原創作者有權利修改原創作的內容

以採用的優先選擇傾向  BSD=Apache>MIT>LGPL>GPL

2017年9月4日 星期一

ROS 概論 (Robotic Operating System)




        ROS(Robotic Operating System)是近年來成長相當快速的開放式操作系統,屬於BSD授權的範圍, 在日本與美國等地有相當多所大學根據ROS來進行機器人或機械手臂的開發。ROS發展的概念是基於"站在巨人的肩膀"為基準點出發, 意思是當我需要開發一種機械手臂特定的應用, 為何要從馬達控制開始寫起。 相對的, 只要提供一種介面,能夠介接所有現有的已完成的功能, 用戶就只需要專注在自己所想要完成的功能上, 進而大幅縮短時間並完成目標。

        所以ROS所提供的,是一種元件與元件溝通的通訊協定, 透過底層DDS所提供的即時資料交換的方式達成一對多元件間的溝通。 如下面的圖所示, 一般的用戶只要透過ROS所提供的library來呼叫特定的API進行資料傳輸, 不需要額外費心傳輸方式便能讓其他也透過ROS來介接的元件收取到特定Topic所提供的資料。
「ROS DDS」的圖片搜尋結果

        提個題外話,根據Open Source Robotics Foundation 所提供的資料(OSRF是ROS主要的開發者與維護者), 如果依照IP位址來判斷一個國家發展ROS的程度的話, 美國及中國分別是一二名,台灣則排名第七,還勝過韓國。甚麼,我有看錯嗎?台灣在機器人開發上還贏過韓國,怎麼沒有感覺?根據合理猜測因為中國有網路限制的關係連線到OSPF需要做跳板的動作,所以這些所謂的台灣開發程度很有可能是中國那邊的開發程度某部分灌水而來XD

        日後會再根據ROS自己使用或摸索的經驗不定期update一些資料...

DDS 概論 (Data Distribution Services)




DDS (Data Distribution Services)資料分散式系統, 是由OMG組織定義的"機器對機器"通訊標準, 目標希望能透過可擴充性, 及時, 高效率與資料交換而設計的Publish/Subscribe(發佈/訂閱)的協定。主要用於金融交易,航空控制,智慧電網,大數據與IOT的應用層面。

        所謂的Publish/Subscribe(Pub/Sub)架構是 發佈者 並不特定將資料發送給特定的用戶, 而是透過將發布的訊息設定不同的Topic(話題)發送出去, 而Sub可以根據感興趣的Topic來接受一個或多個有訂閱的Topic。相對於傳統的收送網路而言, Pub不需要等待特定的用戶回應, 也不必等到接收對象擁有網路連線的能力才發送, 更不用管網路上接收的用戶是否過多的問題。

DDS協定描述了兩種層級的介面
  1. "低資料集中的發佈定閱系統層"(lower Data-Centric Publish-Subscribe  a.k.a DCPS),目標是有效率的傳送適當資料到適當的用戶端
  2. 非強迫的"高資料本地再建構層"(high Data Local Reconstruction Layer, a.k.a DLRL), 提供應用層能夠簡單的整合DDS功能

        日後會再不定期提供相關的知識或經驗 :)