由於電機以及機械裝配上的差異,採用雙輪差動的機器人,如果用速度閉環控制,給定相同的左右輪速,基本上都不走直線。有的解決方案是將左右輪碼盤計讀數的差作為被控對象,通過PID控制演算法將讀數偏差控制為0,從而使機器人走直線。但如果機器人要轉彎,該怎麼辦?


謝邀。分享一點個人經驗,雙輪差速小車是利用的差速轉向,如果想讓其走直線,就要讓兩個輪子的速度相同。輪子品質、機械加工與安裝多多少少存在誤差。要讓小車跑直我想先從兩個角度分析一下跑不直的原因1:如果要將整個系統做好,那最好的方法即是將可以控制的機械誤差降低到最小(比如,買輪轂大小一樣的車輪,兩個電機減速箱也一樣,兩個輪子處於同一根軸,輪子也相互平行)然後再加PID(注意:之前有兩個電機一樣,然後我就以為一樣,實際上減速箱有些差別,這樣就算PID調的再好也跑不直,你懂吧)2:如果必須用現有的車去跑直線,電機輪子車結構都無法改變,單純從控制來說,也可以,就是處理好這個差出來的速度。但是做的效果不一定好。方法如下:讀取兩個編碼器的電機速度值,然後實時列印,然後比著直尺拖出一條比較長的直線,多拖幾次。觀察這個兩個速度值的偏差,如果偏差很小,可能和機械部分的原因關係不大,有可能是你控制演算法的問題。如果很大,那我覺得是電機部分可能有問題,不是編碼器,就是減速箱不統一。可能還需要之後需要把那部分誤差補償掉,也就是導致它偏移的那部分兩個輪子速度的差值。/如果加了PID轉彎就是令兩個輪子差速,動手去跑一下吧,有些完全想明白的再做有什麼意思呢。


我反而從根本上覺得只從自身上拿feedback的系統不可能走直線(/長時間下穩定地走直線),最起碼要用些IMU之類的東西 或者藉助環境(牆或地面標記)。

如果只從輪子碼盤上拿feedback,首先左右輪子的品質和尺寸不可能調節好(加offset去補償也是要基於輪子是規則的圓形),其次就算輪子搞好了,地面又無法被控制 可能不平、可能灰塵多,最後最大的問題是odometry系統的誤差是會被累積的 是被積分的,時間越久 表現越離譜,而不從環境拿feedback的系統對這個積分的誤差又不自知。

所以如果我是題主的話,我會考慮加其他sensor啦,不會在機械控制上花太多功夫,機械結構再精密 最終表現的上限也是有限的。


以前做過一個雙輪車的項目。所謂的走直線其實是與速度控制相垂直的維度上的控制,是不同於速度閉環的維度。也就是說在控制此類機器人的時候應該採用兩個閉環,一個速度閉環和一個方向閉環。你可以把兩邊電機速度的差值作為被控對象進行控制,輸入是車身角度,當你需要走直線的時候就按照預期值為0進行控制,當你要轉彎的時候設定某個角度即可。至於車身角度怎麼做,要麼弄個陀螺儀,或者直接用電機轉速的差值(兩個輪子的速度差值就代表著車身的角速度),然後就積分,對角速度積分就是角度。不過要注意的是這種做法其實從模型的角度來看並不好,但這種方法的控制已經挺夠用的了。自己做出來的小車能夠較快的跑完飛思卡爾的賽道。如果要更好的效果的話加入模糊控制也不錯。其實這種系統是挺適合用模糊控制來解決的,不過要看你自己是什麼樣的需求。

當然最最重要的,就像其他大部分的答主所說的,就是機械結構要做得好。本人血與淚的教訓就是能用機械結構解決的問題千萬不要用高級的控制手段來解決,一定要從機械和結構的角度入手。輪軸一定要垂直,輪胎間一定要平行,輪胎本身一定要好,底盤一定要牢靠。具體怎麼做感覺別的答主都回答的挺好的= =


我之前看過一個機器人工程師寫的文章,他說誤差盡量在機械部分解決,從源頭上解決,然後再從演算法上糾正,

題主可以首先加固兩個減速組電機與車體的連接,使兩個輪子儘可能的平行,擰緊輪子的緊固螺絲

接著試一下用兩路pwm驅動兩個電機,先不要用編碼器 讓一路pwm占空比不變 然後一次次調節另一路pwm占空比 直到小車能在地上直線走為止 接著記錄兩個pwm的差值 注意正負 以後的兩路pwm都是這樣的差值就可以了

最後我認為,誤差主要出在輪子上 可以買質量好點的電機和輪胎(公差控制的好) 就能從根源上解決問題


要分清楚的是,車子是在起步時有偏移還是持續有偏移(走成一個圈了)。

只是起步走斜了的情況,很可能是由重心偏,兩輪抓地力不平均造成,需要調整重心。

持續偏移的情況,可以先看看兩輪的編碼器累計數。如果應該前行,但兩輪的編碼計數差持續上升(即編碼準確,車子繞圈),基本上是演算法的問題。

如果編碼器計數一樣的話,可能是編碼器的問題,或是齒輪比的問題。

如果僅是有少許偏差,這是無可避免的。畢竟編碼器轉動=輪子轉動=車子移動只是理想情況。

轉成閉環在位置而非速度上應該無甚幫助,畢竟方位角偏了就是偏了。


把我難住了,不清楚怎麼計算。我接觸到的鮮有這麼精準計算的。之前的思路都是停下來原地轉向,然後繼續前進。


推薦閱讀:
相关文章