2019年11月24日 星期日

XOD和PID驅動的自平衡mBot

XOD和PID驅動的自平衡mBot

大家好!這是有關在XOD可視化編程環境中使用PID控制器的第三篇文章。我們已經學習瞭如何通過Makeblock將mBot平台編程為手動跟隨器機器人和直線跟隨器機器人。如果您錯過了以前的文章,請返回並從第一篇開始。我們不想停下來,但要充分利用PID控制器和mBot平台。
在最後的示例中,我們沒有過多地關注KiPID控制器因素。因此,對於一個新實驗,我們將告訴您如何製作一個行為直接取決於Ki參數的自平衡機器人
和以前一樣,我們gabbapeople/mbot-lib用新的節點和補丁更新了您可以在XOD網站上檢查更新並將其添加到XOD工作區。

將mBot變成滾筒機器人

首先,我們的機器人必須進行一些更改。為了使mBot感覺到平衡,我們需要一個IMU傳感器。在使用Makeblock的平台時,我們添加了“ Me 3軸加速度計和陀螺儀傳感器”。它基於流行的MPU6050芯片,並具有一組全面的功能。而且,它適合mBot,因此我們無需考慮將其連接到機箱。
第二件事是,我們拆解mBot並交換其組件,使其看起來像玻璃杯。IMU傳感器位於機器人頂部。電機設計為僅在一個位置安裝到機架,但是我們可以將它們移動到非標準位置。我們使用固定在機箱內部的3.7V Lipo電池為機器人供電。
看一下草圖,看看機器人設計的變化。

從IMU傳感器讀取數據

再次,我們從傳感器讀取數據來啟動XOD補丁。對於不倒翁機器人,補丁比以前的實驗要復雜得多。這是因為基於MPU6050芯片的“ Me 3軸加速度傳感器和陀螺儀傳感器”通過I2C進行通信。到目前為止,在XOD環境中該芯片尚無官方支持的節點。因此,我們創建了自己的節點mpu6050-yrp-linear-accel,這是一個Arduino庫包裝器。

mpu6050-yrp-linear-accel節點

為了使程序正常工作,我們使用了一些Arduino庫。這些庫應添加到XOD IDE客戶端。要添加Arduino庫,請打開XOD的安裝位置,然後將庫文件packages/xod-client-electron複製到文件夾。
下面的列表顯示了您需要復制的Arduino庫。
  • Jeff Rowberg I2CdevMPU6050庫。可以從GITHUB下載最新版本。
  • Arduino PinChangeInt庫。該庫用於控制控制器板上引腳上的中斷。
MPU6050芯片具有一個INT引腳,可用於將可用數據更改通知控制器。使用此引腳,您可以從傳感器獲取更準確的數據。Makeblock的“ Me 3軸加速度傳感器和陀螺儀傳感器”支持該INT引腳,我們將利用它。看一下下面圖片中的右圖釘。

“ Me 3軸加速度傳感器和陀螺儀傳感器”引腳

“ Me 3軸加速度傳感器和陀螺儀傳感器”帶有白色標籤,並通過I2C進行通信。mCore板上的所有四個RJ25端口都標有白色標籤,因此傳感器可以連接到其中的任何一個。我們將傳感器連接到mCore板上的RJ25端口1。
要固定INT銷釘,我們將mpu6050-yrp-linear-accel節點與鏈接rj25port-1-yellowrj25port-1-yellow節點將從RJ25端口1讀取數據更改並將其發送到該mpu6050-yrp-linear-accel節點。

連接INT引腳

有什麼輸入和輸出mpu6050-yrp-linear-accel讓我們來看看。
  • INIT —初始化傳感器的引腳;
  • UPD —觸發傳感器新讀數的引腳;
  • GXoffGYoffGZoff-陀螺儀偏移;
  • AXoffAYoffAZoff-加速度計偏移。
該偏置銷是可選的,用於校準傳感器以提高靈敏度並確定機器人本體上的安裝位置。默認情況下,偏移值設置為0。
  • ROLLPITCHYAW-旋轉角圍繞X,Y,Z軸;
  • laXlaYlaZ-沿X,Y線性加速度,Z軸;
  • DONE —報告已讀取數據的引腳。
對於滾筒機器人,我們不需要所有輸出值。我們將只用ROLL價值來經營INIT引腳值設置on boot,並將UPD引腳值設置為Continuously
現在,讓我們添加watch節點,將其鏈接到ROLL並上傳補丁。打開調試模式以查看ROLL值是什麼為了進行測試,我們將使機器人從平衡位置向不同方向偏離。

測試偏差
滾動值

ROLL值大約從4.6更改為57。如果機器人垂直站立,則該ROLL值約為46。由於未校準傳感器,因此得到瞭如此奇怪的值範圍。因此,讓我們開始吧。

校準傳感器

如何校準傳感器?
我們應指定偏移值GXoffGYoffGZoffAXoffAYoffAZoff陀螺儀和加速度計,其0現在是相等的。為了獲得該值,我們製作了mpu6050-calibrate節點。

MPU6050校準節點

校準只能執行一次。創建一個新的空臨時補丁並添加mpu6050-calibrate節點。用六個watch節點鏈接六個輸出引腳,並將其INIT設置On boot
將機器人固定在垂直位置,並使用調試模式部署補丁。等待不到一分鐘,節點將輸出必要的值。您可以寫下來不要忘記。

平衡位置
獲取偏移

對於我們的機器人[GXoff,GYoff,GXoff,AXoff,AYoff,AZoff],偏移量為[131、29,-99、1756,-2118、1554]。返回主補丁程序,我們將此值輸入到mpu6050-yrp-linear-accel節點的輸入引腳中,並進行新的調試測試以查看ROLL範圍如何變化。

校准後的滾動值

現在,將機器人沿不同的方向旋轉90度,我們獲得了ROLL從-89到89的幾乎完美範圍。這意味著我們已經對傳感器進行了很好的校準。新範圍對我們形成“錯誤”概念非常方便。

提出錯誤概念

mBot與地面的平衡度大約為87度。ROLL用於平衡位置值是約3度。我們將此值用作PID控制器的設定點並定義誤差。

提醒配方

偏離平衡位置會產生錯誤。查看下面的草圖,並檢查可能的狀態。

  • 機器人保持平衡。
與地面的角度約為87度;
ROLL值約為3;
誤差值等於0;
電機靜止不動。
  • 機器人向右偏斜。
與地面的角度在[0,87]度範圍內;
ROLL值在[3,89]範圍內;
錯誤值是負數;
電機逆時針旋轉。
  • 機器人向左偏斜。
與地面的角度在[87,180]度範圍內;
ROLL值在[-89,3]範圍內;
誤差值為正。
電機順時針旋轉。

完成補丁

現在完成補丁。添加pid-controller節點。

pid-controller節點

ROLL引腳連接到的輸入pid-controller不要忘記刪除watch節點,因為我們不再需要它。鏈接UPD控制器的銷與DONE所述傳感器的銷,以使pid-controller僅計算輸出,當新的數據到達。
我們尚未配置PID控制器係數,但是,我們已經可以將TARG引腳中的設置點設置為3。
在最後一步,我們將pid-controller電機與電動機連接起來我們的輸出連接pid-controllermbot-motors通過節點clip的節點。clip節點控制輸出,並保持在[-1,1]範圍內其值。

mbot-motors節點

如果您的電動機旋轉方向錯誤,請交換mCore板上的電動機M1和M2的連接。或者,使用subtract節點更改值的符號補丁完成。是時候調整pid控制器並觀察機器人的行為了。

調整PID控制器

什麼KpKiKd值平均為不倒翁機器人?
對於翻轉機器人,PID控制器的調整過程可能非常繁瑣。它比過去的示例更準確,您可以花費大量時間對其進行調整。請耐心等待,您肯定會找到合適的係數。

Kp係數

Kp係數確定機器人返回平衡位置的力。Kp較低時,電機沒有足夠的力使機器人返回平衡狀態。較高的Kp值會大大增加機器人從平衡狀態開始的振盪。由於平滑振盪Kp不應過高,同時Kp也不應過低以賦予機器人動力。
讓我們將其設置Kp為0.05並觀察機器人的行為。

Kp的0.05值

我們用手輕輕握住機器人,以嘗試感覺電動機的速度。此值似乎太小。電機幾乎沒有旋轉。機器人沒有足夠的力量自行校正。我們將其設置Kp為1.5。

Kp的1.5值

1.5的Kp值太高。這種流暢的振盪很難控制。和以前一樣,我們使用反複試驗法選擇平均值。我們設置Kp為0.155。

Kp的0.155值

氣因子

在我們以前的文章中,主要的PID控制器參數為KpKd,而Ki電位沒有得到充分釋放。對於自平衡機器人,其主要係數為KpKi僅使用這兩個參數就可以達到平衡狀態。
Ki確定機器人進行自我糾正的時間。機器人偏差越大,累積的絕對誤差值就越大,並且需要更多的力才能使機器人返回到平衡位置。從物理上講,Ki它不會影響電動機的速度,但會影響電動機的加速度。中心質量越高,加速度應該越高,否則校正機器人位置的力將不足。
讓我們將其設置Ki為0.05並停止用手握住機器人。

Ki的0.05值

mBot下降了,我們應該增加Ki速度來做出更快的響應。我們將其設置為0.5。

Ki的0.5值

更好,但我們仍然不滿意。我們逐漸增加該Ki值,直到機器人返回平衡位置。因此Ki,我們的機器人價值為1.195。

Ki的1.195值

Kd因子

通過更改Kd因子,可以微調機器人對錯誤的敏感度。它用於使機器人振盪快速或緩慢。我們的機器人將的0值保持在很好的平衡狀態Kd但是,我們將其從0稍微增加到0.0075,以使振盪更加尖銳。
為了顯示當Kd改變時振盪如何變化,我們決定增加Kd兩次。查看當Kd0.015 時機器人的行為

Kd的0.015值

振蕩的強烈增加會導致平衡的損失。我們保持Kd等於0.0075。

結論

總之,我們只能向您展示新的自動平衡機器人在我們周圍的騎行情況。

自平衡移動

您會看到它有時會向右或向左旋轉。發生這種情況是因為電機不同步。如果您想重複進行實驗,可以自己進行修復,但對於我們的課程而言,則沒有必要。
不尋常的任務很簡單。感謝PID控制器,XOD和Makeblock構造函數!回頭見。

沒有留言:

方便性、能量密度、安全性、應用場景等各方面表現都更優異的奈米液流電池最終能打敗鋰電池嗎?

  當莫妮卡開著她的電動車前往母親家時,車上的電池指示器顯示需要重新充電。她在一個充電站停下來,在加油站刷了信用卡,把噴嘴插入車內,並在5分鐘內將400升用過的奈米液體換成新的。在她等待的過程中,一輛油罐車開過來為充電站補充燃料,交換數萬升充滿電的燃料。莫妮卡關上她的電動車的加油...