視覺伺服控制:從機(jī)械結(jié)構(gòu)到PID調(diào)參的實(shí)踐指南)
簡(jiǎn)介針對(duì)2017年全國(guó)大學(xué)生電子設(shè)計(jì)大賽B題板球系統(tǒng)的完整開源工程涵蓋嵌入式控制、傳感器采集與圖像處理等核心模塊適合電子競(jìng)賽備賽者、嵌入式開發(fā)者及自動(dòng)化控制方向?qū)W生深入學(xué)習(xí)也可作為相關(guān)課程設(shè)計(jì)與畢業(yè)設(shè)計(jì)的參考項(xiàng)目。資源共190個(gè)文件以C源文件與頭文件為主體輔以Keil工程配置、備份調(diào)試文件及少量圖片說明整體約5.96MB其中工程文件可直接打開查看圖片示意了硬件組裝與調(diào)試效果目錄分類明確便于按需檢索。目前已有1361人學(xué)習(xí)下載過該資源。工程代碼包含PWM輸出、超聲波測(cè)距、編碼器讀取、激光檢測(cè)等驅(qū)動(dòng)模塊以及定時(shí)器中斷、SPI通信等底層配置可結(jié)合原理圖直接進(jìn)行二次開發(fā)。開放源碼的方式保留了設(shè)計(jì)備份與構(gòu)建記錄方便對(duì)照生成文件理解編譯流程對(duì)電賽控制系統(tǒng)類題目的方案搭建、外設(shè)初始化和代碼組織都有直接參考價(jià)值。1. boardBallSystem 到底在做什么一場(chǎng)被名字低估的視覺閉環(huán)挑戰(zhàn)2017年電賽B題的滾球控制系統(tǒng)圈內(nèi)通常叫板球系統(tǒng)英文標(biāo)題 boardBallSystem 暴露了它的真實(shí)工作量這不是“把球放在板子上別掉下來”而是讓一個(gè)小球在一個(gè)二維傾斜平臺(tái)上走出一條設(shè)定軌跡且軌跡由圖像實(shí)時(shí)識(shí)別、由電機(jī)實(shí)時(shí)修正。很多人第一反應(yīng)是“調(diào)個(gè)PID不就行了”實(shí)際動(dòng)手才發(fā)現(xiàn)球根本不是“滾”上去的是“追”上去的——你永遠(yuǎn)在給一個(gè)滾動(dòng)且無制動(dòng)的對(duì)象做滯后補(bǔ)償。這套系統(tǒng)的完整鏈路是攝像頭識(shí)別小球坐標(biāo)換算成平臺(tái)目標(biāo)傾角通過雙軸電機(jī)驅(qū)動(dòng)萬向節(jié)或十字桿改變板面姿態(tài)讓球朝指定方向加速或減速。非常典型的視覺伺服閉環(huán)。適合的人群很明確正在備戰(zhàn)電賽、智能車或機(jī)器人競(jìng)賽的學(xué)生團(tuán)隊(duì)以及剛開始接觸機(jī)器視覺與控制聯(lián)合調(diào)試的嵌入式開發(fā)者。它的價(jià)值在于——這是少數(shù)能在實(shí)驗(yàn)室里把“圖像處理延遲”和“控制響應(yīng)帶寬”同時(shí)逼到你面前的小系統(tǒng)調(diào)通它之后再看四軸、機(jī)械臂你會(huì)多一層直覺。2. 機(jī)械結(jié)構(gòu)與傳感器選型別讓控制算法替機(jī)械結(jié)構(gòu)背鍋我見過太多隊(duì)伍把時(shí)間全砸在PID調(diào)參上最后發(fā)現(xiàn)一個(gè)關(guān)鍵問題機(jī)械結(jié)構(gòu)本身就是個(gè)大滯后環(huán)節(jié)。板球系統(tǒng)尤其如此因?yàn)槟愕膱?zhí)行器不是直接驅(qū)動(dòng)小球而是先動(dòng)板子板子再靠重力帶動(dòng)球。這個(gè)間接性的每一步都會(huì)消耗掉系統(tǒng)相位裕度。2.1 機(jī)械結(jié)構(gòu)定版為什么大多數(shù)人死在自由度和回程差上主流的板球系統(tǒng)結(jié)構(gòu)有兩種一種是雙軸萬向節(jié)平臺(tái)用一個(gè)球鉸連接底座兩個(gè)舵機(jī)或電機(jī)通過連桿推動(dòng)平臺(tái)傾斜另一種是十字滑軌或X/Y獨(dú)立傾斜結(jié)構(gòu)兩個(gè)電機(jī)分別控制兩軸的轉(zhuǎn)動(dòng)。電賽題目的要求通常允許兩種存在但實(shí)際跑軌跡時(shí)差距很大。萬向節(jié)方案的結(jié)構(gòu)剛度好但兩個(gè)軸的運(yùn)動(dòng)會(huì)互相耦合——你在X方向推板子時(shí)Y方向的重力分量也在變。工程上處理耦合的做法是“控制系統(tǒng)里解耦”但調(diào)參時(shí)你會(huì)明顯感覺到兩軸的沉降響應(yīng)不一樣。十字桿方案兩個(gè)軸完全獨(dú)立控制上清爽得多但結(jié)構(gòu)件多、間隙多每個(gè)關(guān)節(jié)的虛位都會(huì)變成圖像里球的隨機(jī)漂移。我在做這套系統(tǒng)時(shí)選的是十字桿用了一個(gè)關(guān)鍵原則所有轉(zhuǎn)動(dòng)關(guān)節(jié)的間隙必須不大于0.5毫米否則你在圖像里看到的球是在“微顫”PID無論如何都穩(wěn)不住。還有一點(diǎn)經(jīng)常被忽略板子表面的摩擦系數(shù)。板子的材質(zhì)直接決定小球是否會(huì)出現(xiàn)“打滑”和“彈跳”。亞克力板太滑球在低速時(shí)會(huì)像溜冰一樣不受控軟木墊板摩擦力好但球的滾動(dòng)阻力大需要更大的傾角來驅(qū)動(dòng)。我最后用了亞克力板貼一層植絨布既保證了滾動(dòng)通暢又讓球的減速過程可控。摩擦不均比摩擦過大更致命——板面上如果有污漬或凹陷球每次經(jīng)過相同位置時(shí)響應(yīng)都不一樣你會(huì)在圖像數(shù)據(jù)里看到周期性“鬼飄”。2.2 傳感器選型攝像頭、角度傳感器和電機(jī)怎么搭配視覺部分通常是用攝像頭從上往下拍板面識(shí)別小球圓心。這里有個(gè)容易搞錯(cuò)的地方攝像頭分辨率不是越高越好。200萬像素已經(jīng)足夠因?yàn)槟愕目刂茙室鬀Q定了圖像處理必須跑得快。分辨率太高處理時(shí)間拉長(zhǎng)整個(gè)環(huán)路的延遲變大球會(huì)更難控。我當(dāng)時(shí)用的是一個(gè)普通的免驅(qū)USB攝像頭640×480分辨率固定曝光模式能穩(wěn)定輸出30幀就夠用。角度反饋方面舵機(jī)內(nèi)置的電位器精度不夠需要在關(guān)節(jié)處加裝磁編碼器或電位器做角度閉環(huán)否則電機(jī)前端的死區(qū)會(huì)讓小球在一個(gè)小鄰域內(nèi)極限環(huán)振蕩。電機(jī)選擇建議用帶減速箱的直流電機(jī)或者數(shù)字舵機(jī)。電賽限制電壓所以電機(jī)的輸出力矩和響應(yīng)速度之間的平衡要提前算平臺(tái)邊長(zhǎng)40厘米左右、球重約30克時(shí)舵機(jī)力矩建議在5千克·厘米以上。更關(guān)鍵的是舵機(jī)的刷新率——普通模擬舵機(jī)的刷新率只有50Hz也就是20毫秒才能響應(yīng)一次角度指令這個(gè)延遲放在視覺閉環(huán)里很快就會(huì)察覺。數(shù)字舵機(jī)的刷新率可以到300Hz響應(yīng)延遲大幅縮短是板球系統(tǒng)的更優(yōu)選擇。2.3 電氣連接與供電一個(gè)隱形的翻車點(diǎn)電機(jī)啟動(dòng)瞬間的電流跌落是很多隊(duì)伍調(diào)試時(shí)反復(fù)“重啟”的幕后黑手。舵機(jī)在大力矩輸出時(shí)電流可以到1A以上USB攝像頭和控制板如果和電機(jī)共用同一路電源圖像就會(huì)因?yàn)殡妷后E降出現(xiàn)橫紋甚至黑幀。常見的做法是電源分兩路一路給電機(jī)一路給控制板和攝像頭兩路電源的GND在單點(diǎn)連接。這個(gè)細(xì)節(jié)不花一分錢但能讓你排查出很多“明明是控制有問題”的假象。3. 視覺識(shí)別與坐標(biāo)換算把“看到球”變成“知道球在哪”板球系統(tǒng)的視覺不是做目標(biāo)檢測(cè)而是做目標(biāo)定位。也就是說你不需要識(shí)別“這是什么”只需要穩(wěn)定地輸出“球心在哪里”。這決定了方案選型的天平深度學(xué)習(xí)不是首選傳統(tǒng)圖像處理的閾值分割加幾何擬合才是最可靠、最快、且最容易被裁判認(rèn)可的方案。3.1 用傳統(tǒng)視覺識(shí)別小球閾值分割的工程邊界常見做法是在板面四角貼黑色邊框或固定標(biāo)記先通過角點(diǎn)檢測(cè)建立投影映射這樣即使攝像頭架得有傾斜也能把圖像坐標(biāo)轉(zhuǎn)換到以板面為基準(zhǔn)的世界坐標(biāo)。我通常先用HSV顏色空間做二值化再用輪廓檢測(cè)找圓形。HSV相比RGB對(duì)光照變化更魯棒因?yàn)樯喾至渴芰炼扔绊懶?。ball_color_low (0, 100, 100) ball_color_high (10, 255, 255) mask cv2.inRange(hsv_frame, ball_color_low, ball_color_high) mask cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel_5x5) contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if contours: largest max(contours, keycv2.contourArea) (x, y), radius cv2.minEnclosingCircle(largest) ball_pos (int(x), int(y))這段代碼的思路很直接先把圖像從BGR轉(zhuǎn)到HSV然后用顏色范圍濾出小球候選區(qū)域。morphologyEx M打開操作是為了去除孤立噪點(diǎn)它可以消掉反光導(dǎo)致的細(xì)小白色區(qū)域。findContours拿到所有連通的白色塊過濾掉面積太小的干擾最后用最小外接圓算出球心坐標(biāo)。要注意的坑是HSV的低飽和度和低亮度閾值不能設(shè)得太死。當(dāng)小球被板子陰影遮擋一角時(shí)紅色或橙色的色相會(huì)略微偏移閾值范圍需要保留10%的余量。白色球是最難做的因?yàn)槿魏畏垂舛紩?huì)讓球和背景混淆這也是比賽時(shí)很多隊(duì)伍最后改用紅球的原因——不是說必須用紅球但如果你在測(cè)試時(shí)發(fā)現(xiàn)白色球的識(shí)別幀率上不去盡早換球比換算法更省時(shí)間。3.2 坐標(biāo)平滑與延遲濾波是雙刃劍識(shí)別出來的球心坐標(biāo)直接喂給PID會(huì)非常“吵”。攝像頭本身的噪聲加上滾動(dòng)時(shí)的輕微振動(dòng)會(huì)讓球心位置每幀抖動(dòng)2~3像素這在閉環(huán)里就會(huì)變成控制輸出的高頻抖動(dòng)。常見的做法是加一個(gè)滑動(dòng)窗口濾波或一階低通濾波。ball_x_smooth ball_x_smooth * 0.6 ball_x_raw * 0.4 ball_y_smooth ball_y_smooth * 0.6 ball_y_raw * 0.4這行代碼的系數(shù)選擇是有講究的。0.6/0.4意味著新位置占40%權(quán)重是一個(gè)折衷值。系數(shù)太小坐標(biāo)很平滑但延遲變大系數(shù)太大噪聲仍然明顯。板球系統(tǒng)的視覺延遲本來就存在平滑濾波疊加的延遲如果超過100毫秒控制系統(tǒng)的相位裕度會(huì)被吃掉大半結(jié)果就是球一直在目標(biāo)點(diǎn)附近來回震蕩俗稱“鬼畜”。我一般把這個(gè)低通系數(shù)放在0.5~0.7之間然后實(shí)測(cè)球從一個(gè)點(diǎn)走到另一個(gè)點(diǎn)的調(diào)節(jié)時(shí)間如果調(diào)節(jié)時(shí)間超過2秒就說明濾波太強(qiáng)了。還有一個(gè)優(yōu)化方向是預(yù)測(cè)球的位置。在做直線軌跡跟蹤時(shí)我們其實(shí)可以假定球的運(yùn)動(dòng)狀態(tài)是近似勻速的用上一幀和當(dāng)前幀的位置差推出下一幀的預(yù)估值。這個(gè)思路對(duì)圓形軌跡幫助不大但對(duì)走直線、折線幫助很明顯因?yàn)樗喈?dāng)于給PID控制器提前“報(bào)信”。我自己的實(shí)現(xiàn)里只對(duì)直線軌跡做了位置預(yù)測(cè)預(yù)測(cè)系數(shù)同樣是經(jīng)驗(yàn)值增量不能超過當(dāng)前幀位移的50%否則預(yù)測(cè)點(diǎn)會(huì)偏離真實(shí)值。3.3 坐標(biāo)系映射攝像頭必須正裝還是斜裝攝像頭安裝在板面上方70~80厘米左右視角略微傾斜是允許的只要板面四個(gè)角在圖像里都可見。但正裝的好處是坐標(biāo)換算簡(jiǎn)單直接線性映射不需要做透視校正。很多隊(duì)伍為了圖省事直接把攝像頭用膠槍固定在支架上結(jié)果板面稍微挪動(dòng)一點(diǎn)整個(gè)映射就偏了。建議畫一個(gè)定位標(biāo)記在板面上每次開機(jī)先做一次角點(diǎn)檢測(cè)自動(dòng)計(jì)算出映射矩陣。這樣即使比賽中途攝像頭被碰歪也不需要重新手動(dòng)標(biāo)定。4. 控制系統(tǒng)方案與PID調(diào)參把位置環(huán)和速度環(huán)正確分層控制部分是整個(gè)板球系統(tǒng)最容易“看著簡(jiǎn)單、做著玄學(xué)”的地方。核心原因是你無法直接給球發(fā)指令只能通過改變板面傾角來改變球的加速度。這決定了系統(tǒng)的固有特性是二階積分特性——傾角對(duì)應(yīng)加速度速度是傾角的積分位置是速度的積分。對(duì)這種系統(tǒng)單環(huán)PID往往不夠需要按串級(jí)結(jié)構(gòu)來處理。4.1 控制模型為什么位置單環(huán)PID會(huì)瘋狂超調(diào)先想清楚一個(gè)事如果你直接用位置誤差作為PID的輸入輸出的是一整個(gè)傾角目標(biāo)那么當(dāng)球到達(dá)目標(biāo)點(diǎn)時(shí)位置誤差是零但球還有速度板面必須提前反向傾斜來剎車。P增益大了球在目標(biāo)點(diǎn)附近來回沖P增益小了球在路上就走不動(dòng)。這就是典型的二階系統(tǒng)共振調(diào)參窗口非常窄。常見的解法是串級(jí)控制外環(huán)是位置閉環(huán)內(nèi)環(huán)是速度閉環(huán)。位置外環(huán)輸出的是目標(biāo)速度速度內(nèi)環(huán)再根據(jù)當(dāng)前速度算出目標(biāo)傾角。速度哪里來可以直接用圖像差分算出來也就是兩幀之間的位移除以時(shí)間間隔。如果你用的是MPU6050或編碼器來測(cè)球的位置速度估算會(huì)更準(zhǔn)確但對(duì)比賽而言圖像差分已經(jīng)足夠。我用的是外環(huán)P加內(nèi)環(huán)PI的結(jié)構(gòu)。位置外環(huán)用純P比例系數(shù)作用在位置誤差上輸出一個(gè)目標(biāo)速度速度內(nèi)環(huán)用PI把估算速度和目標(biāo)速度的誤差通過比例積分算出傾角指令。這個(gè)結(jié)構(gòu)的好處是速度內(nèi)環(huán)像一個(gè)“阻尼器”它天然抑制了位置的來回超調(diào)。關(guān)鍵是速度環(huán)的帶寬要比位置環(huán)高3到5倍否則內(nèi)環(huán)響應(yīng)太慢外環(huán)看到的“速度”其實(shí)是滯后的。4.2 PID參數(shù)初始化與整定順序抄作業(yè)也要知道為什么很多資料給出一套參數(shù)讓你直接用但我建議先用以下方式自己走一遍。首先把位置環(huán)和速度環(huán)分開給小球一個(gè)初始速度然后讓系統(tǒng)只運(yùn)行速度環(huán)調(diào)整內(nèi)環(huán)的P讓小球速度能夠穩(wěn)定在目標(biāo)值的80%左右再把I加上去消掉穩(wěn)態(tài)誤差。速度環(huán)調(diào)好后再啟用位置外環(huán)這時(shí)候外環(huán)的P從小往大加觀察球接近目標(biāo)點(diǎn)時(shí)是否平穩(wěn)減速。這里有一組比較靠譜的初始參數(shù)表適合30克小球、40厘米平臺(tái)。實(shí)際使用時(shí)先照這個(gè)跑再按手感微調(diào)。調(diào)參的時(shí)候注意一個(gè)判斷順序先保證不振蕩再追求快速性。振蕩是必然存在的但如果振蕩頻率很高、幅度很小說明是內(nèi)環(huán)剛度不夠如果振蕩是低頻、幅度大說明是外環(huán)太激進(jìn)跟內(nèi)環(huán)無關(guān)。4.3 前饋與邊界條件給PID裝上“剎車燈”板球系統(tǒng)的邊界條件很殘酷球到達(dá)板邊就跌落這意味著一部分目標(biāo)軌跡會(huì)超出可跑區(qū)域。常見的做法是給位置控制加一個(gè)“虛擬邊界”——當(dāng)球離邊界小于設(shè)定值比如板寬的15%時(shí)強(qiáng)制把該方向的目標(biāo)速度限幅為反向。這個(gè)限幅值不能太硬否則球會(huì)在邊界處彈開。另一個(gè)可選項(xiàng)是加速度前饋。如果目標(biāo)是圓形軌跡球的向心加速度需要板面提供一個(gè)恒定傾角來維持。沒有前饋時(shí)純PID會(huì)在每個(gè)軌跡點(diǎn)不斷修正誤差表現(xiàn)為轉(zhuǎn)角處沖出軌跡再拉回來。加了前饋后你直接把理論傾角疊加到PID輸出上球會(huì)更貼軌跡。前饋量的計(jì)算是 v2/rv是目標(biāo)線速度r是軌跡半徑單位要統(tǒng)一成板面傾角對(duì)應(yīng)的加速度。5. 避坑指南板球系統(tǒng)從裸板到能跑通的常見問題與排查這套系統(tǒng)踩坑的地方很集中下面這幾條幾乎覆蓋了90%團(tuán)隊(duì)翻車的場(chǎng)景。每條都按“現(xiàn)象→原因→解決”的順序?qū)懩憧梢栽谡{(diào)試時(shí)對(duì)照排查。5.1 球在目標(biāo)點(diǎn)附近持續(xù)振蕩怎么調(diào)都穩(wěn)不住現(xiàn)象是球到了目標(biāo)點(diǎn)后不是停下來而是以小幅度高頻往復(fù)運(yùn)動(dòng)像在抖。原因通常是視覺坐標(biāo)平滑濾波的延遲太大疊加了控制輸出本身的延遲形成了一個(gè)低阻尼的振蕩環(huán)路。我見過有人把低通系數(shù)調(diào)到0.9這時(shí)候?yàn)V波器已經(jīng)產(chǎn)生肉眼可見的滯后。解決方法是第一步把手放在球旁邊觀察圖像里的十字光標(biāo)是否比實(shí)際球晚半拍。如果滯后明顯降低濾波系數(shù)到0.5重新測(cè)試。第二步檢查控制周期如果整個(gè)控制循環(huán)在50毫秒以上說明主循環(huán)里圖像處理占了大頭需要優(yōu)化處理邏輯把ROI縮小到球周圍一個(gè)小區(qū)域而不是全圖處理。5.2 球在板子的某一個(gè)特定區(qū)域突然失控現(xiàn)象是板面大部分區(qū)域工作正常唯獨(dú)某個(gè)角落后球的響應(yīng)異常而且每次到同一個(gè)位置都復(fù)現(xiàn)。這幾乎可以鎖定是硬件問題而不是控制問題。最常見的原因是板面不平或者是關(guān)節(jié)間隙在某個(gè)角度下突然吃掉了傳動(dòng)量。用一個(gè)水平尺或者手機(jī)上的水平儀把板面放在零傾角逐點(diǎn)按壓四個(gè)角檢查運(yùn)動(dòng)是否順暢。如果某個(gè)角度卡頓拆開關(guān)節(jié)重新調(diào)整螺絲松緊度。如果是十字桿結(jié)構(gòu)還要排查一個(gè)容易被忽略的點(diǎn)兩軸在中位附近時(shí)連桿是否和球鉸中心產(chǎn)生干涉。機(jī)械限位比控制限位可靠得多絕對(duì)不能指望程序里把傾角限制在某個(gè)范圍就萬事大吉。5.3 光線一變小球識(shí)別就開始跳動(dòng)電賽賽場(chǎng)的光照通常和你實(shí)驗(yàn)室不一樣尤其是頭頂?shù)腖ED燈和窗戶自然光混在一起色溫差別很大?,F(xiàn)象是上午調(diào)好的閾值下午比賽就失靈。解決思路是不要在固定光線下調(diào)試而是引入一個(gè)自動(dòng)曝光策略攝像頭設(shè)置為固定曝光值而不是自動(dòng)曝光。自動(dòng)曝光會(huì)在畫面亮度變化時(shí)主動(dòng)調(diào)整這會(huì)讓圖像的顏色在HSV空間里漂移閾值形同虛設(shè)。固定曝光后即使畫面偏暗HSV色相也基本穩(wěn)定。再進(jìn)階一點(diǎn)的是做白平衡校正在板面角落貼一片標(biāo)準(zhǔn)白色色卡每次啟動(dòng)時(shí)自動(dòng)計(jì)算白平衡增益。但比賽中往往不允許額外加裝無關(guān)設(shè)備所以最簡(jiǎn)單的做法是用一塊遮光布包裹整個(gè)支架營(yíng)造一個(gè)光線穩(wěn)定的暗環(huán)境。我的很多次比賽調(diào)試經(jīng)驗(yàn)都證明用物理手段消除光線變化比算法魯棒性更省心。5.4 球走圓弧時(shí)總在切點(diǎn)附近往外飄這是加速度前饋缺失的典型癥狀。球走直線沒問題走圓弧就往外偏——因?yàn)榍蛟趶澋佬枰蛐牧Χ@個(gè)向心力只能靠板面傾角提供。純PID只能在球已經(jīng)偏出軌跡后才產(chǎn)生修正力所以看起來是“滯后地往外飄”。解決方法是給控制器加上前饋項(xiàng)按目標(biāo)軌跡的理論加速度計(jì)算額外傾角。如果你的控制輸出是以角度為單位那計(jì)算方式是傾角前饋等于 v2/(r×g)v是目標(biāo)線速度r是圓弧半徑g是重力加速度。前饋量可以先算出來后乘以0.8再在實(shí)際運(yùn)行中微調(diào)。注意前饋只能補(bǔ)償牽引力不能補(bǔ)償軌跡的初始誤差所以它不能替代PID只能作為疊加項(xiàng)。5.5 換上備用電機(jī)后參數(shù)全部失效現(xiàn)象是調(diào)試好的PID參數(shù)在換了一個(gè)電機(jī)或舵機(jī)后同樣的板子跑起來變得很“肉”響應(yīng)明顯變慢。原因是不同電機(jī)的減速比、齒隙和響應(yīng)時(shí)間不一樣。伺服系統(tǒng)的響應(yīng)帶寬變了PID的增益自然也要跟著變。遇到這種情況不要糾結(jié)參數(shù)應(yīng)該先重新測(cè)量系統(tǒng)開環(huán)響應(yīng)——給一個(gè)階躍傾角指令記錄小球從靜止到達(dá)最大速度的時(shí)間。這個(gè)時(shí)間稱為系統(tǒng)延遲如果它比之前大了20%以上就需要把所有PID增益按比例縮小。6. 調(diào)好的系統(tǒng)如何驗(yàn)證用它壓出控制系統(tǒng)的真實(shí)邊界最后聊一個(gè)我常用的驗(yàn)證方法。大部分人調(diào)試板球系統(tǒng)的方法就是“讓它跑一個(gè)圓看它圓不圓”。這個(gè)判斷太模糊你沒法定量地知道問題在哪。我習(xí)慣用定點(diǎn)往返測(cè)試來壓邊界Step 1 在板面上以坐標(biāo)方式設(shè)定8個(gè)目標(biāo)點(diǎn)程序控制小球依次從A點(diǎn)移動(dòng)到B點(diǎn)再返回A點(diǎn)。 Step 2 記錄每次到達(dá)目標(biāo)點(diǎn)時(shí)的最大過沖量單位是毫米。用圖像坐標(biāo)的像素偏差乘以映射比例換算。 Step 3 重復(fù)10次求出平均過沖量和標(biāo)準(zhǔn)差。如果標(biāo)準(zhǔn)差大于平均值的50%說明系統(tǒng)里存在隨機(jī)擾動(dòng)優(yōu)先檢查機(jī)械間隙和濾波穩(wěn)定性。這個(gè)測(cè)試的價(jià)值在于它可以把整個(gè)系統(tǒng)的性能壓縮成一個(gè)數(shù)字往返時(shí)間、平均過沖、穩(wěn)態(tài)抖動(dòng)幅度。不同參數(shù)之間的對(duì)比就變得非常直觀不再靠手感拍板。另一個(gè)驗(yàn)證技巧是加“斜坡激勵(lì)”而不是階躍激勵(lì)。階躍目標(biāo)位置會(huì)讓球的初速度為零系統(tǒng)在最平穩(wěn)的狀態(tài)下啟動(dòng)測(cè)試不出動(dòng)態(tài)性能。斜坡激勵(lì)是讓目標(biāo)點(diǎn)以恒定速度移動(dòng)球需要持續(xù)跟蹤——這會(huì)逼出系統(tǒng)的速度誤差和相位滯后。你會(huì)發(fā)現(xiàn)同一個(gè)系統(tǒng)在低速斜坡下表現(xiàn)很好提高速度后開始拉出弧線這個(gè)“拉弧”的速度閾值就定義了系統(tǒng)的真正能力上限。做完這些測(cè)試你會(huì)對(duì)項(xiàng)目的上限和下限都有體感。我當(dāng)年把系統(tǒng)調(diào)到能穩(wěn)定跑一個(gè)直徑25厘米的圓之后又花了兩個(gè)晚上壓邊界才發(fā)現(xiàn)原來系統(tǒng)在反向切換時(shí)有一小段“死區(qū)”沒有被PID覆蓋。這個(gè)死區(qū)不是控制算法的問題而是舵機(jī)在中位附近的齒輪回程差——機(jī)械問題優(yōu)化完后代碼一行沒改跑圓誤差直接降了40%。所以我的習(xí)慣一直是先懷疑機(jī)械結(jié)構(gòu)再懷疑視覺延遲最后才是PID參數(shù)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取