Intel RealSense LR200的範例程式,在Jetson Nano、Raspberry Pi、Tinker Edge R上都可以安裝使用。
本篇文章將教你如何在Jetson Nano、Raspberry Pi、Tinker Edge R上安裝Intel RealSense LR200 SDK,並且介紹範例程式(C/C++)。這個型號沒有提供Python範例程式,不過沒有C/C++基礎的人也可以順利執行。閱讀本篇文章需要對Terminal以及Linux常見指令有基礎了解。
本文大綱
- 認識 Intel RealSense LR200
- 在不同開發板上安裝RealSense LR200 SDK
- Raspberry Pi 4
- Jetson Nano & Tinker Edge R
- 範例程式介紹
- 對齊-cpp-alignimages
- 回傳函式-cpp-callback & cpp-callback-2
- 基礎影像串流組圖-cpp-capture
- 使用者互動介面-cpp-config-ui
- 列出可用項目-cpp-enumerate-devices
- 儲存影像-cpp-headless
- 同步顯示多裝置影像-cpp-multicam
- 三維點雲-cpp-pointcloud
- 選擇顯示組合-cpp-restart
- 低延遲的多執行緒範例-cpp-stride
- 教學範例一:取得深度資訊-cpp-tutorial-1-depth
- 教學範例二:顯示四種影像組圖-cpp-tutorial-2-streams
- 教學範例三:顯示三維點雲-cpp-tutorial-3-pointcloud.cpp
作者/攝影 | 蔡雨錡/CAVEDU教育團隊 |
時間 | 1.5hr |
難度 | ★★☆☆☆ |
材料表 |
|
認識Intel RealSense LR200
Intel RealSense LR200 是 RealSense攝影機家族的成員之一,推出時間為2016年Q3,可用距離範圍為0.5m-3.5m,解析度為480×360@60fps,彩色影像的單獨解析度可以到1920×1080。可以點此看Intel RealSense攝影機的歷代成員,並且可以點選任意想要比較的成員進行規格比較。
本篇文章著重在安裝SDK跟範例程式介紹,想要了解更多細節可以參考RealSense LR200 SDK的Github。
在不同開發板上安裝RealSense LR200 SDK
以下指令皆為在Terminal中執行。如果你之前已經為了RealSense D435(i)安裝過librealsense,由於並不相容於LR200,必須重新安裝。
此函式庫將安裝在/ usr / local / lib;header files安裝在/ usr / local / include;
範例、教學、測試程式位於/ usr / local / bin。
1. Raspberry Pi 4
Step1. 同步apt軟體資料庫、軟體升級、系統升級 (這個步驟可以處理一些軟體相依/相斥的問題)
Step2. 安裝一些librealsense需要的套件
Step3. 從Github下載 legacy Realsense SDK
https://github.com/IntelRealSense/librealsense.git
Step4. 編譯並安裝librealsense
2. Jetson Nano & Tinker Edge R
Step1. 同步apt軟體資料庫、軟體升級、系統升級 (這個步驟可以處理一些軟體相依/相斥的問題)
Step2. 安裝一些librealsense需要的套件
Step3. 從Github下載 legacy Realsense SDK
https://github.com/IntelRealSense/librealsense.git
Step4. 編譯並安裝librealsense
範例程式介紹
如下圖中所示,完成安裝後,你可以在~/librealsense/examples資料夾中找到範例程式。
接下來的內容為範例程式在Jetson Nano B01開發板上測試的成果,程式的介紹順序按照Github中的字母排列順序。
想要執行範例程式時,只要在Terminal中輸入該範例名稱即可順利執行,例如想要執行cpp-capture.cpp這個程式,輸入以下指令即可執行。
A.對齊-cpp-alignimages
顧名思義這個程式會對齊彩色影像、深度影像、紅外光影像,因為兩個影像的涵蓋範圍略有差異,畢竟鏡頭位置不一樣。從左至右,從上到下顯示的影像順序分別為彩色影像、彩色影像對齊深度影像、紅外光影像對齊深度影像、深度影像對齊彩色影像、深度影像、深度影像對齊紅外光影像。
B.回傳函式-cpp-callback & cpp-callback-2
cpp-callback提供了深度跟彩色資訊(寬、高、影像格式、時間戳記)的回傳函式,如下圖。
cpp-callback-2中有寫這是Multi-threading範例三,執行後會在Terminal中顯示使用的硬體名稱、序列編號跟韌體版本。另外會跳出組圖畫面,從左至右,從上到下顯示的影像順序分別為深度影像、彩色影像、紅外線影像一、紅外線影像二。回傳函式會提供影像解析度以及是第幾個stream等資訊。
C.基礎影像串流組圖-cpp-capture
執行程式後可以看到跳出四張組圖的影像串流,從左至右,從上到下顯示的影像順序分別為深度影像、彩色影像、紅外線影像一、紅外線影像二。Terminal中顯示組圖中的每張影像資訊(影像類型、解析度、FOV、有沒有變形校正)
D.使用者互動介面-cpp-config-ui
由於最新的RealSense Viewer讀不到LR200的資訊,這個程式可以想成是初代/簡化版本的使用者互動介面。可以調整的項目有明亮度、對比、白平衡、多項深度閾值等等,有興趣的人可以全部調整看看。顯示的畫面是基於cpp-capture程式延伸改寫的。
E.列出可用項目-cpp-enumerate-devices
非常實用的程式,可以列舉所有可用的項目,執行後能依序獲得以下資訊:
- 獲取系統上當前存在的設備清單
- 顯示每項設備名稱和資訊(序列編號、韌體版本等)
- 顯示每項設備支持哪些選項
- 顯示每項設備支持哪些影像串流以及個數
- 顯示每種影像串流的每種可用模式(寬度、高度、格式、幀率、以及在此模式下啟用影像串流所需的設定)
- 取得內建函式
- 檢視水平跟垂直的FOV(Field Of View)
像一份直接攤開來的規格書。下圖為執行後的成果。
F.儲存影像-cpp-headless
這個範例會取得30幀並將最後一幀的彩色影像、深度影像、兩張紅外線影像分別寫入程式同資料夾下,如下圖。
對於檢測沒有辦法顯示圖片的嵌入式系統很有用。
G.同步顯示多裝置影像-cpp-multicam
如果專題中需要用到至少兩個LR200,就可以使用這個程式來檢視所有LR200的彩色影像跟深度影像。
由於手邊只有一個LR200,所以只有一直排的影像;如果有n個LR200,就可以顯示n直排的影像(上方為彩色影像,下方為深度影像)。
H.三維點雲-cpp-pointcloud
執行程式後,顯示的三維點雲畫面如下圖。左上角為影像的fps。可以使用滑鼠進行視角旋轉。令人感動的是旋轉視角的過程十分順暢不卡頓。
I.選擇顯示組合-cpp-restart
Intel很貼心地準備了20種影像顯示組合供使用者選擇,有單圖/多圖、不同解析度、不同格式等設定,詳細可以看程式碼。執行程式後會按順序顯示這20種影像顯示組合。下方即為其中一種,顯示過程中也可以看每張圖片左上角的細節設定。
J.低延遲的多執行緒範例-cpp-stride
這是個多執行緒、低延遲、有回傳函式、零複製的範例,為了縮小延遲感會適當地丟掉多餘的幾幀影像。程式中設定最多只可以有一幀影像在排隊,排超過的就捨棄。
執行後顯示影像如下圖,此程式重點在程式碼。
K.教學範例一:取得深度資訊-cpp-tutorial-1-depth
這個教學範例就是D435i第一個教學範例的前身了,用ASCII碼 ” .:nhBXWW”來代表深度,下圖因為天花板的燈太遠,所以只有用到前兩個的” ”跟”.”。
L.教學範例二:顯示四種影像組圖-cpp-tutorial-2-streams
基本上跟cpp-capture差不多,但深度影像的套用的假彩色變成紅色色階。從左至右,從上到下顯示的影像順序分別為深度影像、彩色影像、紅外線影像一、紅外線影像二。
M.教學範例三:顯示三維點雲-cpp-tutorial-3-pointcloud.cpp
跟cpp-pointcloud的顯示略不同以外,code比較簡潔少了40幾行,一樣是顯示三維點雲資訊。
其中有一個cpp-motion-module範例沒有講是因為LR200沒有motion frame,所以這個範例無法執行。
手邊有LR200可以試著修改這些範例玩玩看,有任何有趣的相關主題都歡迎在留言區跟大家分享!
參考資料: