天天看點

ROS機器人程式設計(原書第2版)3.8 圖像可視化

<b>3.8 圖像可視化</b>

在ros系統中,我們可以建立一個節點,在節點中展示來自即插即用攝像頭的圖像。這是一個複雜資料主題的例子,這些資料可以使用特殊工具更好地可視化或分析。你隻需要一個攝像頭來完成這些,例如你筆記本上的webcam。在example8節點中,通過調用opencv庫實作一段基本的攝像頭捕捉程式,然後在ros中将采集到的cv::mat圖像轉換到ros圖像,這樣就可以在主題中釋出了。這個節點會在/camera主題裡釋出圖像幀。

我們僅會使用launch檔案運作節點并進行圖像捕捉和釋出工作。節點中的代碼對于讀者來說可能很陌生,但是在下面的章節中,我們将會介紹如何在ros中使用攝像頭和圖像,到時候再回來看這些代碼,你就會完全了解節點的工作原理和每行代碼的含義:

一旦節點運作起來,我們就能夠列出主題清單(rostopic list),并檢視是否包含/camera 主題。檢視是否正确捕捉到圖像有一個簡單直接的方法,使用rostopic hz /camera語句檢視在主題中收到的圖像更新頻率是多少。頻率通常是30hz,如下圖所示:

顯示單一圖檔

想要檢視一張圖像,我們不能直接使用rostopic echo /camera指令,因為這會使用文本格式輸出圖檔的資訊,資料量會非常巨大,不可能進行任何有效的分析。是以,我們會調用下面的指令:

這裡使用了image_view節點,在視窗中展示了給定主題(使用image參數)的圖像,如下圖所示。這樣我們就能簡單直接地顯示在主題内釋出的每一幅圖像或幀,即使資料來自網絡也可以實作。你可以通過在視窗中點選右邊的按鈕将目前幀儲存在硬碟裡,通常會存在home目錄下或者~/.ros目錄下。

ros hydro還有rqt_image_view,支援在一個視窗檢視多個圖像,但不允許點選右邊按鈕儲存圖像。我們可以在gui上手動選擇圖像主題或使用image_view:

前面指令結果如右圖所示:

ros提供了一個基于opencv校準api的攝像頭校準界面。我們将在第5章介紹如何使用攝像頭,包括單目和雙目攝像頭以及ros圖像管道(image_proc和stereo_image_proc)相關内容,這些能修正攝像頭圖像失真、計算雙目攝像頭深度差異,并得到一個點雲。

繼續閱讀