莓采摘機(jī)器人嵌入式系統(tǒng)設(shè)計(jì):從視覺識(shí)別到力控采摘的工程實(shí)踐)
1. 從賽題到落地藍(lán)莓采摘機(jī)器人到底在考什么第一次看到“藍(lán)莓采摘機(jī)器人”這個(gè)賽題方向時(shí)我腦子里蹦出來的第一個(gè)念頭是這不就是個(gè)機(jī)械臂加個(gè)攝像頭的事嗎但真正把任務(wù)書翻來覆去讀了三遍、又去查了一圈藍(lán)莓種植的農(nóng)藝資料之后我才意識(shí)到自己把問題想得太簡(jiǎn)單了。藍(lán)莓這種作物果實(shí)直徑普遍在12到18毫米之間成熟期不一致同一簇果子里可能有的已經(jīng)紫得發(fā)黑、有的還是青綠色而且果皮極薄、表面還有一層天然果粉稍微用力一捏就破漿。這意味著采摘機(jī)器人要解決的核心問題不是“能不能摘”而是“怎么在不傷果的前提下準(zhǔn)確判斷哪顆該摘、哪顆不該摘并且用恰到好處的力度把它取下來”。這個(gè)賽題之所以被放在嵌入式芯片與系統(tǒng)設(shè)計(jì)的框架下是因?yàn)樗烊皇且粋€(gè)多學(xué)科交叉的嵌入式系統(tǒng)工程視覺識(shí)別需要算力機(jī)械臂控制需要實(shí)時(shí)性末端執(zhí)行器需要精細(xì)的力控整機(jī)還需要在田間地頭的非結(jié)構(gòu)化環(huán)境里穩(wěn)定運(yùn)行。瑞薩作為出題方其RA系列MCU和RZ系列MPU的產(chǎn)品線正好覆蓋了從實(shí)時(shí)控制到邊緣視覺的完整需求譜系。換句話說這個(gè)賽題不是在考你“會(huì)不會(huì)用某個(gè)芯片”而是在考你“能不能把一個(gè)真實(shí)的農(nóng)業(yè)場(chǎng)景拆解成感知、決策、執(zhí)行三層然后用嵌入式系統(tǒng)把它們串起來”。我后來跟幾個(gè)做過類似項(xiàng)目的朋友聊發(fā)現(xiàn)大家踩的坑出奇地一致視覺模型在實(shí)驗(yàn)室里識(shí)別率能到95%一到實(shí)際場(chǎng)景就掉到60%以下機(jī)械臂在空載時(shí)定位精度能到±1毫米一裝上末端執(zhí)行器就抖得沒法看最要命的是藍(lán)莓果實(shí)太輕了普通的力傳感器根本感知不到采摘時(shí)的阻力變化等發(fā)現(xiàn)力值異常的時(shí)候果子已經(jīng)爛了。這些問題都不是單純靠調(diào)參能解決的它們指向的是系統(tǒng)設(shè)計(jì)層面的根本性取舍。所以這篇文章我想做的事情是把這個(gè)賽題從“題目”還原成“工程問題”把那些在任務(wù)書里不會(huì)寫、但在實(shí)際操作中一定會(huì)遇到的細(xì)節(jié)攤開來聊。無論你是正在準(zhǔn)備這個(gè)賽題的學(xué)生還是對(duì)農(nóng)業(yè)機(jī)器人感興趣的嵌入式開發(fā)者我都希望這些內(nèi)容能幫你少走一些彎路。我會(huì)從系統(tǒng)架構(gòu)的頂層設(shè)計(jì)開始逐步深入到視覺方案選型、機(jī)械臂控制策略、末端執(zhí)行器設(shè)計(jì)、以及整機(jī)聯(lián)調(diào)時(shí)的各種坑最后再聊聊在瑞薩平臺(tái)上做開發(fā)的一些具體經(jīng)驗(yàn)。2. 系統(tǒng)架構(gòu)的頂層設(shè)計(jì)感知、決策、執(zhí)行怎么分2.1 為什么不能把所有事情都交給一個(gè)芯片很多隊(duì)伍在拿到賽題后的第一反應(yīng)是選一顆性能最強(qiáng)的芯片然后把視覺、控制、通信全部塞進(jìn)去。這個(gè)思路在Demo階段可能跑得通但一旦進(jìn)入實(shí)際調(diào)試就會(huì)暴露出嚴(yán)重問題。視覺推理是一個(gè)計(jì)算密集但實(shí)時(shí)性要求相對(duì)寬松的任務(wù)一幀圖像處理花50毫秒還是80毫秒對(duì)采摘節(jié)拍的影響遠(yuǎn)沒有想象中那么大但機(jī)械臂的關(guān)節(jié)控制是硬實(shí)時(shí)任務(wù)控制周期通常要求在1毫秒以內(nèi)抖動(dòng)超過200微秒就可能導(dǎo)致機(jī)械臂抖動(dòng)甚至失穩(wěn)。把這兩個(gè)任務(wù)放在同一顆芯片上操作系統(tǒng)調(diào)度稍微一忙控制環(huán)路就會(huì)被打斷。我在實(shí)際項(xiàng)目中見過最典型的翻車場(chǎng)景是視覺線程在做圖像預(yù)處理時(shí)占滿了內(nèi)存帶寬導(dǎo)致控制線程的PWM輸出出現(xiàn)周期性抖動(dòng)機(jī)械臂在慢速移動(dòng)時(shí)看起來沒問題一旦加速就開始畫龍。這種問題在實(shí)驗(yàn)室里很難復(fù)現(xiàn)因?yàn)閷?shí)驗(yàn)室的負(fù)載是可控的但比賽現(xiàn)場(chǎng)的光照變化、背景干擾都會(huì)讓視覺處理時(shí)間變得不可預(yù)測(cè)。所以我的建議是采用“主控協(xié)處理”的異構(gòu)架構(gòu)。主控負(fù)責(zé)視覺推理、路徑規(guī)劃和任務(wù)調(diào)度協(xié)處理器專門負(fù)責(zé)機(jī)械臂的實(shí)時(shí)控制。兩者之間通過高速串口或SPI通信主控把目標(biāo)果實(shí)的位置坐標(biāo)發(fā)給協(xié)處理器協(xié)處理器自己完成逆運(yùn)動(dòng)學(xué)解算和軌跡插補(bǔ)。這樣即使視覺處理出現(xiàn)偶發(fā)的延遲控制環(huán)路依然能保持穩(wěn)定。2.2 瑞薩平臺(tái)上的選型邏輯瑞薩的產(chǎn)品線里RA系列MCU基于Arm Cortex-M內(nèi)核主打?qū)崟r(shí)控制和低功耗RA8系列甚至集成了Helium矢量擴(kuò)展可以做一些輕量級(jí)的神經(jīng)網(wǎng)絡(luò)推理。RZ系列MPU則基于Cortex-A內(nèi)核主頻更高、外設(shè)更豐富適合跑Linux和完整的視覺 pipeline。對(duì)于這個(gè)賽題一個(gè)比較務(wù)實(shí)的組合是RZ/G系列或RZ/V系列作為視覺主控RA系列作為運(yùn)動(dòng)協(xié)處理器。RZ/V系列特別值得關(guān)注因?yàn)樗鼉?nèi)置了DRP-AI加速器可以在低功耗下實(shí)現(xiàn)實(shí)時(shí)圖像處理。藍(lán)莓識(shí)別本質(zhì)上是一個(gè)小目標(biāo)檢測(cè)問題輸入分辨率不需要太高640×480足夠但要求幀率穩(wěn)定在15fps以上否則機(jī)械臂等待時(shí)間過長(zhǎng)會(huì)影響采摘效率。DRP-AI在這種場(chǎng)景下的能效比相當(dāng)可觀而且瑞薩提供了完整的模型轉(zhuǎn)換工具鏈可以把ONNX或PyTorch訓(xùn)練的模型量化后部署上去。RA系列這邊我建議選擇帶FPU和高級(jí)定時(shí)器的型號(hào)比如RA6M5或RA8M1。高級(jí)定時(shí)器可以輸出多路互補(bǔ)PWM直接驅(qū)動(dòng)機(jī)械臂的舵機(jī)或步進(jìn)電機(jī)驅(qū)動(dòng)器FPU則用于逆運(yùn)動(dòng)學(xué)解算中的三角函數(shù)運(yùn)算。如果預(yù)算允許盡量選帶以太網(wǎng)或CAN-FD的型號(hào)這樣主控和協(xié)處理器之間的通信會(huì)更可靠。2.3 通信協(xié)議的設(shè)計(jì)細(xì)節(jié)主控和協(xié)處理器之間的通信協(xié)議看起來簡(jiǎn)單實(shí)際上很容易出問題。我見過不少隊(duì)伍直接用ASCII字符串發(fā)坐標(biāo)比如“X123.4Y56.7Z89.0”這種方案在調(diào)試時(shí)很方便但實(shí)際運(yùn)行時(shí)解析開銷大、抗干擾能力差。更穩(wěn)妥的做法是定義二進(jìn)制幀格式包含幀頭、長(zhǎng)度、命令字、數(shù)據(jù)載荷和校驗(yàn)和。具體來說我通常會(huì)這樣設(shè)計(jì)幀頭用兩個(gè)字節(jié)的固定值比如0xAA55長(zhǎng)度字段一個(gè)字節(jié)表示數(shù)據(jù)載荷的字節(jié)數(shù)命令字一個(gè)字節(jié)區(qū)分“目標(biāo)坐標(biāo)”“狀態(tài)查詢”“急停”等不同指令數(shù)據(jù)載荷根據(jù)命令字定義最后兩個(gè)字節(jié)是CRC16校驗(yàn)。整個(gè)幀長(zhǎng)控制在32字節(jié)以內(nèi)波特率用921600或更高這樣一幀的傳輸時(shí)間在微秒級(jí)不會(huì)成為系統(tǒng)瓶頸。還有一個(gè)容易被忽略的點(diǎn)是心跳機(jī)制。協(xié)處理器需要定期向主控發(fā)送狀態(tài)幀包含當(dāng)前關(guān)節(jié)角度、末端執(zhí)行器力值、錯(cuò)誤碼等信息。主控如果連續(xù)三個(gè)周期沒有收到心跳就應(yīng)該觸發(fā)安全停機(jī)。這個(gè)機(jī)制在比賽現(xiàn)場(chǎng)特別重要因?yàn)橐坏┩ㄐ啪€松動(dòng)或者協(xié)處理器死機(jī)機(jī)械臂可能會(huì)失控。3. 視覺識(shí)別從“能識(shí)別”到“能摘”的距離3.1 藍(lán)莓識(shí)別的特殊性在哪里通用目標(biāo)檢測(cè)模型在藍(lán)莓場(chǎng)景下表現(xiàn)不佳根本原因在于藍(lán)莓的視覺特征和常見數(shù)據(jù)集里的物體差異太大。COCO數(shù)據(jù)集里的蘋果、橘子都是大目標(biāo)邊界清晰、顏色單一而藍(lán)莓是小目標(biāo)、密集簇生、顏色隨成熟度連續(xù)變化。更麻煩的是藍(lán)莓表面有一層果粉在強(qiáng)光下會(huì)形成鏡面反射在弱光下又幾乎和背景融為一體。我試過直接用YOLOv5在自采的藍(lán)莓?dāng)?shù)據(jù)集上訓(xùn)練mAP能到0.85左右但實(shí)際部署后發(fā)現(xiàn)漏檢率很高。分析原因主要是兩點(diǎn)一是訓(xùn)練數(shù)據(jù)里成熟果實(shí)的樣本不夠多模型對(duì)紫黑色果實(shí)的敏感度不足二是圖像預(yù)處理時(shí)做了過多的色彩增強(qiáng)導(dǎo)致果粉的紋理特征被抹掉了。后來調(diào)整策略在數(shù)據(jù)增強(qiáng)階段刻意保留果粉的鏡面反射特征同時(shí)增加成熟果實(shí)的過采樣權(quán)重mAP提升到了0.91實(shí)際漏檢率也降到了可接受的范圍。另一個(gè)關(guān)鍵問題是成熟度判斷。藍(lán)莓的成熟過程是從青綠到淺紅再到深紫最終變成紫黑色。單純用顏色閾值分割很難區(qū)分“深紫”和“紫黑”因?yàn)閮烧叩腞GB值非常接近。更可靠的做法是結(jié)合HSV色彩空間和果實(shí)表面的紋理特征。成熟藍(lán)莓的果粉分布更均勻而未成熟果實(shí)的表面往往有細(xì)微的褶皺。我在項(xiàng)目中嘗試過用一個(gè)小型的分類網(wǎng)絡(luò)專門做成熟度二分類輸入是檢測(cè)框裁剪出的果實(shí)圖像輸出是“可采摘”或“不可采摘”準(zhǔn)確率能到94%左右。3.2 輕量化模型的選擇與部署在嵌入式平臺(tái)上跑視覺模型模型大小和推理速度是硬約束。RZ/V系列雖然有DRP-AI加速但也不是什么模型都能跑得動(dòng)。我的經(jīng)驗(yàn)是骨干網(wǎng)絡(luò)選擇MobileNetV3或ShuffleNetV2這類輕量級(jí)結(jié)構(gòu)檢測(cè)頭用YOLO的簡(jiǎn)化版本輸入分辨率控制在416×416或320×320。如果DRP-AI的算力允許可以適當(dāng)增加輸入分辨率來提升小目標(biāo)檢測(cè)能力。模型量化是另一個(gè)關(guān)鍵步驟。瑞薩的DRP-AI工具鏈支持INT8量化但量化后的精度損失需要仔細(xì)評(píng)估。我一般會(huì)先用PyTorch的量化感知訓(xùn)練做一輪微調(diào)然后再導(dǎo)出ONNX做后訓(xùn)練量化。量化后的模型在藍(lán)莓檢測(cè)任務(wù)上mAP損失大約在2到3個(gè)百分點(diǎn)但推理速度能提升2到3倍這個(gè) trade-off 是值得的。部署時(shí)還有一個(gè)細(xì)節(jié)輸入圖像的預(yù)處理。DRP-AI對(duì)輸入數(shù)據(jù)的排布有特定要求通常是NHWC格式而且歸一化參數(shù)需要和訓(xùn)練時(shí)保持一致。我見過有隊(duì)伍在部署時(shí)忘了把BGR轉(zhuǎn)成RGB結(jié)果模型把成熟果實(shí)識(shí)別成了未成熟因?yàn)轭伾ǖ婪戳?。這種低級(jí)錯(cuò)誤在調(diào)試時(shí)很難發(fā)現(xiàn)因?yàn)槟P鸵廊粫?huì)輸出檢測(cè)框只是類別全錯(cuò)了。3.3 從檢測(cè)框到三維坐標(biāo)的轉(zhuǎn)換視覺模塊輸出的是圖像平面上的二維檢測(cè)框但機(jī)械臂需要的是三維空間中的采摘點(diǎn)坐標(biāo)。這個(gè)轉(zhuǎn)換過程需要標(biāo)定相機(jī)的內(nèi)參和外參以及手眼關(guān)系。如果是眼在手上Eye-in-Hand的配置相機(jī)固定在機(jī)械臂末端那么還需要實(shí)時(shí)獲取機(jī)械臂的位姿來補(bǔ)償。標(biāo)定這件事說起來簡(jiǎn)單做起來全是坑。棋盤格標(biāo)定板的精度、拍攝角度、光照均勻性都會(huì)影響標(biāo)定結(jié)果。我的建議是至少采集20張不同角度的標(biāo)定圖像用OpenCV的calibrateCamera函數(shù)做標(biāo)定重投影誤差控制在0.3像素以內(nèi)。手眼標(biāo)定則推薦用Tsai-Lenz方法需要機(jī)械臂走至少10個(gè)不同的位姿每個(gè)位姿下拍攝標(biāo)定板。實(shí)際運(yùn)行時(shí)深度信息的獲取是另一個(gè)難點(diǎn)。單目相機(jī)無法直接獲得深度需要用已知尺寸的參照物或者結(jié)構(gòu)光方案。雙目立體視覺在藍(lán)莓場(chǎng)景下效果一般因?yàn)樗{(lán)莓表面紋理弱立體匹配容易失敗。我最后采用的是“單目已知果實(shí)尺寸”的方案假設(shè)藍(lán)莓果實(shí)的平均直徑是15毫米根據(jù)檢測(cè)框的像素寬度和相機(jī)焦距反推距離。這個(gè)方案的精度取決于果實(shí)尺寸的一致性實(shí)際誤差在±5毫米左右對(duì)于采摘任務(wù)來說勉強(qiáng)夠用。4. 機(jī)械臂控制精度、速度與柔順性的三角博弈4.1 逆運(yùn)動(dòng)學(xué)解算的實(shí)時(shí)性挑戰(zhàn)機(jī)械臂要移動(dòng)到目標(biāo)果實(shí)的位置首先需要把三維坐標(biāo)轉(zhuǎn)換成各個(gè)關(guān)節(jié)的角度這就是逆運(yùn)動(dòng)學(xué)解算。對(duì)于常見的六自由度機(jī)械臂逆解通常有多個(gè)解需要根據(jù)關(guān)節(jié)限位和避障要求選擇最優(yōu)解。這個(gè)過程涉及大量的三角函數(shù)和矩陣運(yùn)算如果放在主控上做通信延遲加上計(jì)算延遲整個(gè)控制周期很難壓到1毫秒以內(nèi)。我的做法是把逆解放在RA協(xié)處理器上做。RA6M5的FPU做三角函數(shù)運(yùn)算大概需要幾十個(gè)時(shí)鐘周期一個(gè)完整的逆解流程在100微秒左右能完成。為了進(jìn)一步提速可以預(yù)先計(jì)算好工作空間內(nèi)的逆解查找表運(yùn)行時(shí)只需要做插值查表速度能提升一個(gè)數(shù)量級(jí)。當(dāng)然查找表的精度取決于網(wǎng)格劃分的密度需要在內(nèi)存占用和精度之間做權(quán)衡。還有一個(gè)容易被忽略的問題是奇異點(diǎn)處理。當(dāng)機(jī)械臂接近奇異位形時(shí)逆解會(huì)變得不穩(wěn)定關(guān)節(jié)速度可能突然飆升。我在項(xiàng)目中遇到過機(jī)械臂在伸展到最大臂展附近時(shí)突然劇烈抖動(dòng)的情況后來在逆解模塊里加了雅可比矩陣的條件數(shù)判斷當(dāng)條件數(shù)超過閾值時(shí)自動(dòng)降低末端速度問題就解決了。4.2 軌跡規(guī)劃為什么梯形速度曲線不夠用很多入門級(jí)的機(jī)械臂控制教程會(huì)教梯形速度曲線加速-勻速-減速三段式。這個(gè)方案在點(diǎn)到點(diǎn)運(yùn)動(dòng)時(shí)沒問題但在采摘場(chǎng)景下不夠用。因?yàn)樗{(lán)莓果實(shí)是懸在枝頭的機(jī)械臂從側(cè)面接近時(shí)如果末端執(zhí)行器帶著較大的慣性撞上果實(shí)果子直接就掉了。所以需要更精細(xì)的軌跡規(guī)劃讓末端在接近果實(shí)的過程中逐漸減速最后以接近零的速度接觸果實(shí)。我采用的是S型速度曲線也叫七段式規(guī)劃在加速和減速段都有加加速度jerk的限制。這樣機(jī)械臂的運(yùn)動(dòng)更平滑末端執(zhí)行器在接觸果實(shí)時(shí)的沖擊力能降低60%以上。實(shí)現(xiàn)上可以用五次多項(xiàng)式插值或者用更簡(jiǎn)單的雙S型曲線。RA系列的高級(jí)定時(shí)器支持多路PWM輸出可以很方便地實(shí)現(xiàn)這種精細(xì)的速度控制。另一個(gè)細(xì)節(jié)是采摘路徑的設(shè)計(jì)。藍(lán)莓通常成簇生長(zhǎng)如果直接從一個(gè)果實(shí)直線移動(dòng)到另一個(gè)果實(shí)末端執(zhí)行器可能會(huì)碰到中間的果實(shí)。我的做法是在兩個(gè)采摘點(diǎn)之間插入一個(gè)“安全中間點(diǎn)”這個(gè)點(diǎn)位于果實(shí)簇的外側(cè)機(jī)械臂先退到安全點(diǎn)再移動(dòng)到下一個(gè)目標(biāo)。雖然這樣會(huì)增加單次采摘的時(shí)間但能顯著降低碰落果實(shí)的概率。4.3 力控與柔順?biāo){莓有多脆弱藍(lán)莓果實(shí)的抗壓強(qiáng)度大概在2到5牛頓之間超過這個(gè)范圍果皮就會(huì)破裂。而一個(gè)普通的舵機(jī)在堵轉(zhuǎn)時(shí)能輸出幾十牛頓的力如果不加力控機(jī)械臂碰到果實(shí)的瞬間果子就爛了。所以末端執(zhí)行器必須有力反饋而且控制環(huán)路要足夠快能在力值超過閾值時(shí)立即停止或回退。我在項(xiàng)目中用的是基于電流檢測(cè)的力估計(jì)方案。舵機(jī)的輸出力矩和電流成正比通過采樣舵機(jī)的電流值可以間接估計(jì)末端執(zhí)行器的受力。這個(gè)方案的精度不如專用的力傳感器但成本低、響應(yīng)快對(duì)于藍(lán)莓采摘來說夠用了。具體實(shí)現(xiàn)是在RA的ADC上以10kHz的速率采樣電流經(jīng)過低通濾波后和閾值比較一旦超限就觸發(fā)PWM輸出的緊急停止。更進(jìn)階的方案是用阻抗控制讓末端執(zhí)行器表現(xiàn)出“彈簧-阻尼”特性。當(dāng)檢測(cè)到接觸力時(shí)不是簡(jiǎn)單地停止而是根據(jù)力的大小調(diào)整位置實(shí)現(xiàn)柔順接觸。這個(gè)方案在采摘時(shí)特別有用因?yàn)樗{(lán)莓果實(shí)的位置可能有幾毫米的誤差阻抗控制能讓末端執(zhí)行器自動(dòng)適應(yīng)這個(gè)誤差而不是硬碰硬。實(shí)現(xiàn)阻抗控制需要更復(fù)雜的動(dòng)力學(xué)模型對(duì)協(xié)處理器的算力要求也更高但如果你的RA芯片有足夠的余量值得一試。5. 末端執(zhí)行器最容易被低估的機(jī)械設(shè)計(jì)5.1 夾爪式還是剪切式采摘藍(lán)莓的末端執(zhí)行器主要有兩種方案夾爪式和剪切式。夾爪式是用兩個(gè)柔性手指把果實(shí)夾住然后旋轉(zhuǎn)摘下剪切式是用刀片切斷果柄。兩種方案各有優(yōu)劣夾爪式對(duì)果實(shí)的損傷更小但需要精確控制夾持力剪切式效率更高但刀片容易傷到相鄰的果實(shí)。我最初做的是夾爪式用硅膠材質(zhì)的柔性手指配合舵機(jī)驅(qū)動(dòng)。實(shí)際測(cè)試發(fā)現(xiàn)硅膠手指的摩擦力不夠藍(lán)莓在旋轉(zhuǎn)時(shí)容易打滑。后來在手指內(nèi)側(cè)增加了細(xì)齒紋路摩擦力問題解決了但新的問題又來了齒紋會(huì)刮傷果粉影響果實(shí)的商品價(jià)值。最終的方案是改用聚氨酯材質(zhì)表面做磨砂處理既保證了摩擦力又不會(huì)刮傷果粉。剪切式的方案我也試過一版用的是微型舵機(jī)驅(qū)動(dòng)的旋轉(zhuǎn)刀片。效率確實(shí)高但刀片的行程控制很關(guān)鍵切得太淺果柄沒斷切得太深會(huì)傷到果簇的枝條。后來在刀片旁邊加了一個(gè)限位擋板讓果柄剛好卡在刀片的切割范圍內(nèi)問題才解決。如果讓我推薦的話對(duì)于比賽場(chǎng)景夾爪式更容易做出穩(wěn)定的效果因?yàn)樗娜蒎e(cuò)空間更大。5.2 驅(qū)動(dòng)方式的選擇末端執(zhí)行器的驅(qū)動(dòng)方式直接影響到控制精度和響應(yīng)速度。常見的方案有舵機(jī)、步進(jìn)電機(jī)和氣動(dòng)。舵機(jī)結(jié)構(gòu)簡(jiǎn)單、控制方便但精度和響應(yīng)速度一般步進(jìn)電機(jī)精度高但需要驅(qū)動(dòng)器體積和重量都更大氣動(dòng)響應(yīng)最快但需要?dú)獗谜麢C(jī)復(fù)雜度高。我最終選擇的是數(shù)字舵機(jī)型號(hào)是那種支持總線通信的可以讀取當(dāng)前位置和負(fù)載信息??偩€舵機(jī)的優(yōu)勢(shì)在于可以串聯(lián)多個(gè)舵機(jī)只需要一對(duì)信號(hào)線布線簡(jiǎn)潔。而且總線舵機(jī)通常支持位置、速度、力矩多種控制模式可以根據(jù)采摘階段切換。比如在接近果實(shí)時(shí)用位置模式快速移動(dòng)接觸果實(shí)后切換到力矩模式做柔順控制。供電是另一個(gè)需要注意的點(diǎn)。舵機(jī)在堵轉(zhuǎn)時(shí)的電流可能是額定電流的3到5倍如果電源的瞬態(tài)響應(yīng)不夠好電壓會(huì)被拉低導(dǎo)致協(xié)處理器復(fù)位。我在電源輸入端并了一個(gè)大容量的電解電容1000微法以上同時(shí)在軟件里加了軟啟動(dòng)邏輯讓舵機(jī)逐漸加速而不是瞬間滿功率運(yùn)行電壓跌落的問題就基本解決了。5.3 果實(shí)收集與釋放摘下來的藍(lán)莓往哪里放這個(gè)問題看似簡(jiǎn)單實(shí)際上也需要仔細(xì)設(shè)計(jì)。如果直接讓果實(shí)掉落到收集盒里下落過程中的碰撞可能會(huì)導(dǎo)致果實(shí)損傷。我的做法是在末端執(zhí)行器下方設(shè)計(jì)了一個(gè)柔性的導(dǎo)流通道果實(shí)摘下后沿著通道滑落到收集盒通道內(nèi)壁貼了海綿緩沖層。收集盒則放在機(jī)械臂基座附近每次采摘后機(jī)械臂不需要移動(dòng)到很遠(yuǎn)的地方去釋放果實(shí)節(jié)省了節(jié)拍時(shí)間。還有一個(gè)細(xì)節(jié)是果實(shí)的釋放檢測(cè)。有時(shí)候藍(lán)莓會(huì)卡在夾爪里沒有掉下去如果機(jī)械臂直接去摘下一顆卡住的果實(shí)會(huì)被擠壓破裂。我在夾爪內(nèi)側(cè)裝了一個(gè)微型光電傳感器檢測(cè)夾爪之間是否有物體。如果采摘后傳感器依然被遮擋說明果實(shí)沒有釋放機(jī)械臂會(huì)執(zhí)行一個(gè)抖動(dòng)動(dòng)作把果實(shí)甩掉。這個(gè)小小的改進(jìn)讓果實(shí)損傷率降低了將近一半。6. 整機(jī)聯(lián)調(diào)那些任務(wù)書不會(huì)告訴你的坑6.1 光照變化實(shí)驗(yàn)室和田間最大的差異實(shí)驗(yàn)室里的光照是穩(wěn)定的、均勻的而比賽現(xiàn)場(chǎng)的光照條件可能千差萬別。頂光、側(cè)光、逆光、陰影每一種都會(huì)對(duì)視覺識(shí)別產(chǎn)生顯著影響。我在調(diào)試時(shí)遇到過最棘手的情況是現(xiàn)場(chǎng)有一盞補(bǔ)光燈正好在相機(jī)視野邊緣產(chǎn)生了強(qiáng)烈的眩光導(dǎo)致圖像右側(cè)的藍(lán)莓全部過曝檢測(cè)框全部丟失。解決這個(gè)問題的思路有兩個(gè)方向一是硬件層面給相機(jī)加裝遮光罩和偏振片減少雜散光的影響二是軟件層面在圖像預(yù)處理階段做自適應(yīng)直方圖均衡化CLAHE提升暗部細(xì)節(jié)的同時(shí)抑制過曝區(qū)域。我兩個(gè)方案都用了效果比較明顯。另外在訓(xùn)練數(shù)據(jù)里刻意加入不同光照條件下的樣本也能提升模型的魯棒性。6.2 振動(dòng)機(jī)械臂運(yùn)動(dòng)對(duì)視覺的干擾機(jī)械臂在快速移動(dòng)時(shí)會(huì)產(chǎn)生振動(dòng)如果相機(jī)固定在機(jī)械臂上振動(dòng)會(huì)導(dǎo)致圖像模糊檢測(cè)精度下降。我試過在相機(jī)和機(jī)械臂之間加橡膠減震墊效果有限因?yàn)榈皖l振動(dòng)很難被橡膠吸收。后來改用“運(yùn)動(dòng)-拍攝”分離的策略機(jī)械臂移動(dòng)到拍攝位置后先穩(wěn)定200毫秒等振動(dòng)衰減后再觸發(fā)相機(jī)拍攝。這個(gè)方案犧牲了一點(diǎn)節(jié)拍時(shí)間但換來了穩(wěn)定的圖像質(zhì)量。如果相機(jī)是固定在基座上的Eye-to-Hand配置振動(dòng)問題會(huì)小很多但視野范圍受限于機(jī)械臂的工作空間。對(duì)于藍(lán)莓采摘這種需要大范圍移動(dòng)的場(chǎng)景Eye-in-Hand更靈活但必須解決振動(dòng)問題。我的經(jīng)驗(yàn)是在機(jī)械臂的軌跡規(guī)劃里加入“穩(wěn)定等待”階段同時(shí)用陀螺儀檢測(cè)振動(dòng)幅度只有振動(dòng)低于閾值時(shí)才允許拍攝。6.3 通信丟包與錯(cuò)誤恢復(fù)主控和協(xié)處理器之間的通信線在整機(jī)運(yùn)行時(shí)可能會(huì)受到電機(jī)干擾導(dǎo)致偶發(fā)的丟包。如果通信協(xié)議沒有錯(cuò)誤恢復(fù)機(jī)制一次丟包就可能導(dǎo)致機(jī)械臂停在錯(cuò)誤的位置。我在協(xié)議里加了重傳機(jī)制主控發(fā)送目標(biāo)坐標(biāo)后等待協(xié)處理器的確認(rèn)幀如果超時(shí)沒有收到確認(rèn)就重傳最多重傳三次。三次都失敗則觸發(fā)安全停機(jī)。協(xié)處理器這邊也需要有超時(shí)保護(hù)。如果連續(xù)500毫秒沒有收到主控的新指令協(xié)處理器應(yīng)該讓機(jī)械臂保持在當(dāng)前位置而不是繼續(xù)執(zhí)行上一條指令。這個(gè)邏輯看起來簡(jiǎn)單但在調(diào)試時(shí)很容易被忽略因?yàn)榇蠹彝ǔV魂P(guān)注正常流程忘了異常流程的設(shè)計(jì)。6.4 電源管理與電磁兼容整機(jī)運(yùn)行時(shí)電機(jī)、舵機(jī)、相機(jī)、主控、協(xié)處理器都在耗電電源的負(fù)載是動(dòng)態(tài)變化的。如果電源設(shè)計(jì)不合理輕則圖像出現(xiàn)噪點(diǎn)重則芯片復(fù)位。我的做法是給數(shù)字部分和功率部分分別供電用獨(dú)立的LDO或DC-DC模塊中間用磁珠或電感隔離。電機(jī)的電源線上套磁環(huán)減少高頻輻射。PCB布局也很關(guān)鍵。大電流的走線要盡量短而粗和信號(hào)線保持足夠的距離。晶振、復(fù)位電路這些敏感部分要遠(yuǎn)離功率器件。我見過有隊(duì)伍因?yàn)榘讯鏅C(jī)電源線和相機(jī)排線捆在一起走導(dǎo)致圖像上出現(xiàn)規(guī)律性的橫紋噪聲查了半天才發(fā)現(xiàn)是電源耦合。7. 在瑞薩生態(tài)里做開發(fā)的一些實(shí)在經(jīng)驗(yàn)7.1 工具鏈的取舍瑞薩的e2 studio是基于Eclipse的集成開發(fā)環(huán)境功能齊全但啟動(dòng)和編譯速度偏慢。如果只是做RA系列的裸機(jī)開發(fā)我其實(shí)更推薦用Keil MDK或者IAR編譯速度快、調(diào)試體驗(yàn)好。但如果是RZ系列跑Linuxe2 studio配合DRP-AI工具鏈就是必選項(xiàng)了因?yàn)槟P娃D(zhuǎn)換和部署的插件只在這個(gè)環(huán)境里提供。Flexible Software PackageFSP是瑞薩主推的RA系列開發(fā)框架把外設(shè)驅(qū)動(dòng)、中間件、RTOS都封裝好了。用FSP的好處是配置外設(shè)很方便圖形化界面點(diǎn)幾下就能生成初始化代碼。但FSP的抽象層比較厚如果遇到需要精細(xì)控制時(shí)序的場(chǎng)景還是得直接操作寄存器。我的建議是先用FSP把系統(tǒng)跑通再針對(duì)性能瓶頸的部分做寄存器級(jí)的優(yōu)化。7.2 調(diào)試手段的儲(chǔ)備嵌入式調(diào)試最怕的就是“現(xiàn)象時(shí)有時(shí)無”。我的經(jīng)驗(yàn)是在系統(tǒng)設(shè)計(jì)階段就預(yù)留足夠的調(diào)試接口。比如RA系列可以用SWD接口做實(shí)時(shí)變量監(jiān)控RZ系列可以用以太網(wǎng)輸出日志。另外在關(guān)鍵代碼路徑上打GPIO標(biāo)記用邏輯分析儀或者示波器抓時(shí)序比打印日志直觀得多。對(duì)于視覺部分我習(xí)慣把每一幀的檢測(cè)結(jié)果和原始圖像一起保存下來事后分析。比賽現(xiàn)場(chǎng)沒有時(shí)間讓你慢慢調(diào)試所有數(shù)據(jù)都要先記錄下來回去再復(fù)盤。存儲(chǔ)可以用SD卡或者通過WiFi傳到上位機(jī)看你的帶寬和實(shí)時(shí)性要求。7.3 團(tuán)隊(duì)分工與進(jìn)度管理這個(gè)賽題的工作量很大一個(gè)人很難在比賽周期內(nèi)完成所有模塊。我的建議是至少分成三個(gè)方向視覺算法、嵌入式控制、機(jī)械結(jié)構(gòu)。視覺和控制的接口要盡早定義清楚比如檢測(cè)結(jié)果的坐標(biāo)格式、通信協(xié)議、控制指令集。接口定下來之后兩邊可以并行開發(fā)最后聯(lián)調(diào)時(shí)問題會(huì)少很多。進(jìn)度管理上一定要留出足夠的聯(lián)調(diào)時(shí)間。我的經(jīng)驗(yàn)是算法開發(fā)和機(jī)械調(diào)試各占三分之一時(shí)間剩下三分之一全部留給聯(lián)調(diào)。聯(lián)調(diào)階段遇到的問題往往是最耗時(shí)的因?yàn)樗鼈兩婕岸鄠€(gè)模塊的交互定位問題的難度比單模塊調(diào)試大得多。8. 關(guān)于這個(gè)賽題的一些個(gè)人體會(huì)做藍(lán)莓采摘機(jī)器人這個(gè)項(xiàng)目最大的收獲其實(shí)不是某個(gè)具體的技術(shù)點(diǎn)而是對(duì)“嵌入式系統(tǒng)”這四個(gè)字有了更實(shí)在的理解。在學(xué)校里做課程設(shè)計(jì)往往是把各個(gè)模塊單獨(dú)調(diào)通就算完成了但在這個(gè)賽題里視覺、控制、機(jī)械、電源、通信任何一個(gè)環(huán)節(jié)出問題都會(huì)導(dǎo)致整機(jī)失效。你不得不學(xué)會(huì)從系統(tǒng)的角度去思考問題學(xué)會(huì)在精度、速度、成本、可靠性之間做取舍。我印象最深的一次調(diào)試是機(jī)械臂在實(shí)驗(yàn)室里跑了一整天都沒問題搬到現(xiàn)場(chǎng)后第一次啟動(dòng)就撞到了限位。查了半天發(fā)現(xiàn)是現(xiàn)場(chǎng)的地面不平機(jī)械臂基座有大約2度的傾斜導(dǎo)致逆運(yùn)動(dòng)學(xué)的坐標(biāo)系出現(xiàn)了偏差。這個(gè)問題的根源不在代碼而在機(jī)械安裝。從那以后我養(yǎng)成了一個(gè)習(xí)慣每次到新場(chǎng)地先花十分鐘做一次快速標(biāo)定確認(rèn)基座水平和相機(jī)外參。如果你正在準(zhǔn)備這個(gè)賽題我的建議是不要一上來就追求高大上的方案。先把最簡(jiǎn)單的版本跑通單目相機(jī)做識(shí)別三自由度機(jī)械臂做采摘舵機(jī)做夾爪。這個(gè)版本可能只能摘到一半的果實(shí)但它能讓你快速理解整個(gè)系統(tǒng)的運(yùn)作流程。然后再逐步迭代加力控、加阻抗、加多目視覺。嵌入式開發(fā)就是這樣迭代的速度比單次設(shè)計(jì)的完美程度重要得多。最后說一個(gè)很實(shí)際的點(diǎn)藍(lán)莓果實(shí)很貴尤其是用于實(shí)驗(yàn)的鮮果。我在項(xiàng)目初期因?yàn)閵A爪力控沒調(diào)好浪費(fèi)了好幾盒藍(lán)莓。后來改用3D打印的仿真果實(shí)做初步調(diào)試仿真果實(shí)的尺寸、重量、表面摩擦系數(shù)都盡量接近真實(shí)藍(lán)莓等參數(shù)調(diào)得差不多了再用真果實(shí)驗(yàn)證。這個(gè)做法幫我省了不少錢也省了不少去超市補(bǔ)貨的時(shí)間。