文章類型
文章類型

【Tutorial】一起走進 ROS 的世界吧(4) — 視覺辨識篇

作者:Sco Lin

經過前幾篇寫的 ROS 心得文,相信大伙兒都很懂為什麼 Simple Care 要挑 ROS 繼續玩下去了吧!這一篇主要在寫 ROS 上的 2D 影像進行視覺辨識,這方面可能連網紅都比小弟還清楚要怎麼玩。先看看下圖的那個白框:

(圖片來源:Sco提供)

如果加上 Machine Learning,就會在框邊出現影像辨識後物體的資訊或名稱;若是在 ROS 上,就能用一般的 WEBCAM+OpenCV 完成這個有趣的實驗。但我們這篇就不實驗,因為在ROS by Example 的第十章已經寫的很清楚了(ROS by Example 這本書超讚的,提供的是 PDF 檔)。

不過這本書有些 example code 已經失效了,ROS 近幾年來有些變化,所以您如果看到這篇文章後打算明年再研究,也許 code 不會動,但會需要做一些修改;也有可能我們之後玩到 ROS 2.0,但您得為了先前的 code 解一大堆坑,所以還是趕快跟上吧!

ROS 視覺判斷需搭配 3D 感測器

我想做一台 ROS 小車,要用來做跌倒判斷或是特別的視覺判斷,其所需的是 3D 感測器,例如 ROS by Example 的 10.9 節寫的 OpenNI and Skeleton Tracking,這用一般的 2D 感測器(WEBCAM)是做不到的。

如果我們用 2D 人臉辨識,於門禁辨識率達到 90% 以上,那就代表著麻煩大條了!因為我拿您帥帥/美美的照片到您家門口機辨識就能自由進出。然而,3D 感測器就解決了這個問題,它除了有 RGB 的影像資訊外,還多加了一個 D,也就是深度感測,這樣一來,我拿著您的照片到您家門口機辨識,它就不會願意開門讓我進去了。

這也是為什麼目前機器人都用 3D 感測器,連 Amazon 也用這個來做倉庫管理機器人,當然大家熟知的Apple Face ID 大伙早就玩到翻掉了,中國的 3D POS 機讓支付寶刷臉,就是靠 3D 感測器。現今 3D 感測器有三種主流方案:結構光、ToF 與雙目,但這篇主要在講怎麼玩。

很不巧地,我手上沒有 3D 感測器,但很想要用 Intel Realsense、Microsoft Kinect 或 Asus Xtion,之後在 Simple Care 版上求救後,由 MakerPRO 歐大那收到一個 Realsense,但是這個 Realsense 要有 3.0 才能用,而且插上 3.0 的 PORT 之後,在 VMWARE 有時還會斷線。我爬文之後才發現,原來手上這顆 RealSense R200 耗電流較大,需要用一個外掛電源的 USB 3.0 集線器才行。

3D 感測器大冒險

由於這篇是在 PC 上 VMWARE 操作,所以 Windows 一定要抓的到 USB 3.0,如下圖所示:

再來 VMWARE 的 USB Controller 一定要選 USB 3.0,如下圖所示:

然後進 入 /catkin_ws/src 下載 realsense 在 github 的source code:

cd ~/catkin_ws/src

git clone https://github.com/intel-ros/realsense.git

回到 /catkin_ws 資料夾

catkin_make

再來就是:

  1. Terminal -> roscore
  2. Terminal -> roslaunch realsense_camera r200_nodelet_default.launch
  3. Terminal -> rviz

在 rviz 的 Fixed Frame 記得要選 camera depth fram,pointcloud2(下圖綠圈)的圖才會出現,而image(下圖紅圈)的圖,小弟是選 depth/raw 的圖。

好了,RealSense R200 就這樣 RUN 起來了,再來是寫 code,如果沒有任何 idea,可以參考 CH 大寫的文章,用在 ROS 上,其實就是把寫好的 code 當作一個 node 去呼叫它,然後 roslaunch 就可以了。

順便跟大家說一下,目前 Farmbot Taiwan User Group 也如火如荼的在學習 ROS 呢!而且伙伴超多,到底是誰說台灣找不到研發人員的啊?快來社群挖人才啊!倒是 Simple Care 還沒找到人一起玩 ROS 就是了,看來小弟挑了一個爹不疼娘不愛的智能照護主題。

知道 Code 的方向後,仔細想想之後的篇章,要開始實作卻覺得哪裡怪怪的,因為小弟的主板想用 Raspberry Pi 3,但是它沒有傳說中的 USB 3.0!那這樣要怎麼用 Intel RealSense R200 呢?難怪 TurtleBot3 的 waffle 使用 R200 的主板會是 Intel 的 Joule,因為 Joule 是 USB 3.0 的。

山不轉路轉,由於樹莓派在台灣有很大的社群,如果小弟使用 Joule,Simple Care 這個爹不疼娘不愛的主題很快地就會在硬體上踩到坑摔一跤宣告專案失敗,所以我們主板還是選 Raspberry Pi 3,然後改用一個 USB 2.0 的 3D Camera。

由於 ROS 心得文明年才會有實戰篇,我們先回到 Simple Care 做的室內定位再回來 ROS 幫這篇做個結尾,其實 Simple Care 社群也沒有這麼爹不疼娘不愛,反而受到很多低調的大大們幫助,請看這篇長照開源工作坊,集結眾人合力 Debug

當時我們是使用多點定位演算法,後來改為 Machine Learning 的暴力演算法,請看這篇運用 KNN 演算法進行室內定位(Part 1)運用 KNN 演算法進行室內定位 Part 2,後來臺師大數位人文學研究室甚至直接把 Code 做了改良,如下圖所示:

紅點為「真實值」,藍點為「訊號預測值」,目前正確率為 85%,請見影片

如果您有認真看 KNN 演算法的文章,文言文的文章小弟一個月後回去看也看不懂,這點讓我相當佩服臺師大數位人文學研究室的神人,假設您完全了解 KNN 其實是需要時間 Training model 的,格子切的愈細愈精準,所以不用再問 BLE 可以做到多準!臺師大的神人目前是切到 1 公尺。

要切到 1 公分也行,那就是每 1 公分取個 200 筆資料 Training 一次 model,而且 BLE 的好處在於 BLE 的 ID 每一個都是獨一無二的,所以肯定能知道目前這個人是誰。但如果是人去 Training,假設一次 2 分鐘,400 個點,就要 800 分鐘,再健康的身體,13 個小時的 Training 也會累壞!

這個時候前面說的 SLAM 就派上用場了,也就是我們系列文的五篇文章所討論包山包海的 ROS 出場,做個小車讓它自己跑,我們坐著喝茶看報就行了!

(本篇文章轉載自南科AI_ROBOT自造基地原文連結;責任編輯:葉于甄)

Ches拔(Sco Lin)

Ches拔(Sco Lin)

兩個男孩的爸爸、下班變身孩子王、衝浪閱讀與coding、PM擔當RD魂。
Ches拔(Sco Lin)

上一篇: | 下一篇:

468 ad

1 Comment

  1. LIPS(www.lips-hci.com)的深度攝影機也有支援ROS!

    Post a Reply

我想回應

你的電子郵件位址並不會被公開。 必要欄位標記為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料

成城共創股份有限公司版權所有、轉載必究.Copyright(c) 2017 MakerPRO