解算與PID閉環(huán)控制實戰(zhàn)指南)
麥克納姆輪底盤在機器人圈子里已經(jīng)不是什么新鮮東西了但真正能把“跑得直、轉(zhuǎn)得穩(wěn)、橫移不飄”做到位的人其實不多。問題通常出在兩個環(huán)節(jié)一是運動學(xué)解算沒吃透四個輪子的速度分配全靠感覺二是電機閉環(huán)沒調(diào)好轉(zhuǎn)速指令下去了實際輪子根本沒跟上。如果你是做機器人競賽、AGV小車或者服務(wù)機器人底盤的這篇文章正好能幫你把這兩個核心問題一次性理清楚。全文不繞彎子直接講運動學(xué)公式推導(dǎo)、代碼實現(xiàn)、硬件搭法和PID調(diào)參的實戰(zhàn)經(jīng)驗。先說清楚這篇內(nèi)容能解決什么當(dāng)你給底盤一個速度指令時四個麥克納姆輪各自該轉(zhuǎn)多快這是運動學(xué)解算的事當(dāng)你發(fā)出轉(zhuǎn)速指令后電機是否真的轉(zhuǎn)到了目標(biāo)轉(zhuǎn)速這是PID閉環(huán)控制的事。兩件事連起來就是一套完整的底盤運動控制方案。以下是基于我多次實際調(diào)底盤的經(jīng)驗整理出來的完整流程適合有單片機基礎(chǔ)、正在做移動機器人底盤的開發(fā)者參考。1. 麥克納姆輪底盤運動解算的基礎(chǔ)認(rèn)知1.1 麥輪為什么能“橫著走”麥克納姆輪和普通輪子最大的區(qū)別在于輪轂周圍斜向安裝了一圈無動力的小輥子。這些輥子與輪子主軸之間一般是45度夾角輥子本身可以在受到側(cè)向力時自由轉(zhuǎn)動。正因為輥子的存在輪子轉(zhuǎn)動時施加給地面的摩擦力方向并不是沿著輪子軸線而是沿著輥子的軸線分解開了。打個比方普通輪子像是你穿了一雙防滑鞋走路每一步都嚴(yán)格踩在前進(jìn)方向上麥克納姆輪則像是穿著旱冰鞋卻把腳歪著踩地面吃到的力自然就分了方向。單個麥輪產(chǎn)生的推力并不正對正前方而是有一個斜向分量。四個輪子的斜向推力經(jīng)過矢量疊加后就實現(xiàn)了前進(jìn)、橫移、旋轉(zhuǎn)以及任意組合的斜向運動。這也解釋了為什么麥輪底盤容易出問題任何一個輪子哪怕只有一點速度偏差疊加出來的合力就不是你想要的方向車身就會跑偏或者打轉(zhuǎn)。所以麥輪底盤對四個輪子的轉(zhuǎn)速一致性要求極高這種一致性的保障只能靠閉環(huán)控制來完成這也是本文后續(xù)要重點展開的內(nèi)容。1.2 底盤運動學(xué)模型從速度到輪速描述一個麥輪底盤在平面上的運動通常用三個自由度就夠了沿車身坐標(biāo)系x軸的前進(jìn)速度vx、沿y軸的橫移速度vy、以及繞底盤中心旋轉(zhuǎn)的角速度omega。你給控制器的目標(biāo)量往往是這三個值控制器需要做的是把這三個值轉(zhuǎn)換成四個輪子的轉(zhuǎn)速。這里有一點特別容易踩坑vx和vy的方向是相對于車身坐標(biāo)系還是世界坐標(biāo)系做底盤控制時一般是相對于車身坐標(biāo)系。如果你想讓小車在世界坐標(biāo)系里沿某個方向走需要在外部先做一次坐標(biāo)旋轉(zhuǎn)而不是直接丟給底盤。很多人在這一步搞混導(dǎo)致小車在旋轉(zhuǎn)過程中運動路線完全錯誤。運動學(xué)逆解的基本思路是假設(shè)底盤是一個剛體那么底盤上任意一點的速度等于質(zhì)心的平移速度疊加因自身旋轉(zhuǎn)產(chǎn)生的線速度。四個輪子安裝在底盤四個角上已知車輛半寬b和半軸距a于是每個輪子中心點的線速度就可以用vx、vy和omega表示出來。由于輪子的安裝方向左前、右前、左后、右后以及輥子斜角方向各不相同每個輪子的輪軸方向上的速度分量表達(dá)式也不一樣。這個推導(dǎo)過程不復(fù)雜但是相當(dāng)繁瑣下面直接給出最終結(jié)果。2. 運動學(xué)逆解與正解核心代碼實現(xiàn)2.1 運動學(xué)公式里的參數(shù)到底怎么設(shè)先定義幾個參數(shù)vx表示底盤沿車身前方方向的線速度單位取m/svy表示沿車身左方向的線速度單位取m/somega表示底盤逆時針方向的角速度單位取rad/s。另外需要兩個機械尺寸參數(shù)L代表前后輪軸距的一半也就是底盤中心到前輪中心的縱向距離W代表左右輪距的一半也就是底盤中心到左輪中心的橫向距離。這里需要特別提醒L和W一定要量準(zhǔn)。我見過不少人直接把底盤的長和寬除以2就填進(jìn)去了但很多底盤的重心并不在幾何中心如果重心偏得厲害這個算法在急加速和急停的時候會出現(xiàn)可見的車身旋轉(zhuǎn)。嚴(yán)謹(jǐn)?shù)淖龇ㄊ菍崪y底盤四輪接地點的幾何中心若重心明顯偏移要么修正L和W的值要么在控制層加一點角速度前饋補償。單位也務(wù)必統(tǒng)一。麥輪運動學(xué)解算最明顯的錯誤之一就是vx、vy用m/somega用rad/s結(jié)果輪子速度算出來之后直接乘了輪半徑換算成角速度時把π寫錯導(dǎo)致實際轉(zhuǎn)速差好幾倍。這類問題一旦出現(xiàn)小車的表現(xiàn)會非常詭異——前進(jìn)速度基本正常但一轉(zhuǎn)向就擰成一團(tuán)。建議在程序里所有中間量都用SI單位制只在輸出給電機驅(qū)動器之前再轉(zhuǎn)換為電機的實際轉(zhuǎn)速單位。2.2 C語言實現(xiàn)運動學(xué)逆解四行公式解決四個輪子運動學(xué)逆解的正確公式以常見的“X型”麥輪布局為例前輪八字朝外展開如下// 輸入vx 前后速度vy 左右速度omega 旋轉(zhuǎn)角速度 // 輸出四個輪子的線速度m/s void kinematics_inverse(float vx, float vy, float omega, float *fl, float *fr, float *rl, float *rr) { // 機械參數(shù) float L 0.15f; // 半軸距單位米 float W 0.18f; // 半輪距單位米 *fl vx - vy - (L W) * omega; *fr vx vy (L W) * omega; *rl vx vy - (L W) * omega; *rr vx - vy (L W) * omega; }看到這里你可能有個疑問為什么系數(shù)是(LW)而不是別的因為角速度omega在四個輪子位置產(chǎn)生的切向線速度大小是omega乘以該點到質(zhì)心的距離取半軸距與半輪距之和即可。如果底盤不是嚴(yán)格的矩形分布比如輪子前后距離和左右距離差別很大系數(shù)就要分別處理但大多數(shù)底盤都是矩形分布直接用(LW)沒有問題。算出來的結(jié)果單位是m/s下一步需要除以輪子的半徑得到輪子的角速度rad/s再根據(jù)減速比換算成電機的目標(biāo)轉(zhuǎn)速rpm或編碼器計數(shù)速度。這一步在正式寫代碼時必須做好單位換算核心原因是后面的PID控制需要的是“每秒編碼器脈沖數(shù)”這種離散反饋值而不是連續(xù)物理量。// 線速度轉(zhuǎn)輪子角速度 float wheel_linear_velocity fl; // m/s float wheel_angular_velocity wheel_linear_velocity / wheel_radius; // rad/s float motor_speed_rpm wheel_angular_velocity * 60.0f / (2.0f * M_PI) * gear_ratio;整體流程就是設(shè)定速度 → 逆解得到四輪線速度 → 除以半徑并乘減速比 → 得到目標(biāo)轉(zhuǎn)速 → 送入PID循環(huán)與編碼器反饋值做差輸出PWM占空比。2.3 運動學(xué)正解閉環(huán)反饋的數(shù)據(jù)來源運動學(xué)正解用在什么地方主要是兩個方面一是里程計推算二是閉環(huán)控制中的速度觀測。逆解是把“期望速度”變成“輪子目標(biāo)轉(zhuǎn)速”而正解是把“四個輪子的實際轉(zhuǎn)速”反推回“底盤當(dāng)前的實際速度”。有了這個實際速度你才能知道小車當(dāng)前是不是真的在按照指令走。正解的公式其實就是把逆解那組方程反解出來。因為三個未知量、四個方程是超定方程組簡單處理方式是取線性組合。void kinematics_forward(float fl, float fr, float rl, float rr, float *vx, float *vy, float *omega) { float L 0.15f; float W 0.18f; *vx (fl fr rl rr) / 4.0f; *vy (-fl fr rl - rr) / 4.0f; *omega (-fl fr - rl rr) / (4.0f * (L W)); }這個正解公式的意義在于你把四個編碼器的實際讀數(shù)讀回來就能解出底盤的真實速度和角速度。然后在主控里做一個觀測器或者直接用這個值與目標(biāo)值做比較就能判斷底盤是不是跑歪了。精度要求高的場景會再用IMU數(shù)據(jù)對這個結(jié)果做融合但基礎(chǔ)的正解已經(jīng)能應(yīng)付大多數(shù)情況。有一點要說明因為編碼器反饋的是輪子的轉(zhuǎn)速而麥克納姆輪在實際轉(zhuǎn)動時輥子會產(chǎn)生一定的滑移所以正解算出來的底盤速度和真實地面上走過的速度會有誤差。這個誤差在軟質(zhì)地面上尤其明顯硬質(zhì)平整地面會好很多。這也是麥輪底盤做高精度里程計時的先天短板需要配合其他傳感器修正。3. 硬件選型與底盤閉環(huán)控制的搭建3.1 電機、編碼器、驅(qū)動板怎么搭配才不拖后腿運動學(xué)解算做得再好硬件跟不上也白搭。麥克納姆輪底盤對電機的要求有兩點響應(yīng)快、轉(zhuǎn)速反饋精度足。響應(yīng)快主要看電機和驅(qū)動器的動態(tài)特性轉(zhuǎn)速反饋精度取決于編碼器分辨率。個人建議選帶霍爾編碼器的直流減速電機或者帶編碼器的無刷電機。直流減速電機便宜、控制簡單、低速力矩足夠適合中小型底盤無刷電機效率高、壽命長適合高速場景。編碼器分辨率建議至少每圈300線以上如果控制轉(zhuǎn)速范圍較大最好直接上500線甚至1000線。我用過200線的編碼器低速時PID的反饋信號抖動明顯調(diào)穩(wěn)需要花不少功夫后來換成500線之后低速穩(wěn)定性一下就上來了。驅(qū)動板的選擇主要看電流。很多小車主控板上的電機驅(qū)動電流不夠帶載啟動或者遇到輕微的卡頓時電機會瞬間掉速PID拼命補PWM也無濟(jì)于事。穩(wěn)妥的做法是估算底盤滿載時單電機峰值電流然后驅(qū)動板額定電流留出50%以上裕量。主控方面STM32F103系列跑四個電機的編碼器計數(shù)和PID循環(huán)夠用如果還要跑運動規(guī)劃、SLAM之類的高負(fù)載任務(wù)建議換更高性能的芯片或多核架構(gòu)。3.2 為什么必須上PID閉環(huán)開環(huán)直驅(qū)到底差在哪開環(huán)控制是什么就是你給電機一個PWM占空比電機努力轉(zhuǎn)但你完全不關(guān)心它實際轉(zhuǎn)速。占空比和轉(zhuǎn)速之間不是嚴(yán)格的線性關(guān)系尤其是直流電機負(fù)載一變、電池電壓一變同樣的占空比轉(zhuǎn)速就變了。麥輪底盤四個輪子如果各自轉(zhuǎn)速和期望值有偏差底盤走的軌跡就會歪這一點我在開環(huán)狀態(tài)下試過非常多次在平整的地面還能勉強直行一上斜坡一個輪子打滑整個車的方向當(dāng)場就崩了。閉環(huán)控制的思路則是編碼器實時測量電機轉(zhuǎn)速PID控制器根據(jù)“目標(biāo)轉(zhuǎn)速”和“實際轉(zhuǎn)速”的誤差動態(tài)調(diào)節(jié)PWM占空比讓實際轉(zhuǎn)速不斷靠近目標(biāo)轉(zhuǎn)速。這有點像你開車時踩油門控制車速眼睛編碼器看到車速慢了腳PID就稍微加點油門車速快了就松一點。不需要知道路面坡度、風(fēng)阻這些具體參數(shù)只需要根據(jù)偏差修正就行。對麥輪底盤而言PID閉環(huán)最核心的價值不是讓單個輪子轉(zhuǎn)得更精準(zhǔn)而是讓四個輪子之間的誤差被有效收斂這樣疊加出來的底盤運動才穩(wěn)定。實測下來四輪閉環(huán)之后底盤直線行駛的偏移量能比開環(huán)縮小十倍以上。3.3 轉(zhuǎn)速環(huán)PID的實現(xiàn)編碼器測速與PWM輸出在STM32上做轉(zhuǎn)速閉環(huán)典型做法是用定時器編碼器模式采集正交編碼器信號同時用另一個定時器產(chǎn)生PWM驅(qū)動電機。編碼器模式會自動對A、B相進(jìn)行4倍頻處理500線編碼器實際測速分辨率就是2000個脈沖每圈這在大多數(shù)底盤控制里足夠細(xì)膩。轉(zhuǎn)速采集有兩個常用途徑一種是在固定時間窗口內(nèi)數(shù)脈沖數(shù)簡單但低速時更新頻率太低另一種是測量相鄰兩個脈沖之間的時間間隔也就是所謂的M法、T法、M/T法測速。工程上常用的方案是M法測速加低速切換具體來說當(dāng)轉(zhuǎn)速高時數(shù)脈沖當(dāng)轉(zhuǎn)速低時測脈寬兩者結(jié)合可以在寬速度范圍內(nèi)都保持較好的分辨率。PID計算頻率建議設(shè)在100Hz到1000Hz之間。我做一些室內(nèi)小車用的200Hz已經(jīng)能滿足大多數(shù)底盤控制場景。頻率太低會讓響應(yīng)滯后底盤原地旋轉(zhuǎn)時能明顯感覺到“遲頓感”頻率太高也沒有必要因為直流電機自身的機電時間常數(shù)就在幾十毫秒量級你算得再快電機也跟不上。PID輸出量最終映射到PWM占空比。這里要注意電機驅(qū)動有死區(qū)PWM小于一定占空比時電機根本不轉(zhuǎn)。一般做法是設(shè)置一個最小占空比閾值比如5%低于閾值的輸出直接歸零避免電機嗡嗡響在PID輸出進(jìn)入這個區(qū)間時做分段線性映射讓電機在低速時也有平滑的轉(zhuǎn)速響應(yīng)。4. PID調(diào)參實戰(zhàn)從拉不開車到穩(wěn)定跟速4.1 調(diào)參前必須完成的三個準(zhǔn)備動作拿到一套新的底盤別急著調(diào)PID參數(shù)先把下面三項基礎(chǔ)工作做完否則調(diào)半天你也說不清問題是參數(shù)問題還是機械問題。第一確認(rèn)四個電機的轉(zhuǎn)動方向與編碼器反饋極性一致。給一個正PWM時前左輪應(yīng)該正轉(zhuǎn)同時編碼器計數(shù)值應(yīng)該增加。如果方向反了PID會變成一個正反饋系統(tǒng)輸出越調(diào)越大聽起來跟失控一樣。最好在代碼里做一個開環(huán)測試手動給固定占空比觀察每個輪子的轉(zhuǎn)向和編碼器的計數(shù)方向記錄下來形成一張對照表。第二測定電機的最大轉(zhuǎn)速和PWM的滿量程范圍。比如你的PWM周期是20000Hz滿幅占空比對應(yīng)1000那么先測出空載條件下電機能到達(dá)的最大編碼器計數(shù)速度。這一步?jīng)Q定了你的目標(biāo)轉(zhuǎn)速不會超出實際能力范圍PID積分項也不會因為一直飽和而失效。第三合理設(shè)置速度反饋的濾波。編碼器測速天生帶有量化噪聲尤其在低速時相鄰兩次測量值可能跳變很大。如果你直接把這個噪聲喂給PID的微分項會導(dǎo)致PWM輸出抖得厲害。建議在PID計算之前對測量值做一階低通濾波或者直接用滑動平均再送入控制器。濾波系數(shù)不要太大否則會帶來延遲我的經(jīng)驗是截止頻率放在轉(zhuǎn)速環(huán)帶寬的三到五倍。4.2 手把手調(diào)三參數(shù)先把P調(diào)穩(wěn)再加I和D調(diào)PID的第一步是先把I和D置零只保留比例P。給底盤一個恒定轉(zhuǎn)速目標(biāo)從較小的P值開始比如P10觀察電機實際轉(zhuǎn)速跟隨情況。如果轉(zhuǎn)速偏小而且穩(wěn)定在一個較低的值說明P太小逐步加大P值如果轉(zhuǎn)速出現(xiàn)周期性的持續(xù)振蕩說明P已經(jīng)過大回退一點找一個“臨界穩(wěn)定但不振蕩”的點在這個點附近P通常是最合適的初始值。一個我常用的判斷方法是讓底盤從靜止突然加速到目標(biāo)轉(zhuǎn)速記錄轉(zhuǎn)速階躍響應(yīng)曲線。P偏小時響應(yīng)曲線上升很慢永遠(yuǎn)到不了目標(biāo)值P合適時響應(yīng)曲線能快速到達(dá)目標(biāo)附近且不超調(diào)P偏大時曲線會在目標(biāo)值上下反復(fù)穿越形成振蕩。當(dāng)我調(diào)試一個全新的底盤時通常在半天內(nèi)就能利用這個現(xiàn)象找到一個不錯的P初值。P定下來之后再引入積分I。積分的作用是消除穩(wěn)態(tài)誤差。所謂穩(wěn)態(tài)誤差就是P控制下轉(zhuǎn)速穩(wěn)定在目標(biāo)轉(zhuǎn)速的95%附近而始終追不上那剩下的5%。這時逐步加大I轉(zhuǎn)速會越來越接近目標(biāo)值。I太大的表現(xiàn)是轉(zhuǎn)速出現(xiàn)低頻振蕩周期比較長并且會緩慢上下漂移聽著電機像在“喘氣”。一旦看到這個現(xiàn)象立刻把I降下來。最后加微分D。D的作用是抑制超調(diào)相當(dāng)于提前踩剎車。編碼器噪聲大的情況下D會產(chǎn)生高頻抖動這時候反而會讓系統(tǒng)發(fā)熱變大、聲音刺耳。所以D寧小勿大一般從零開始每次增加一點點觀察階躍響應(yīng)是否變得更干脆。如果發(fā)現(xiàn)加了D之后響應(yīng)反而變差或者電機聲音變尖說明D帶來的噪聲放大已經(jīng)壓過了它的抑制作用。4.3 實戰(zhàn)中的常見問題與排查速查表調(diào)參過程中最怕的其實是各種奇奇怪怪的現(xiàn)象分不清到底是哪個環(huán)節(jié)出了問題。我把這些年遇到的典型問題和對應(yīng)的排查思路整理成了下面這張表對照排查可以節(jié)約大量時間?,F(xiàn)象可能原因排查與對策底盤直行時往一邊偏同側(cè)輪子轉(zhuǎn)速偏低或輪子打滑用上位機同時讀四輪反饋轉(zhuǎn)速找出異常輪檢查驅(qū)動輸出和機械阻力原地旋轉(zhuǎn)時車身畫圈運動學(xué)逆解的L/W參數(shù)不準(zhǔn)重新實測半軸距和半輪距檢查坐標(biāo)方向定義與公式是否匹配電機發(fā)出高頻嘯叫底盤抖動PID微分項被編碼器噪聲放大降低D增加測速濾波檢查編碼器線纜是否遠(yuǎn)離電機動力線目標(biāo)轉(zhuǎn)速低時電機一頓一頓PWM死區(qū)沒有處理或PID輸出低于啟動閾值增加最小PWM輸出映射再疊加一個小幅前饋高速轉(zhuǎn)向時底盤有甩尾感轉(zhuǎn)速環(huán)響應(yīng)跟不上或者底盤重心偏高增加PID帶寬換低重心底盤必要時對加速度做限幅四輪都轉(zhuǎn)但底盤不走麥克納姆輪輥子磨損或卡死檢查輥子是否靈活轉(zhuǎn)動麥輪對地面清潔度要求較高排查這類問題有一個通用的思路先單輪后整車。把四個輪子分別獨立給相同的轉(zhuǎn)速指令觀察它們的實際反饋是否一致。這個測試能直接暴露機械阻力、驅(qū)動故障和編碼器問題。四輪轉(zhuǎn)速一致了再上整車的運動測試這時候如果還有問題基本都集中在運動學(xué)解算和整車機械上了。5. 一個容易被忽略的細(xì)節(jié)速度限幅與梯形加減速調(diào)好PID之后很多人在實際跑動中仍然會碰到一個問題底盤給一個較高的目標(biāo)速度小車猛地一下沖出去車身明顯有振蕩甚至發(fā)出“嘣”的一聲機械撞擊。這不是PID沒調(diào)好而是速度指令的突變程度太大了。任何物理系統(tǒng)都有慣性和響應(yīng)極限你直接給階躍速度指令PID控制器一定會在極短時間輸出大幅值從而引起過沖。解決方法是給目標(biāo)速度加一個斜率限幅或者梯形加減速規(guī)劃。通俗地說別讓目標(biāo)速度瞬間從0跳到1m/s而是讓它在0.2秒內(nèi)平滑地從0升到1m/s。這個008秒的斜率可以根據(jù)底盤的加速度能力來設(shè)定比如設(shè)定最大加速度為2m/s^2那么在程序里每毫秒增加的目標(biāo)速度不能超過0.002m/s。梯形加減速比S型曲線更容易實現(xiàn)且對大多數(shù)底盤足夠了。實測下來加了梯形加減速之后PID的調(diào)參壓力大幅降低因為目標(biāo)速度不再跳變PID的微分項也不會被激發(fā)底盤的啟停更加平順。這個方法的性價比特別高強烈建議操作。我個人的經(jīng)驗是在PID閉環(huán)的代碼架構(gòu)里把運動學(xué)逆解、速度規(guī)劃、PID循環(huán)分成三個獨立的模塊。運動學(xué)逆解只負(fù)責(zé)狀態(tài)轉(zhuǎn)換速度規(guī)劃負(fù)責(zé)生成平滑的目標(biāo)值PID只負(fù)責(zé)跟蹤。模塊之間通過結(jié)構(gòu)體傳參調(diào)參和排查問題都會非常方便尤其是后面要加入里程計融合、導(dǎo)航控制時這種分層的設(shè)計能省下大量時間。6. 更進(jìn)一步的擴(kuò)展方向主體功能跑通之后你可以在這個基礎(chǔ)上做幾個有意思的擴(kuò)展。第一個是加入IMU閉環(huán)融合用陀螺儀數(shù)據(jù)修正底盤的角速度誤差。因為麥輪在運動時輥子打滑會導(dǎo)致實際角速度和期望角速度有偏差I(lǐng)MU的角速度反饋能有效校正這個問題讓底盤旋轉(zhuǎn)更加精準(zhǔn)。第二個是整車的速度觀測器。比如通過四個輪子的碼盤反饋跑運動學(xué)正解得到底盤的估計速度再和IMU數(shù)據(jù)做互補濾波或卡爾曼濾波得到一個更準(zhǔn)確的速度和位姿估計。這個數(shù)據(jù)是后續(xù)做自動導(dǎo)航、路徑跟蹤的基礎(chǔ)。第三個是加入模型參考自適應(yīng)控制或者前饋。有些高端底盤在PID前饋里加入電流環(huán)的補償讓電機在變負(fù)載條件下依然有穩(wěn)定的轉(zhuǎn)速。這些內(nèi)容本質(zhì)上還是在底層閉環(huán)上做文章基礎(chǔ)仍然是Motion Solve加上經(jīng)典的PID控制先把基礎(chǔ)做好再做這些擴(kuò)展會容易很多。說到底麥克納姆輪底盤控制并不是一個高不可攀的技術(shù)它核心就是運動學(xué)解算加閉環(huán)控制。我最深的體會是調(diào)好的底盤和沒調(diào)好的底盤開起來完全是兩臺車。技術(shù)點不復(fù)雜但每一步都需要細(xì)心和耐心尤其是機械參數(shù)測量和PID調(diào)參?;ㄒ粋€周末把這兩塊拿下你就能擁有一臺指哪走哪的麥輪底盤后面做路徑規(guī)劃、視覺導(dǎo)航都有了穩(wěn)固的底層支撐。