3D 飛時測距應用快速入門
資料提供者:DigiKey 北美編輯群
2020-03-25
3D 飛時測距 (ToF) 成像能針對多種應用提供高效的視訊成像替代方案,包括工業安全、機器人導航以及手勢控制介面等等。但是,這種方法需要謹慎結合光學設計、精密時序電路以及訊號處理能力,因此開發人員常難以實作有效的 3D ToF 平台。
本文會先介紹 ToF 技術的細微差異,然後探討兩個現成的 3D ToF 套件 — Analog Devices 的 AD-96TOF1-EBZ 開發平台和 ESPROS Photonics 的 EPC660 評估套件,說明這些產品如何幫助開發人員快速開發 3D ToF 應用的原型,並獲得實作 3D ToF 設計所需的經驗,以符合設計的獨特要求。
什麼是 ToF 技術?
ToF 技術採用大家熟悉的原理,即測量某來源點發射能量與其收到反射的時間差,來確定物體與來源點之間的距離 (圖 1)。
圖 1:ToF 系統會測量發射能量與系統收到物體所反射能量的時間延遲,藉此計算系統與外部物體之間的距離。(圖片來源:Analog Devices)
雖然基本原理相同,但 ToF 解決方案卻差異甚大,而且在超音波、光達 (LiDAR)、相機和毫米波 (mmWave) RF 訊號等底層技術上,各自有本質上的功能和侷限性:
- 超音波 ToF 解決方案雖然低成本,但物體的範圍和空間解析度有限
- 光學 ToF 解決方案可達到比超音波系統更大的範圍和空間解析度,但會受到濃霧或濃煙的影響
- 採用 mmWave 技術的解決方案,通常較複雜且昂貴,但運作範圍廣,而且就算有煙、雨或霧氣,仍可提供目標物體的速度和航向資訊
製造商可依據需求利用每種技術的優勢,來滿足特定的要求。例如,超音波感測器非常適合在機器人移動或駕駛人停車時偵測障礙物。另一方面,mmWave 技術則為車輛提供必要的遠距離感測能力,即使在其他感測器無法穿透惡劣的天氣條件時,也能偵測到逐漸逼近的道路危險。
ToF 設計可以在單一對發射器/接收器的基礎上構建。例如,從概念上來說,設計簡單的光學 ToF 只需要使用一個 LED 來照亮相關區域,並使用一個光電二極體來偵測該區域內物體的反射即可。但是,這個看似簡單的設計仍需要精確的時序和同步電路來測量延遲。另外,可能還需要使用調變和解調電路,將照明訊號與背景訊源區分,或支援更複雜的連續波方法。
開發人員致力於提高訊噪比 (SNR) 並消除 ToF 系統中的假影,設計的複雜度也連帶迅速增加。令情況更複雜的是,越先進的偵測解決方案會使用多個發射器和接收器來追蹤多個物體,或支援更複雜的動作追蹤演算法。例如,mmWave 系統通常會採用多個接收器來追蹤多個獨立物體的航向和速度。(請參閱《使用毫米波雷達套件,快速開發精準的物體偵測設計》)。
3D 光學 ToF 系統
3D 光學 ToF 系統將「採用更多接收器」的想法進一步延伸,使用通常以電荷耦合元件 (CCD) 陣列為基礎的成像感測器。當一組透鏡將某個相關區域聚焦到 CCD 陣列時,該區域中的對應點會反射光,並且對 CCD 陣列中的各個電荷儲能元件充電。到達 CCD 陣列的反射光會與脈衝或連續波照明同步,且大致會在一系列時間窗或相位內分別擷取。這些資料會做進一步處理,以建立 3D 深度圖,此圖由立體像素 (VOlume piXEL) 構成,其值代表離相關區域對應點的距離。
與視訊中的訊框一樣,各個深度圖可依序擷取,以時間解析度 (僅受影像擷取系統訊框率限制) 和空間解析度 (僅受 CCD 陣列和光學系統限制) 提供測量結果。隨著更大的 320 x 240 CCD 影像儀問世,解析度更高的 3D 光學 ToF 系統已廣泛運用在眾多領域,包括工業自動化、無人機 (UAV),甚至是手勢介面 (圖 2)。
圖 2:3D 光學 ToF 具有高訊框率和空間解析度,可提供詳細的資料給手勢介面系統,例如圖中有人朝 ToF 相機舉起手。(圖片來源:ESPROS Photonics)
3D ToF 系統與大多數以相機為主的方法不同,即便在陰影或照明條件變化的情況下也能提供準確的結果。這些系統都有自己的照明,通常會使用雷射或大功率紅外線 LED (例如 Lumileds 的 Luxeon IR LED),並可在這些系統使用的 MHz 切換速率下工作。3D ToF 系統也跟立體攝影機等方法不同,可提供緊湊型解決方案來產生詳細的距離資訊。
預構建的解決方案
然而,要實作 3D ToF 系統,開發人員會面臨多個設計挑戰。除了前面提到的時序電路之外,這些系統還仰賴精心設計的訊號處理管線,必須進行最佳化,以在每個時間窗或相位測量後,從 CCD 陣列快速讀取結果,然後完成所需的處理,將原始資料轉換為深度圖。先進的 3D ToF 影像儀如 ESPROS Photonics 的 EPC660-CSP68-007 ToF 影像儀,結合了 320 x 240 CCD 陣列與所需的整套時序和訊號處理功能,可執行 3D ToF 測量並提供每像素 12 位元距離資料 (圖 3)。
圖 3:ESPROS Photonics 的 epc660 整合了 320 x 240 像素影像儀以及所需的整套時序電路和控制器,可將原始影像儀資料轉換為深度圖。(圖片來源:ESPROS Photonics)
ESPROS Photonics 的 EPC660-007 卡緣連接器晶片支架,將 epc650 影像儀安裝在 37.25 x 36.00 mm 的印刷電路板 (簡稱 PC 板) 上,且附有解耦電容器和卡緣連接器。雖然此晶片支架可因應 3D ToF 系統設計中的基本硬體介面,但開發人員仍需在前端完成適當的光學設計,並在後端提供處理資源。ESPROS Photonics 的 epc660 評估套件提供完整的 3D ToF 應用開發環境,其中含有預構建的 3D ToF 成像系統及相關軟體,因此開發人員無需處理這些工作 (圖 4)。
圖 4:ESPROS Photonics 的 epc660 評估套件提供預構建的 3D ToF 相機系統及相關軟體,以便在應用中使用深度資訊。(圖片來源:ESPROS Photonics)
ESPROS 套件專為評估和快速原型開發而設計,其預先組裝的相機系統結合了 epc660 CC 晶片支架、光學透鏡組件和一組八個 LED。除了相機系統外,還附有帶 512 MB RAM 和 4 GB 快閃記憶體的 BeagleBone Black 處理器板,可當作主機控制器和應用處理資源。
此外,ESPROS 還推出 epc660 評估套件支援軟體,可從該公司網站下載。向該公司當地業務辦公室索取密碼即可開啟軟體。取得軟體的存取權限後,開發人員只需使用隨附的任一配置檔執行圖形使用者介面 (GUI) 應用程式,即可開始操作相機系統。另外,此 GUI 應用程式還提供控制和顯示視窗,可設定其他參數,包括空間和時間篩選設定,以及最終用來查看結果。開發人員可以輕鬆地使用此套件即時擷取深度圖,並將這些深度圖輸入到自己的應用軟體中。
增強解析度的 3D ToF 系統
ESPROS epc660 等 320 x 240 影像儀可用於許多應用,但可能缺乏必要的解析度,而無法偵測手勢介面中的小幅移動,或在未嚴格限制相關範圍的情況下分辨小型物體。對於這些應用,開發人員可利用以 640 x 480 ToF 感測器為基礎的現成開發套件,迅速開發高解析度應用的原型。
Seeed Technology 的 DepthEye Turbo 深度相機採用自足式設計,在 57 x 57 x 51 mm 的立方體中整合了 640 x 480 ToF 感測器、四個 850 nm 垂直共振腔面射型雷射 (VCSEL) 二極體、照明和感測操作電路、電源以及 USB 介面支援。此產品透過開源 libPointCloud SDK github 儲存庫提供軟體支援,並支援 Linux、Windows、Mac OS 和 Android 平台。
除了有 C ++ 驅動程式、資料庫和範例程式碼之外,libPointCloud SDK 發行版還含有快速開發原型用的 Python API,以及視覺化工具。將此發行套件安裝在主機開發平台後,開發人員可以透過 USB 將相機連接到電腦,即可立即開始使用視覺化工具來顯示相位、振幅或點雲圖。這些圖基本上都是以紋理表面渲染的增強型深度圖,可提供更平滑的 3D 影像 (圖 5)。
圖 5:相關的軟體套裝搭配 Seeed Technology 的 DepthEye Turbo 深度相機後,即可讓開發人員輕鬆以多種渲染方式 (包括此處主視窗窗格所示的點雲),對 3D ToF 資料進行視覺化呈現。(圖片來源:Seeed Technology/PointCloud.AI)
Analog Devices 的 AD-96TOF1-EBZ 3D ToF 評估套件提供更加開放的硬體設計。此設計由一對板件構建,並使用 Raspberry Pi 的 Raspberry Pi 3 Model B+ 或 Raspberry Pi 4 作為主機控制器和本機處理資源 (圖 6)。
圖 6:Analog Devices 的 AD-96TOF1-EBZ 3D ToF 評估套件結合雙板件組件,可提供照明與數據採集功能,並搭配 Raspberry Pi 板進行本機處理。(圖片來源:Analog Devices)
此套件的類比前端 (AFE) 板含有光學組件、CCD 陣列與緩衝區、韌體儲存區以及一個處理器,可管理相機的整體運作,如照明時序、感測器同步以及深度圖的生成等。第二塊板則含有四個 850 nm VCSEL 雷射二極體及驅動器,可連接到 AFE 板,確保雷射二極體圍繞光學組件 (如上圖所示)。
Analog Devices 透過開源 3D ToF 軟體套件支援 AD-96TOF1-EBZ 套件,此套件含有 3D ToF SDK 以及範例程式碼和包封函式,適用於 C/C++、Python 和 Matlab。為了在連網環境中支援主機應用程式和低階硬體的互動,Analog Devices 將此 SDK 劃分為兩個分區:一個是主機分區,針對 USB 和網路連線進行最佳化,另一個則是低階分區,可在嵌入式 Linux 上運行並建立在 Video4Linux2 (V4L2) 驅動程式之上 (圖 7)。
圖 7:Analog Devices 的 3D ToF SDK API 不僅支援在本機嵌入式 Linux 主機上執行的應用程式,還支援在連網主機上遠端執行的應用程式。(圖片來源:Analog Devices)
此 SDK 具有網路功能,可讓連網主機上執行的應用程式利用 ToF 硬體系統進行遠端操作,以存取相機並擷取深度數據。此外,使用者程式也可在嵌入式 Linux 分區中執行,並充分利用該級別所提供的進階選項。
Analog Devices 在軟體發行版中有提供範例程式碼,可展示關鍵的低階運作功能,例如在主機電腦上以及在本機使用嵌入式 Linux 進行相機初始化、基本訊框擷取、遠端存取以及跨平台擷取。此外,還有一些根據這些基本操作建立的其他範例應用程式,可展示如何在更高階應用中使用擷取的資料,例如點雲的生成等應用。事實上,有一個範例應用程式展示了如何使用深度神經網路 (DNN) 推論模型,將相機系統產生的資料進行分類。這個用 Python 編寫的 DNN 範例應用程式 (dnn.py
),逐步說明如何擷取資料以及使用推論模型來準備資料分類 (清單 1)。
複製
import aditofpython as tof
import numpy as np
import cv2 as cv
... try:
net = cv.dnn.readNetFromCaffe(args.prototxt, args.weights)
except:
print("Error: Please give the correct location of the prototxt and caffemodel")
sys.exit(1)
swapRB = False
classNames = {0: 'background',
1: 'aeroplane', 2: 'bicycle', 3: 'bird', 4: 'boat',
5: 'bottle', 6: 'bus', 7: 'car', 8: 'cat', 9: 'chair',
10: 'cow', 11: 'diningtable', 12: 'dog', 13: 'horse',
14: 'motorbike', 15: 'person', 16: 'pottedplant',
17: 'sheep', 18: 'sofa', 19: 'train', 20: 'tvmonitor'}
system = tof.System()
status = system.initialize()
if not status:
print("system.initialize() failed with status: ", status)
cameras = []
status = system.getCameraList(cameras)
... while True:
# Capture frame-by-frame
status = cameras[0].requestFrame(frame)
if not status:
print("cameras[0].requestFrame() failed with status: ", status)
depth_map = np.array(frame.getData(tof.FrameDataType.Depth), dtype="uint16", copy=False)
ir_map = np.array(frame.getData(tof.FrameDataType.IR), dtype="uint16", copy=False)
# Creation of the IR image
ir_map = ir_map[0: int(ir_map.shape[0] / 2), :]
ir_map = np.float32(ir_map)
distance_scale_ir = 255.0 / camera_range
ir_map = distance_scale_ir * ir_map
ir_map = np.uint8(ir_map)
ir_map = cv.cvtColor(ir_map, cv.COLOR_GRAY2RGB)
# Creation of the Depth image
new_shape = (int(depth_map.shape[0] / 2), depth_map.shape[1])
depth_map = np.resize(depth_map, new_shape)
distance_map = depth_map
depth_map = np.float32(depth_map)
distance_scale = 255.0 / camera_range
depth_map = distance_scale * depth_map
depth_map = np.uint8(depth_map)
depth_map = cv.applyColorMap(depth_map, cv.COLORMAP_RAINBOW)
# Combine depth and IR for more accurate results
result = cv.addWeighted(ir_map, 0.4, depth_map, 0.6, 0)
# Start the computations for object detection using DNN
blob = cv.dnn.blobFromImage(result, inScaleFactor, (inWidth, inHeight), (meanVal, meanVal, meanVal), swapRB)
net.setInput(blob)
detections = net.forward()
... for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > thr:
class_id = int(detections[0, 0, i, 1])
... if class_id in classNames:
value_x = int(center[0])
value_y = int(center[1])
label = classNames[class_id] + ": " + \
"{0:.3f}".format(distance_map[value_x, value_y] / 1000.0 * 0.3) + " " + "meters"
... # Show image with object detection
cv.namedWindow(WINDOW_NAME, cv.WINDOW_AUTOSIZE)
cv.imshow(WINDOW_NAME, result)
# Show Depth map
cv.namedWindow(WINDOW_NAME_DEPTH, cv.WINDOW_AUTOSIZE)
cv.imshow(WINDOW_NAME_DEPTH, depth_map)
清單 1:此片段來自 Analog Devices 3D ToF SDK 發行版中的範例應用程式,展示出只需幾個步驟即可取得深度和 IR 影像,並使用推論模型進行分類。(程式碼來源:Analog Devices)
此過程首先使用 OpenCV 的 DNN 方法 (cv.dnn.readNetFromCaffe
),讀取現有推論模型的網路和相關權重。在本例中,此模型是以 Caffe 實作的 Google MobileNet Single Shot Detector (SSD) 偵測網路,因可在較小模型尺寸下達到高準確度而聞名。在載入類別名稱以及支援的類別識別碼和類別標籤後,此範例應用程式會識別可用的相機,並執行一系列初始化常式 (未在清單 1 中顯示)。
大部分的範例程式碼都是在處理深度圖 (depth_map
) 和 IR 圖 (ir_map
) 的準備事宜,然後將其 (cv.addWeighted
) 合併到單一陣列中,以提高準確度。最後,程式碼會調用另一個 OpenCV DNN 方法 (cv.dnn.blobFromImage),將合併的影像轉換為推論所需的 4D blob
資料類型。下一行程式碼將產生的 blob
設定為推論模型的輸入 (net.setInput(blob)
)。接下來,對 net.forward()
的調用會啟動推論模型,再由其傳回分類結果。範例應用程式的其餘部分可識別超過預設臨界值的分類結果,並為這些結果產生標籤和邊界框,以顯示擷取的影像資料、推論模型識別的標籤以及其與相機的距離 (圖 8)。
圖 8:在 Analog Devices 的 3D ToF SDK 發行版中,DNN 範例應用程式使用幾行 Python 程式碼和 OpenCV 資料庫來擷取和分類深度影像,並顯示所識別物體的標籤和距離。(圖片來源:Analog Devices)
如 Analog Devices 的 DNN 範例應用程式所示,開發人員可以使用 3D ToF 深度圖搭配機器學習方法,建構更複雜的應用功能。雖然需要低延遲回應的應用程式更有可能使用 C/C++ 構建這些功能,但基本步驟是不變的。
透過 3D ToF 資料和高效能推論模型,工業機器人系統即可更安全地將其動作與其他設備同步,甚至在人與機器人近距離協作的「協作機器人」環境中與人類同步。透過不同的推論模型,另一個應用程式可使用高解析度 3D ToF 相機,對手勢介面的微小動作進行分類。在汽車應用中,這種方法可協助提高先進駕駛輔助系統 (ADAS) 的準確度,能充分利用 3D ToF 系統提供的高時空解析度。
結論
飛時測距 (ToF) 技術在幾乎所有相當需要準確測量系統與其他物體之間距離的系統中,都扮演著關鍵的角色。在各式各樣 ToF 技術中,光學 3D ToF 可提供高空間解析度和高時間解析度,因此能更精細地區分較小的物體,並更精確地監測這些物體的相對距離。
但是,若想充分利用這項技術,開發人員需要應對這些系統的諸多相關挑戰,包括光學設計、精確時序以及同步擷取訊號。如本文所述,預構建的 3D ToF 系統推出後,例如 Analog Devices 的 AD-96TOF1-EBZ 開發平台和 ESPROS Photonics 的 EPC660 評估套件,有助於消除這些障礙,因此能順利地將此技術用於工業系統、手勢介面及汽車安全系統等等。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。