如何為機(jī)器人狗添加了一個(gè)機(jī)械臂
在過去的幾個(gè)月里,一只希沃納小狗機(jī)器人狗一直穩(wěn)穩(wěn)地坐在我的辦公桌上。它很聰明——能夠四處移動(dòng)、識(shí)別面孔,甚至還能響應(yīng)一些指令。但一個(gè)想法一直在我腦海中縈繞:如果它能擁有“雙手”來主動(dòng)與周圍環(huán)境互動(dòng),而不僅僅是觀察和移動(dòng)該怎樣呢?這個(gè)想法促使我訂購(gòu)了適用于小狗機(jī)器人的專用兩自由度機(jī)械臂擴(kuò)展套件,從而開啟了將它從“移動(dòng)平臺(tái)”轉(zhuǎn)變?yōu)椤耙苿?dòng)操作器”的項(xiàng)目。
這遠(yuǎn)不止是硬件的簡(jiǎn)單附加功能。我的目標(biāo)是構(gòu)建一個(gè)完整的智能行為循環(huán):讓“小狗板”能夠自主找到目標(biāo)物體,規(guī)劃前往該物體的路徑,精確地抓取它,并最終將其運(yùn)送到指定位置。這聽起來像是物流機(jī)器人或家庭助手的簡(jiǎn)化版本,而“小狗板”采用的開源、基于 ROS 的設(shè)計(jì)使這個(gè)雄心勃勃的想法得以實(shí)現(xiàn)。
第1步:硬件集成——構(gòu)建物理基礎(chǔ)
將這個(gè)機(jī)械臂套件安裝起來的過程出乎意料地十分順利。該套件包含機(jī)械臂主體、兩個(gè)專用伺服電機(jī)、所有必需的線纜以及一個(gè)與“小狗派”(PuppyPi)的數(shù)控鋁制背板完美適配的安裝支架。關(guān)鍵在于要確保機(jī)械臂底座穩(wěn)固無(wú)比,因?yàn)槿魏屋p微的晃動(dòng)都會(huì)在夾爪處被放大,從而破壞精度。
我用提供的線纜將機(jī)械臂的兩個(gè)伺服電機(jī)連接到了小狗板主板上的預(yù)留擴(kuò)展端口上。根據(jù)官方文檔,這些端口是預(yù)先配置好的,這讓我避免了底層驅(qū)動(dòng)程序方面的困擾。在開機(jī)之前,我手動(dòng)將機(jī)械臂調(diào)整到“零”位置——這是未來所有動(dòng)作的基準(zhǔn)點(diǎn)。
您可以查看“小狗板”教程,以獲取完整的代碼、視頻指南以及其他項(xiàng)目?jī)?nèi)容。
第 2 步:軟件與感知——賦予其“眼睛”和“大腦”
真正的挑戰(zhàn)和樂趣始于軟件方面。PuppyPi 運(yùn)行著完整的 Ubuntu 和 ROS 系統(tǒng),這是我一切工作的基礎(chǔ)。我首先安裝了官方的 HiWonder 機(jī)器人手臂 ROS 包,其中包含了 URDF 模型、基本控制器和示例腳本。
視覺對(duì)于手臂確定抓取位置至關(guān)重要。我利用“小狗板”內(nèi)置的廣角攝像頭編寫了一個(gè)基于 OpenCV 的視覺節(jié)點(diǎn)。為了確保識(shí)別的可靠性,我編寫程序使其能夠檢測(cè)特定的顏色(一個(gè)明亮的紅色立方體)。這個(gè)節(jié)點(diǎn)會(huì)持續(xù)分析視頻流。一旦它識(shí)別出目標(biāo)顏色的斑點(diǎn),它就會(huì)使用相機(jī)校準(zhǔn)參數(shù)計(jì)算出該物體相對(duì)于“小狗板”主體的三維空間坐標(biāo)。
接下來是關(guān)鍵環(huán)節(jié):坐標(biāo)轉(zhuǎn)換和運(yùn)動(dòng)規(guī)劃。我創(chuàng)建了一個(gè)核心控制節(jié)點(diǎn),該節(jié)點(diǎn)訂閱由視覺節(jié)點(diǎn)發(fā)布的坐標(biāo)信息。接收到這些坐標(biāo)后,該節(jié)點(diǎn)會(huì)執(zhí)行一系列坐標(biāo)轉(zhuǎn)換,將目標(biāo)點(diǎn)從“相機(jī)坐標(biāo)系”轉(zhuǎn)換到“機(jī)械臂基坐標(biāo)系”。對(duì)于這個(gè)具有兩個(gè)自由度的機(jī)械臂,我使用了一個(gè)簡(jiǎn)單的幾何模型來進(jìn)行逆運(yùn)動(dòng)學(xué)計(jì)算,以確定所需的伺服角度,生成了一條平滑的軌跡,并最終通過 ROS 主題向伺服驅(qū)動(dòng)節(jié)點(diǎn)發(fā)布命令。我還編寫了一個(gè)簡(jiǎn)單的夾具控制服務(wù)來處理開合動(dòng)作。
第 3 步:讓功能“活”起來——三個(gè)逐步演示環(huán)節(jié)
在硬件和軟件都準(zhǔn)備就緒之后,我設(shè)計(jì)并實(shí)施了三個(gè)逐步復(fù)雜的場(chǎng)景,以全面測(cè)試該平臺(tái)的性能。
示例 1:靜態(tài)視覺抓取。這是基礎(chǔ)測(cè)試。當(dāng)“小狗板”保持靜止?fàn)顟B(tài)時(shí),我將紅色立方體放置在它前方的不同位置。啟動(dòng)程序后,它會(huì)用“頭部”(攝像頭)快速掃描,鎖定目標(biāo),然后機(jī)械臂會(huì)平穩(wěn)地在立方體上方移動(dòng)、下降、抓取并抬起。當(dāng)夾具穩(wěn)穩(wěn)地提起立方體的那一刻,我就知道整個(gè)感知控制流程已經(jīng)正常運(yùn)行了。
演示 2:自主搜索與運(yùn)輸。這是核心挑戰(zhàn)。我讓小狗機(jī)器人在一間小房間里自由移動(dòng),同時(shí)持續(xù)運(yùn)行視覺程序。當(dāng)攝像機(jī)在移動(dòng)過程中發(fā)現(xiàn)地板上的紅色立方體時(shí),程序會(huì)命令小狗機(jī)器人調(diào)整自身方向,并靠近該物體。到達(dá)最佳位置后,小狗機(jī)器人會(huì)暫停,執(zhí)行抓取動(dòng)作,然后規(guī)劃一條新的路徑,將立方體運(yùn)送到指定的“投放區(qū)”。這一過程完美地展示了完整的自主機(jī)器人循環(huán):“感知 - 決策 - 執(zhí)行 - 移動(dòng)”。
演示 3:簡(jiǎn)單的人機(jī)交互。為了增添趣味性,我利用了 PuppyPi 現(xiàn)有的多模態(tài)人工智能功能進(jìn)行了簡(jiǎn)單的集成。我擴(kuò)展了其語(yǔ)音功能,使得當(dāng)我說“拿起那個(gè)紅色的立方體”時(shí),語(yǔ)音識(shí)別會(huì)將指令轉(zhuǎn)換為文本,并通過 ROS 傳遞給主控制節(jié)點(diǎn),從而觸發(fā)整個(gè)搜索和抓取流程。這是一個(gè)初步演示,但有效地展示了高級(jí)自然語(yǔ)言指令如何能夠轉(zhuǎn)化為復(fù)雜的機(jī)器人任務(wù)。
第 4 步:挑戰(zhàn)、調(diào)試與優(yōu)化
沒有哪個(gè)項(xiàng)目是一帆風(fēng)順的。我遇到了幾個(gè)關(guān)鍵問題:首先,由于小狗電腦停止運(yùn)行時(shí)身體輕微晃動(dòng)導(dǎo)致抓取精度下降。我的解決辦法是在移動(dòng)后短暫進(jìn)行穩(wěn)定暫停,并讓視覺系統(tǒng)進(jìn)行多次快速位置讀取以進(jìn)行平均計(jì)算后再進(jìn)行抓取。其次,在多節(jié)點(diǎn)協(xié)調(diào)中出現(xiàn)了時(shí)間問題(例如,夾爪在手臂未處于正確位置時(shí)就閉合)。我使用 ROS 的 actionlib 庫(kù)對(duì)任務(wù)流程進(jìn)行了重構(gòu),將每個(gè)動(dòng)作(移動(dòng)、定位、抓取)都設(shè)為獨(dú)立的、可等待的動(dòng)作,并帶有反饋,從而形成了更清晰、更可靠的邏輯。
結(jié)論
通過這個(gè)項(xiàng)目,PuppyPi 從一個(gè)“演示平臺(tái)”轉(zhuǎn)變?yōu)榱艘豢钫嬲摹皠?chuàng)新平臺(tái)”。雖然這個(gè)兩自由度機(jī)械臂設(shè)計(jì)簡(jiǎn)單,但它所實(shí)現(xiàn)的自主移動(dòng)操作能力卻遠(yuǎn)超其各個(gè)組成部分的總和。這證明了在低成本的桌面級(jí)設(shè)備上實(shí)現(xiàn)復(fù)雜機(jī)器人應(yīng)用是可行的。
該項(xiàng)目的結(jié)束僅僅意味著更多想法的開始。你可以為夾具添加微型攝像頭,以實(shí)現(xiàn)精確的“手眼”視覺伺服;可以使用激光雷達(dá)地圖讓機(jī)器人記住物品通常存放的位置;甚至可以嘗試兩個(gè)“小狗板”單元協(xié)同工作來搬運(yùn)一個(gè)物體。PuppyPi 的開源生態(tài)系統(tǒng)和 ROS 支持為所有這些探索提供了堅(jiān)實(shí)的基礎(chǔ)。
我認(rèn)為最令人興奮的項(xiàng)目并非是使用那種封閉式的產(chǎn)品,而是要將一個(gè)開放平臺(tái)發(fā)揮到極致,從而創(chuàng)造出全新的事物。為“小狗板”添加一個(gè)擴(kuò)展臂的過程,正是這樣一種探索之旅。我迫不及待地想看到你們用它創(chuàng)造出什么樣的成果。
本文編譯自hackster.io





