器人視覺(jué)選型:ZED雙目立體視覺(jué)原理與落地實(shí)踐)
今年在幾個(gè)機(jī)器人的行業(yè)展會(huì)和閉門技術(shù)交流會(huì)上我注意到一個(gè)很有意思的現(xiàn)象國(guó)內(nèi)頭部人形機(jī)器人公司的原型機(jī)無(wú)論行走導(dǎo)航、抓取操作還是數(shù)據(jù)采集視覺(jué)感知模塊里高頻出現(xiàn)同款產(chǎn)品——友思特引入和集成的ZED立體視覺(jué)系統(tǒng)。這不是說(shuō)別家方案沒(méi)人用但在“第一梯隊(duì)”的原型機(jī)上它的出現(xiàn)頻次高得離譜。這篇文章就圍繞這套系統(tǒng)把我這些年實(shí)際接觸到的選型邏輯、原理拆解、落地場(chǎng)景和部署經(jīng)驗(yàn)一次講透。如果你正在做人形機(jī)器人、雙足機(jī)器人或機(jī)械臂視覺(jué)方案這篇內(nèi)容基本可以當(dāng)一套選型參考筆記來(lái)用。我會(huì)盡量少講廠商話術(shù)多講實(shí)際能落地的細(xì)節(jié)。1. 人形機(jī)器人視覺(jué)選型三個(gè)容易被忽視的硬約束1.1 視覺(jué)不是“配件”而是運(yùn)控閉環(huán)的感官層很多人形機(jī)器人團(tuán)隊(duì)早期容易把視覺(jué)系統(tǒng)當(dāng)成“一個(gè)能出深度圖的傳感器”覺(jué)得只要點(diǎn)云質(zhì)量好、幀率夠高就行。真正做進(jìn)去才發(fā)現(xiàn)視覺(jué)和人形運(yùn)動(dòng)控制之間的關(guān)系比想象中緊密得多。人形機(jī)器人是典型的高自由度系統(tǒng)雙足支撐、全身協(xié)調(diào)、機(jī)械臂操作都在同一個(gè)控制回路里跑。平衡控制器的工作頻率通常在500Hz到1kHz而視覺(jué)傳感器的輸出一般在15fps到30fps。也就是說(shuō)視覺(jué)不可能直接參與每個(gè)控制周期它是在更高層級(jí)給出“環(huán)境狀態(tài)估計(jì)”然后由運(yùn)動(dòng)規(guī)劃模塊把視覺(jué)信息轉(zhuǎn)換為實(shí)際動(dòng)作。這中間任何一個(gè)環(huán)節(jié)的延遲抖動(dòng)都會(huì)直接反映到機(jī)器人走路的穩(wěn)定性上。所以我選型時(shí)第一個(gè)看的技術(shù)指標(biāo)不是分辨率而是數(shù)據(jù)時(shí)間戳是否統(tǒng)一、輸出延遲是否可預(yù)測(cè)。ZED的SDK在這塊有個(gè)比較大的優(yōu)勢(shì)左右目圖像、深度圖、IMU數(shù)據(jù)都來(lái)自同一時(shí)鐘域時(shí)間戳對(duì)齊做得比較干凈而且深度計(jì)算放在GPU上完成延遲波動(dòng)小。對(duì)于做運(yùn)控的團(tuán)隊(duì)來(lái)說(shuō)這能少填很多坑。1.2 技術(shù)路線對(duì)比為什么是雙目而不是結(jié)構(gòu)光、ToF先看一張我當(dāng)時(shí)做選型對(duì)比時(shí)的梳理表基本覆蓋了當(dāng)前主流深度視覺(jué)方案的優(yōu)缺點(diǎn)。方案深度獲取方式典型優(yōu)勢(shì)典型問(wèn)題常見(jiàn)應(yīng)用單目靠算法估計(jì)尺度硬件簡(jiǎn)單便宜尺度不確定恢復(fù)真實(shí)尺寸難輕量感知結(jié)構(gòu)光投射紅外光斑分析形變近距離精度高、暗光可用強(qiáng)光下失效功耗高室外差人臉識(shí)別、手機(jī)ToF發(fā)射光并測(cè)量飛行時(shí)間直接測(cè)距響應(yīng)快分辨率偏低多機(jī)易互相干擾工業(yè)測(cè)距、AR雙目立體視覺(jué)左右圖像視差三角測(cè)距被動(dòng)感知、功耗低、室內(nèi)外均可低紋理和暗光環(huán)境需要輔助機(jī)器人、自動(dòng)駕駛雙目主動(dòng)光IMU立體匹配加主動(dòng)紋理投射和慣性融合全天候適應(yīng)性更好精度和魯棒性均衡結(jié)構(gòu)比純雙目復(fù)雜人形機(jī)器人、復(fù)雜移動(dòng)機(jī)器人從這張表能看出來(lái)單目最大的問(wèn)題是尺度不確定。對(duì)于人形機(jī)器人這種需要精確抓取、避障、建圖的場(chǎng)景不能判斷一個(gè)物體離自己到底是1米還是2米很多決策就無(wú)從談起。結(jié)構(gòu)光在手機(jī)人臉解鎖上表現(xiàn)很好但一到戶外強(qiáng)光下基本就廢了而且主動(dòng)投射的功耗對(duì)電池供電的移動(dòng)機(jī)器人不友好。ToF響應(yīng)快、直接測(cè)距但分辨率上不去兩個(gè)機(jī)器人同時(shí)在場(chǎng)還可能互相干擾。ZED走的路線是典型的雙目立體視覺(jué)增強(qiáng)版核心是兩個(gè)彩色相機(jī)做視差計(jì)算同時(shí)在部分型號(hào)上加入了IMU慣性單元和可選主動(dòng)光投射器。這個(gè)組合讓人形機(jī)器人在室內(nèi)外、強(qiáng)光弱光、紋理豐富和低紋理場(chǎng)景中都能保持一定的深度輸出能力這是它能被頭部企業(yè)反復(fù)采用的根本原因。1.3 頭部企業(yè)看中ZED的三個(gè)硬指標(biāo)第一點(diǎn)是精度和距離范圍的平衡。人形機(jī)器人既需要在幾米范圍內(nèi)導(dǎo)航避障也需要在幾十厘米范圍內(nèi)精確識(shí)別桌面物體。ZED系列在0.3米到5米這個(gè)區(qū)間內(nèi)的深度精度表現(xiàn)比較穩(wěn)定恰好覆蓋了人形機(jī)器人絕大多數(shù)操作場(chǎng)景。精度和距離范圍能不能同時(shí)滿足決定了視覺(jué)系統(tǒng)是做“眼睛”還是只能做“裝飾”。第二點(diǎn)是數(shù)據(jù)類型的豐富度。如果只是輸出深度圖那很多算法還是要自己寫。ZED的SDK里直接帶了深度圖、彩色點(diǎn)云、位置追蹤、目標(biāo)檢測(cè)、人體骨架識(shí)別等模塊而且這些數(shù)據(jù)是同步輸出的。這意味著開(kāi)發(fā)團(tuán)隊(duì)不需要把精力花在“怎么把傳感器數(shù)據(jù)變成可用的感知結(jié)果”上而是可以直接進(jìn)入“感知結(jié)果怎么接入運(yùn)控決策”的階段對(duì)整個(gè)項(xiàng)目周期的影響是數(shù)量級(jí)的。第三點(diǎn)是軟硬件生態(tài)的成熟度。機(jī)器人團(tuán)隊(duì)普遍在Linux環(huán)境下用ROS或ROS2做開(kāi)發(fā)ZED官方提供了比較完善的ROS包、Python和C接口友思特在國(guó)內(nèi)又做了二次封裝和本地化支持。這一點(diǎn)對(duì)工程化落地極其重要畢竟人形機(jī)器人公司要的是盡快做出穩(wěn)定的原型而不是從零調(diào)試一個(gè)沒(méi)人維護(hù)的開(kāi)源驅(qū)動(dòng)。2. ZED深度感知的原理視差如何變成機(jī)器人能用的數(shù)據(jù)2.1 從視差到深度三角測(cè)量的直覺(jué)理解我先用大白話解釋一下雙目測(cè)距。人的兩只眼睛之間有距離所以看同一個(gè)物體時(shí)兩只眼睛看到的畫面視角略有差異這就是“視差”。物體離得越近左右眼看到的偏移越大離得越遠(yuǎn)偏移越小。人腦就是靠這個(gè)差異判斷距離的。ZED相機(jī)本質(zhì)上就是把這個(gè)過(guò)程數(shù)字化。它的兩個(gè)鏡頭之間的水平距離是固定的叫作基線。兩個(gè)鏡頭同時(shí)拍下左右兩張圖像然后通過(guò)立體匹配算法找到兩張圖里的對(duì)應(yīng)像素點(diǎn)計(jì)算它們?cè)谒椒较蛏系淖鴺?biāo)差這個(gè)坐標(biāo)差就是視差值。有了視差值再結(jié)合標(biāo)定過(guò)的相機(jī)內(nèi)參和基線長(zhǎng)度就可以用三角測(cè)距公式算出每個(gè)像素對(duì)應(yīng)的實(shí)際深度。這里面最關(guān)鍵的是立體匹配算法。ZED內(nèi)部用的是半全局匹配這一類方法簡(jiǎn)單說(shuō)就是對(duì)圖像上每個(gè)像素不只單獨(dú)找一個(gè)匹配點(diǎn)還會(huì)考慮周圍鄰域的紋理信息通過(guò)一個(gè)平滑項(xiàng)來(lái)抑制誤匹配。這樣做的好處是深度圖的邊界更清晰、空洞更少壞處是計(jì)算量上去了所以ZED會(huì)把這部分計(jì)算放在GPU上做。在機(jī)器人上這套流程的好處是傳感器端只輸出圖像剩下的計(jì)算全在本地算力上完成數(shù)據(jù)鏈路短便于做系統(tǒng)集成。2.2 雙目的軟肋在哪里低紋理、暗光與快速旋轉(zhuǎn)雙目視覺(jué)不是萬(wàn)能的它的兩個(gè)天然軟肋是低紋理和快速運(yùn)動(dòng)。低紋理指的是畫面里的物體表面太單調(diào)比如一面白墻、一塊純色地面、一個(gè)沒(méi)有圖案的紙箱。立體匹配算法找不到足夠的特征點(diǎn)來(lái)對(duì)應(yīng)左右圖深度圖就會(huì)有大片空洞。很多團(tuán)隊(duì)第一次拿到ZED在實(shí)驗(yàn)室里對(duì)著白墻測(cè)發(fā)現(xiàn)深度圖一片黑就開(kāi)始懷疑相機(jī)壞了。其實(shí)不是這就是雙目方案的物理邊界。針對(duì)這個(gè)問(wèn)題ZED部分型號(hào)加入了主動(dòng)光投射器會(huì)在畫面里投射肉眼不易察覺(jué)的紅外紋理斑塊。表面太單調(diào)的白墻有了這些人工紋理立體匹配就有了依據(jù)深度圖就能補(bǔ)上空洞。這個(gè)功能和結(jié)構(gòu)光不同它不主動(dòng)測(cè)量光的飛行時(shí)間只是“幫助雙目看見(jiàn)紋理”所以功耗比結(jié)構(gòu)光低得多??焖傩D(zhuǎn)的場(chǎng)合也有問(wèn)題。相機(jī)快速轉(zhuǎn)頭時(shí)前后兩幀圖像的重疊區(qū)域很小視覺(jué)位置追蹤容易丟失。ZED把IMU數(shù)據(jù)融合進(jìn)來(lái)后旋轉(zhuǎn)過(guò)程中的角速度和加速度變化可以被連續(xù)跟蹤即使視覺(jué)暫時(shí)丟失也能用IMU數(shù)據(jù)把狀態(tài)估計(jì)撐住短時(shí)間內(nèi)重新找回視覺(jué)。對(duì)人形機(jī)器人來(lái)說(shuō)轉(zhuǎn)頭觀察環(huán)境、彎腰、快速轉(zhuǎn)身都是常見(jiàn)動(dòng)作這個(gè)融合能力直接影響視覺(jué)系統(tǒng)的可用性。2.3 SDK輸出的“開(kāi)箱即用”感知層ZED的SDK在機(jī)器人開(kāi)發(fā)者里口碑不錯(cuò)很大程度上是因?yàn)樗押芏喔兄惴ㄖ苯臃庋b好了。拿到相機(jī)、裝好SDK幾行代碼就能拿到對(duì)齊的深度圖和彩色點(diǎn)云這讓很多團(tuán)隊(duì)前期做原型驗(yàn)證時(shí)省掉了大量重復(fù)造輪子的工作。除了深度圖和點(diǎn)云SDK還內(nèi)置了幾個(gè)對(duì)機(jī)器人非常關(guān)鍵的模塊位置追蹤輸出相機(jī)在空間中的六自由度位姿也就是位置加旋轉(zhuǎn)可以直接當(dāng)視覺(jué)里程計(jì)用。區(qū)域感知做物體檢測(cè)和位置識(shí)別適合固定物體的語(yǔ)義定位。人體骨架追蹤檢測(cè)人的關(guān)鍵點(diǎn)輸出多人的人體姿態(tài)數(shù)據(jù)適合交互類和數(shù)據(jù)采集場(chǎng)景??臻g映射實(shí)時(shí)建立環(huán)境的三維網(wǎng)格地圖適合導(dǎo)航和避障。這幾個(gè)模塊在后續(xù)落地章節(jié)里都會(huì)講到。關(guān)鍵點(diǎn)在于這些數(shù)據(jù)是同一套SDK統(tǒng)一輸出時(shí)間戳對(duì)齊這就避免了一個(gè)常見(jiàn)的工程悲劇——深度圖、點(diǎn)云、位姿各自為政融合的時(shí)候?qū)Σ簧蠒r(shí)間。3. 四個(gè)典型落地場(chǎng)景ZED在機(jī)器人上到底做什么3.1 雙足/四足導(dǎo)航避障點(diǎn)云密度帶來(lái)的感知優(yōu)勢(shì)人形機(jī)器人在室內(nèi)環(huán)境里移動(dòng)遇到的不只是桌子椅子這種大體量障礙。地面上的線纜、突出桌沿的鍵盤、半開(kāi)的抽屜、墻壁上凸出的開(kāi)關(guān)面板這些都是在人員生活環(huán)境中真正會(huì)絆倒機(jī)器人的東西。傳統(tǒng)移動(dòng)機(jī)器人常用的單線激光雷達(dá)只能感知一個(gè)平面高度的障礙遇到線纜和懸空物體基本沒(méi)轍。ZED這種雙目視覺(jué)的優(yōu)勢(shì)在于能輸出稠密的三維點(diǎn)云相當(dāng)于對(duì)前方整個(gè)空間做了立體掃描。機(jī)器人拿到點(diǎn)云后可以投影成柵格代價(jià)地圖也能直接跑三維避障算法。實(shí)際項(xiàng)目中我們一般會(huì)對(duì)點(diǎn)云做個(gè)距離裁剪只保留0.2米到4米范圍內(nèi)的點(diǎn)太近的是盲區(qū)太遠(yuǎn)的有噪聲裁剪之后對(duì)運(yùn)行效率也有幫助。部署時(shí)還有一個(gè)細(xì)節(jié)幀率不一定非要拉滿。導(dǎo)航避障場(chǎng)景對(duì)單幀深度的絕對(duì)準(zhǔn)確性要求不是最高但對(duì)連續(xù)性要求很高。我們一般建議跑15fps左右配合一個(gè)中值濾波深度圖會(huì)更穩(wěn)。如果幀率拉得太高算力占用上去了深度圖反而會(huì)因?yàn)榭D出現(xiàn)一幀一幀的跳變導(dǎo)航表現(xiàn)并不好。3.2 機(jī)械臂抓取從“看見(jiàn)目標(biāo)”到“算準(zhǔn)抓點(diǎn)”機(jī)械臂抓取是人形機(jī)器人看得見(jiàn)、摸得著的核心技能。這里視覺(jué)系統(tǒng)要回答兩個(gè)問(wèn)題目標(biāo)物體在空間中的三維坐標(biāo)是多少機(jī)械臂用什么姿態(tài)去抓最合適先說(shuō)三維坐標(biāo)。ZED輸出的是相對(duì)于相機(jī)坐標(biāo)系的深度值要變成機(jī)械臂能用的坐標(biāo)必須先做手眼標(biāo)定。簡(jiǎn)單說(shuō)手眼標(biāo)定就是求出相機(jī)坐標(biāo)系和機(jī)械臂基座坐標(biāo)系之間的變換關(guān)系。標(biāo)定方法不復(fù)雜讓機(jī)械臂帶著標(biāo)定板走幾個(gè)位姿采集多組數(shù)據(jù)解一個(gè)變換矩陣就行。友思特在實(shí)際項(xiàng)目中會(huì)直接幫客戶跑標(biāo)定流程因?yàn)檫@一步做不好后續(xù)抓取精度就全是空中樓閣。再具體一點(diǎn)目標(biāo)放在桌面上距離相機(jī)大約半米到一米ZED計(jì)算出的物體中心點(diǎn)三維坐標(biāo)配合機(jī)械臂的運(yùn)動(dòng)規(guī)劃能穩(wěn)定抓起杯子、工具箱、水壺這類常見(jiàn)物體。需要提醒的是雙目深度在幾十厘米的近距段精度不錯(cuò)但不可能達(dá)到工業(yè)激光位移傳感器的微米級(jí)水平。所以機(jī)械臂抓取通常要做成閉環(huán)先用ZED做粗略定位機(jī)械臂靠近后用末端觸覺(jué)或者再次視覺(jué)伺服來(lái)微調(diào)這也是人形機(jī)器人領(lǐng)域的主流方案。3.3 視覺(jué)慣性SLAM無(wú)GPS環(huán)境的建圖與定位人形機(jī)器人要在室內(nèi)環(huán)境里長(zhǎng)時(shí)間工作就必須解決“我在哪”的問(wèn)題。ZED的位置追蹤模塊輸出的是相機(jī)自身的六自由度位姿這套輸出就是視覺(jué)里程計(jì)。把它和IMU數(shù)據(jù)做融合就變成了視覺(jué)慣性里程計(jì)能在GPS無(wú)效的室內(nèi)環(huán)境中持續(xù)估算機(jī)器人的位置和姿態(tài)。實(shí)際使用中雙足機(jī)器人的步態(tài)對(duì)視覺(jué)SLAM提出了一個(gè)獨(dú)特挑戰(zhàn)每一步落地都會(huì)帶來(lái)垂直方向的顛簸和前后方向的晃動(dòng)。純視覺(jué)SLAM在這種運(yùn)動(dòng)模式下容易累積漂移也就是走了幾圈之后地圖和實(shí)際位置對(duì)不上。有了IMU融合高頻的加速度和角速度變化能被及時(shí)感知配合視覺(jué)特征的長(zhǎng)時(shí)跟蹤漂移會(huì)明顯變小。如果機(jī)器人要走大范圍環(huán)境建議把ZED的位置追蹤數(shù)據(jù)和輪式里程計(jì)如果有的話再做一次融合或者用圖優(yōu)化方式做全局回環(huán)修正?;丨h(huán)檢測(cè)的意義在于當(dāng)機(jī)器人繞了一圈重新回到起點(diǎn)時(shí)能識(shí)別出“我看到了之前來(lái)過(guò)的場(chǎng)景”然后把累積的軌跡誤差一次性修正掉。3.4 人體姿態(tài)追蹤與數(shù)據(jù)采集訓(xùn)練數(shù)據(jù)從哪來(lái)人形機(jī)器人做得越深入越避不開(kāi)一個(gè)話題運(yùn)動(dòng)數(shù)據(jù)從哪里來(lái)。傳統(tǒng)做法是讓真人穿動(dòng)捕服在特定的動(dòng)捕棚里進(jìn)行動(dòng)作采集效率低、場(chǎng)地貴。越來(lái)越多的團(tuán)隊(duì)開(kāi)始嘗試用視覺(jué)方法直接提取人體關(guān)鍵點(diǎn)ZED的Body Tracking模塊可以輸出人體主要關(guān)節(jié)的三維坐標(biāo)和角度不需要穿戴設(shè)備在普通的辦公室環(huán)境里就能采集數(shù)據(jù)。這個(gè)模塊的實(shí)際玩法很多一是做跟隨讓機(jī)器人通過(guò)視覺(jué)鎖定一個(gè)人保持安全距離跟隨移動(dòng)二是做主從遙操作操作員在旁邊做動(dòng)作ZED識(shí)別出人體骨架機(jī)器人映射執(zhí)行三是做數(shù)據(jù)記錄把操作員的一系列動(dòng)作當(dāng)作示范數(shù)據(jù)存下來(lái)后續(xù)用于模仿學(xué)習(xí)訓(xùn)練。我自己印象很深的一次測(cè)試是在一個(gè)不夠明亮的車間里做人體追蹤因?yàn)楣饩€偏暗一開(kāi)始漏檢很明顯。后來(lái)把相機(jī)曝光模式調(diào)成固定曝光而不是自動(dòng)曝光再把主動(dòng)光打開(kāi)骨架穩(wěn)定度立刻上來(lái)了。這個(gè)細(xì)節(jié)后面會(huì)細(xì)講。另外提醒一點(diǎn)人體骨架數(shù)據(jù)涉及個(gè)人隱私在辦公環(huán)境或公共區(qū)域使用時(shí)要評(píng)估合規(guī)要求最好在采集前做好必要的流程管理。4. 部署實(shí)戰(zhàn)裝了ZED之后必須處理的四個(gè)問(wèn)題4.1 強(qiáng)光、玻璃和低紋理深度圖花掉怎么辦把ZED裝到機(jī)器人上之后第一個(gè)“見(jiàn)面禮”往往就是深度圖各種花。最常見(jiàn)的是從室內(nèi)走到窗邊陽(yáng)光直射進(jìn)來(lái)深度圖上出現(xiàn)大片閃爍或空洞。很多團(tuán)隊(duì)第一反應(yīng)是“這個(gè)相機(jī)不行”其實(shí)這更多是參數(shù)沒(méi)調(diào)對(duì)。應(yīng)對(duì)強(qiáng)光我一般建議首先把相機(jī)的曝光模式從自動(dòng)改為固定曝光或者限制曝光范圍。自動(dòng)曝光會(huì)隨著環(huán)境亮度快速變化導(dǎo)致連續(xù)幾幀的畫面亮度跳變立體匹配算法在這種輸入下很容易產(chǎn)生不穩(wěn)定的深度值。固定曝光之后畫面的明暗變化變緩深度輸出反而穩(wěn)定很多。玻璃、鏡面、透明水瓶這種半透光材質(zhì)對(duì)任何視覺(jué)方案都是難題ZED也不例外。這些表面會(huì)讓雙目看到的內(nèi)容不一致深度值算不準(zhǔn)或者干脆輸出空洞。我的做法是在算法層面先識(shí)別這類區(qū)域把不可用的深度點(diǎn)標(biāo)記為未知而不是硬塞一個(gè)錯(cuò)誤值給下游。下游的避障和抓取算法對(duì)“這里不可知”的容忍度遠(yuǎn)高于“這里有個(gè)錯(cuò)誤的障礙物”。低紋理的解決方式前面提過(guò)用主動(dòng)光輔助。一個(gè)容易忽略的地方是主動(dòng)光的實(shí)際投射范圍有限近處效果好遠(yuǎn)了效果遞減。所以如果你的機(jī)器人需要感知兩三米外的白墻或純色地面別指望主動(dòng)光能完全解決還是要靠算法層面對(duì)低紋理區(qū)域的濾波和預(yù)測(cè)。4.2 安裝位置與震動(dòng)頭部還是胸前ZED裝在人形機(jī)器人的哪個(gè)位置是個(gè)容易被低估的問(wèn)題。裝頭部視場(chǎng)跟隨著頭部轉(zhuǎn)動(dòng)感知靈活但頭部質(zhì)量增加會(huì)影響頸部關(guān)節(jié)的負(fù)載和控制裝胸前視野固定朝前比較穩(wěn)定但轉(zhuǎn)身時(shí)視覺(jué)感知會(huì)有延遲。從我們接觸過(guò)的項(xiàng)目看人形機(jī)器人頭部安裝的前期少后期越來(lái)越多。頭部安裝的最大好處是視覺(jué)可以跟著頭部轉(zhuǎn)動(dòng)做主動(dòng)感知這與人的行為模式一致。但要注意ZED的雙目基線在不同型號(hào)上是固定的安裝位置只能開(kāi)孔和固定支架調(diào)整選型時(shí)就要想好視野朝向和遮擋問(wèn)題。震動(dòng)是另一個(gè)大坑。雙足機(jī)器人正常行走時(shí)機(jī)身始終處于微震動(dòng)狀態(tài)頻率還不低。如果相機(jī)固定得太“硬”震動(dòng)會(huì)直接傳到IMU上導(dǎo)致姿態(tài)估計(jì)出現(xiàn)毛刺。我們?cè)趯?shí)際項(xiàng)目中給相機(jī)加了減震墊再?gòu)陌惭b設(shè)計(jì)上避開(kāi)與機(jī)身的共振頻率位置追蹤的輸出明顯平滑了很多。另外機(jī)器人在實(shí)驗(yàn)室放了一夜之后IMU的零偏會(huì)變化建議每次開(kāi)機(jī)做一次靜態(tài)初始化校準(zhǔn)讓IMU水平放置幾秒鐘再開(kāi)始工作。4.3 算力分配在有限算力上跑出穩(wěn)定幀率人形機(jī)器人機(jī)載算力通常不會(huì)太寬裕。深度計(jì)算和感知推理要跑運(yùn)動(dòng)控制也要跑還得分資源給導(dǎo)航和決策模塊。如何讓ZED在擠出來(lái)的算力里跑得又穩(wěn)又好是每個(gè)項(xiàng)目都要面對(duì)的現(xiàn)實(shí)問(wèn)題。我的建議是先降分辨率再降幀率最后降深度范圍。ZED在低分辨率模式下依然能提供可用深度圖而分辨率降低之后立體匹配的計(jì)算量呈二次方下降GPU占用會(huì)明顯減少。然后根據(jù)場(chǎng)景需求限制幀率導(dǎo)航避障15fps通常夠用抓取場(chǎng)景可以放到30fps沒(méi)必要全程跑最高幀率。深度范圍裁剪也很重要如果你只關(guān)心眼前五米內(nèi)的物體就把最大深度限制在五米不處理遠(yuǎn)處的點(diǎn)既能降低計(jì)算量也能減少遠(yuǎn)處噪聲對(duì)深度圖的干擾。還有一個(gè)工程層面的建議視覺(jué)處理要在獨(dú)立線程里跑用隊(duì)列緩沖最新一幀不要讓下游算法因?yàn)樘幚聿贿^(guò)來(lái)而阻塞相機(jī)采集。人形機(jī)器人控制端的實(shí)時(shí)性要求高視覺(jué)線程和控制線程分離是基本操作。另外長(zhǎng)時(shí)間運(yùn)行后注意GPU溫度。機(jī)器人外殼密閉性好的話溫度會(huì)慢慢升高過(guò)了某個(gè)閾值之后有些型號(hào)會(huì)主動(dòng)降頻表現(xiàn)為深度圖幀率突然掉一半。這個(gè)要在項(xiàng)目早期就做好散熱預(yù)留。4.4 長(zhǎng)期運(yùn)行穩(wěn)定性連續(xù)開(kāi)機(jī)與熱漂移機(jī)器人不是實(shí)驗(yàn)室里拍幾張圖就關(guān)機(jī)的設(shè)備而是要連續(xù)運(yùn)行幾小時(shí)甚至更久的工程系統(tǒng)。連續(xù)開(kāi)機(jī)之后相機(jī)本身和機(jī)載算力都會(huì)發(fā)熱溫度變化會(huì)導(dǎo)致鏡頭結(jié)構(gòu)產(chǎn)生微小的熱變形進(jìn)而影響標(biāo)定參數(shù)。這個(gè)變化平時(shí)感覺(jué)不到但對(duì)于抓取精度要求高的場(chǎng)景誤差會(huì)逐漸累積。我們現(xiàn)在的做法是項(xiàng)目交付時(shí)在自動(dòng)啟動(dòng)腳本里加一個(gè)深度質(zhì)量自檢模塊每隔一段時(shí)間記錄一次深度圖的空洞率、平均噪聲水平并和初始基線對(duì)比。一旦發(fā)現(xiàn)質(zhì)量指標(biāo)持續(xù)下降就提示人工介入重新標(biāo)定。這套機(jī)制不能完全替代標(biāo)定但至少能把“相機(jī)悄悄變差”這件事暴露出來(lái)而不是讓機(jī)器人在錯(cuò)誤感知下繼續(xù)工作。5. 友思特做的那層“最后一公里”集成5.1 為什么直接買裸相機(jī)容易卡在“最后一公里”ZED相機(jī)本身是一個(gè)成熟的硬件產(chǎn)品但從“相機(jī)”變成“裝進(jìn)人形機(jī)器人里穩(wěn)定運(yùn)行的視覺(jué)系統(tǒng)”中間還有不小的距離。裸相機(jī)拿回來(lái)會(huì)發(fā)現(xiàn)供電接口要自己做安裝支架要自己設(shè)計(jì)線纜長(zhǎng)度要自己規(guī)劃防護(hù)外殼要根據(jù)機(jī)器人外觀定制更別提標(biāo)定流程和驅(qū)動(dòng)適配這些看不見(jiàn)的活兒。友思特在這套生態(tài)里扮演的角色可以理解為一個(gè)視覺(jué)系統(tǒng)的“正向集成商”。它不只是賣相機(jī)而是圍繞ZED做了一整套面向機(jī)器人行業(yè)的交付能力會(huì)根據(jù)機(jī)器人的安裝空間、供電環(huán)境、運(yùn)行工況來(lái)選型會(huì)針對(duì)具體項(xiàng)目做結(jié)構(gòu)件的定制設(shè)計(jì)會(huì)把采樣代碼封裝成更貼近機(jī)器人業(yè)務(wù)的接口會(huì)在客戶現(xiàn)場(chǎng)做完整的標(biāo)定和調(diào)試。很多團(tuán)隊(duì)最開(kāi)始也想自己全部搞定最后基本都會(huì)回歸到“專業(yè)的事交給專業(yè)的人”。尤其是當(dāng)下人形機(jī)器人項(xiàng)目節(jié)奏非常緊與其花一個(gè)工程師一個(gè)月去研究相機(jī)適配不如把這部分時(shí)間省下來(lái)投入到算法和運(yùn)控上。5.2 一套完整視覺(jué)系統(tǒng)的交付清單根據(jù)我們和友思特合作的十幾個(gè)項(xiàng)目經(jīng)驗(yàn)一套完整的人形機(jī)器人視覺(jué)系統(tǒng)交付通常至少包含這些內(nèi)容相機(jī)硬件及配套的固定支架、減震件、連接線纜完成內(nèi)外參標(biāo)定的相機(jī)附上標(biāo)定報(bào)告和測(cè)試數(shù)據(jù)適配目標(biāo)機(jī)載平臺(tái)Jetson或工控機(jī)的驅(qū)動(dòng)和SDK環(huán)境針對(duì)機(jī)器人場(chǎng)景封裝的示例工程包括深度圖獲取、點(diǎn)云顯示、位置追蹤、手眼標(biāo)定工具現(xiàn)場(chǎng)部署調(diào)試包括安裝位置驗(yàn)證、震動(dòng)測(cè)試、光照適應(yīng)調(diào)參對(duì)算法和運(yùn)控團(tuán)隊(duì)的培訓(xùn)確保他們能自主二次開(kāi)發(fā)。這個(gè)清單做得好不好直接決定了交付之后團(tuán)隊(duì)能不能順暢迭代。很多項(xiàng)目視覺(jué)方案前期“能用”后期迭代慢問(wèn)題往往不是相機(jī)本身而是缺少一個(gè)清晰的交付邊界和配套支持。5.3 按機(jī)器人類型選型不同代號(hào)型號(hào)怎么搭ZED家族不同型號(hào)在體積、功耗、防護(hù)等級(jí)、接口上差異不小選型不能只看參數(shù)要結(jié)合機(jī)器人的形態(tài)和用途。型號(hào)定位特點(diǎn)適合場(chǎng)景ZED系列基礎(chǔ)款雙目光學(xué)核心深度范圍較寬早期的研究驗(yàn)證、算法原型開(kāi)發(fā)ZED 2/2i內(nèi)置IMU、主動(dòng)光工業(yè)版帶防護(hù)外殼需要視覺(jué)慣性融合的完整人形機(jī)器人原型ZED Mini體積緊湊、質(zhì)量輕對(duì)頭部重量敏感的機(jī)器人裝在頭部或手臂端ZED X更緊湊的模塊化工裝設(shè)計(jì)量產(chǎn)傾向的原型、嵌入式集成要求高的場(chǎng)景對(duì)人形機(jī)器人整機(jī)來(lái)說(shuō)一般建議主力原型機(jī)選ZED 2i這類集成度高的型號(hào)IMU和主動(dòng)光都有能應(yīng)對(duì)更多真實(shí)環(huán)境。如果只是放在桌面上做近距離機(jī)械臂操作測(cè)試ZED Mini這種小體積的反而更匹配裝在機(jī)械臂末端更容易做近距離視覺(jué)伺服。如果到了小批量生產(chǎn)階段傾向于模塊化、接口靈活的型號(hào)方便嵌入機(jī)器人本體結(jié)構(gòu)。選型的時(shí)候還要想好算力平臺(tái)。ZED的深度計(jì)算在GPU上做NVIDIA Jetson系列是市面上最主流的選擇友思特在交付時(shí)會(huì)直接適配好Jetson平臺(tái)的驅(qū)動(dòng)環(huán)境和性能參數(shù)不用自己再折騰。最后分享一個(gè)我自己的實(shí)際經(jīng)驗(yàn)。ZED有一個(gè)SVO錄制功能可以把相機(jī)采集的圖像和IMU數(shù)據(jù)全程錄下來(lái)然后在電腦上離線回放。強(qiáng)烈建議一切項(xiàng)目在裝車之前先拿相機(jī)到機(jī)器人實(shí)際運(yùn)行的現(xiàn)場(chǎng)用SVO錄制幾段不同角度、不同光線的素材回去慢慢調(diào)算法。這個(gè)文件不大但包含的信息量非常全。很多時(shí)候不是相機(jī)不行而是現(xiàn)場(chǎng)光線、遮擋、紋理狀況沒(méi)有在部署前被充分發(fā)現(xiàn)。先錄后裝省下來(lái)的調(diào)試時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)錄制那點(diǎn)時(shí)間。這套工作流是我在所有ZED項(xiàng)目里都堅(jiān)持先做的一步。