構(gòu)建手控機(jī)器人
該項(xiàng)目旨在創(chuàng)建一個(gè)開放的,制造商友好的機(jī)器人平臺(tái),提供實(shí)時(shí)的,完全在設(shè)備上的手部檢測(cè)和跟蹤,所有這些都完全由邊緣計(jì)算驅(qū)動(dòng)。它在設(shè)備內(nèi)置的神經(jīng)處理單元上運(yùn)行Edge Impulse優(yōu)化的YOLO-Pro對(duì)象檢測(cè)模型,以極低的功耗提供超過60 FPS的低延遲推理。ROS 2作為實(shí)時(shí)編排主干,清晰地分離感知、控制和驅(qū)動(dòng)節(jié)點(diǎn),這使得系統(tǒng)在手勢(shì)識(shí)別、遠(yuǎn)程操作或協(xié)作機(jī)器人等應(yīng)用程序中具有高度可擴(kuò)展性。
硬件
我們使用的是帶有高通Dragonwing QCM6490 SoC的Rubik Pi 3。Dragonwing QCM6490采用八核高通Kryo CPU,高通Adreno 643 GPU和高通Hexagon 770 DSP,其中包含能夠提供12 TOPS的AI加速器。
為了驅(qū)動(dòng),機(jī)器人使用由SparkFun servo pHAT驅(qū)動(dòng)的伺服電機(jī),通過I2C連接為多個(gè)伺服器提供方便的控制。
對(duì)于平移和傾斜運(yùn)動(dòng),機(jī)器人使用兩個(gè)DFRobot DSS-P05標(biāo)準(zhǔn)伺服電機(jī):一個(gè)專用于平移,另一個(gè)專用于傾斜。
泛傾斜機(jī)構(gòu)是建立使用DFRobot泛傾斜支架容易和堅(jiān)固的組裝。
我們將使用Elecom 500萬像素的網(wǎng)絡(luò)攝像頭。
我們3d打印了一個(gè)安裝支架,將機(jī)器人牢固地固定在底板上,確保機(jī)器人運(yùn)動(dòng)穩(wěn)定安全。
完全組裝的系統(tǒng)如下所示。
設(shè)置《魯比克Pi 3》
完成后,通過WiFi對(duì)設(shè)備的SSH訪問應(yīng)該完全啟用并可操作。
ROS 2爵士樂安裝
按照下面的說明安裝必要的軟件包。
設(shè)置語言環(huán)境
設(shè)置ROS 2 Apt存儲(chǔ)庫
安裝開發(fā)工具
安裝ROS 2基礎(chǔ)包
由于我們將在無頭模式下使用Rubik Pi 3,因此運(yùn)行以下命令來安裝裸機(jī)ROS 2基本包,而不使用任何GUI工具。
URDF
一個(gè)精確的統(tǒng)一機(jī)器人描述格式(URDF)對(duì)于保證相機(jī)、平移和傾斜幀之間精確可靠的坐標(biāo)轉(zhuǎn)換至關(guān)重要。
機(jī)器人模型可以在RViz2中使用Joint State Publisher gui進(jìn)行可視化和手動(dòng)驗(yàn)證。啟動(dòng)腳本可以在代碼一節(jié)中引用的GitHub存儲(chǔ)庫中獲得。
數(shù)據(jù)采集
我們需要在Edge Impulse工作室注冊(cè)一個(gè)賬戶然后創(chuàng)建一個(gè)新項(xiàng)目。
運(yùn)行以下命令并按照屏幕上的說明將設(shè)備連接到Edge Impulse Studio進(jìn)行數(shù)據(jù)收集。
我們捕獲了357張不同距離和照明設(shè)置的圖像,并使用Edge Impulse Studio的數(shù)據(jù)采集頁面中的標(biāo)簽隊(duì)列標(biāo)簽來標(biāo)記它們。
脈沖設(shè)計(jì)
對(duì)于模型開發(fā),我們需要?jiǎng)?chuàng)建一個(gè)脈沖,一個(gè)集成圖像處理和機(jī)器學(xué)習(xí)模型的定制管道。導(dǎo)航到“脈沖設(shè)計(jì)>創(chuàng)建脈沖”頁面,選擇“添加處理塊”,并選擇“圖像”對(duì)圖像數(shù)據(jù)進(jìn)行預(yù)處理和歸一化。在同一頁面中選擇“添加學(xué)習(xí)塊”,選擇“目標(biāo)檢測(cè)(圖像)”。我們使用224x224的圖像大小。然后,單擊Save Impulse按鈕。
特征提取
接下來,進(jìn)入脈沖>圖像頁面,設(shè)置顏色深度參數(shù)為RGB。
點(diǎn)擊Save parameters按鈕,重定向到另一個(gè)頁面,我們應(yīng)該點(diǎn)擊Generate Feature按鈕。
模型訓(xùn)練
要訓(xùn)練模型,請(qǐng)導(dǎo)航到Impulse > ObjectDetection頁面。我們選擇的對(duì)象檢測(cè)設(shè)置如下所示。
我們?cè)诟呒?jí)訓(xùn)練設(shè)置中選擇了基本的空間和色彩空間增強(qiáng)。
我們選擇了最新的YOLO-Pro型號(hào),它非常適合檢測(cè)由于與相機(jī)距離不同而產(chǎn)生的不同大小的手,并且能夠在高通人工智能加速器上高效運(yùn)行。點(diǎn)擊Save & train按鈕開始訓(xùn)練。
訓(xùn)練結(jié)束后,訓(xùn)練效果如下圖所示。量化(int8)模型對(duì)訓(xùn)練數(shù)據(jù)的精度得分為94.4%。
模型試驗(yàn)
要評(píng)估模型在測(cè)試數(shù)據(jù)集上的性能,導(dǎo)航到模型測(cè)試頁面并單擊“分類所有”按鈕。該模型在未見過的數(shù)據(jù)集上顯示出更高的性能,準(zhǔn)確率達(dá)到97.1%。
生活分類
我們可以在Impulse > Live分類頁面中測(cè)試模型推理。
模型部署
由于模型將使用Qualcomm AI Accelerator在Rubik Pi 3上運(yùn)行推理,因此我們?cè)诓渴痦撁嫔线x擇了Linux (AARCH64 with Qualcomm QNN)選項(xiàng)。
為模型優(yōu)化選擇Quantized (int8)選項(xiàng),因?yàn)楦咄ˋI加速器與float32模型不兼容。
點(diǎn)擊Build按鈕編譯并下載EIM(邊緣脈沖模型)二進(jìn)制文件。
應(yīng)用程序開發(fā)
應(yīng)用程序構(gòu)建為分布式ROS 2節(jié)點(diǎn),遵循關(guān)注點(diǎn)分離原則。它從相機(jī)捕獲圖像,處理它們,通過PID控制檢測(cè)和跟蹤手。結(jié)果通過HTTP流傳輸以進(jìn)行實(shí)時(shí)監(jiān)控。這種模塊化的設(shè)計(jì)保證了任務(wù)的清晰劃分,提高了效率和可維護(hù)性。每個(gè)節(jié)點(diǎn)處理一個(gè)特定的功能,從圖像捕獲到平移傾斜驅(qū)動(dòng),同時(shí)無縫集成以實(shí)現(xiàn)應(yīng)用程序的目標(biāo)。
Edge Impulse Linux SDK for Python
我們利用Edge Impulse Linux SDK進(jìn)行設(shè)備上模型推斷,可以通過運(yùn)行下面列出的命令來安裝。
高通AI運(yùn)行時(shí)
Qualcomm AI運(yùn)行時(shí)及其所需的依賴關(guān)系可以通過運(yùn)行下面的命令來安裝。
下面是object_detection節(jié)點(diǎn)的代碼。
下面是hand_tracker節(jié)點(diǎn)的代碼。
我們采用ros2_control框架提供實(shí)時(shí)控制,并與機(jī)器人的硬件無縫接口。
這是控制器管理器配置文件。
下面是硬件接口代碼。硬件接口是用c++編寫的,以確保低延遲性能和最高效率。
啟動(dòng)應(yīng)用程序
執(zhí)行以下命令設(shè)置ROS 2工作空間環(huán)境。
下面是啟動(dòng)文件腳本。
執(zhí)行以下命令啟動(dòng)應(yīng)用程序。
結(jié)論
該項(xiàng)目成功地證明,復(fù)雜的實(shí)時(shí)手部跟蹤可以在低成本的開源硬件上實(shí)現(xiàn),而不依賴于云服務(wù)或高功率gpu,為機(jī)器人領(lǐng)域的無障礙邊緣人工智能設(shè)定了新的基準(zhǔn)。通過將優(yōu)化后的YOLO-Pro模型、ROS 2模塊化和高效的傾斜伺服相結(jié)合,該平臺(tái)為資源受限環(huán)境下響應(yīng)式人機(jī)交互提供了堅(jiān)實(shí)的基礎(chǔ)。
本文編譯自hackster.io





