大家好!這是有關在XOD可視化編程環境中使用PID控制器的第三篇文章。我們已經學習瞭如何通過Makeblock將mBot平台編程為手動跟隨器機器人和直線跟隨器機器人。如果您錯過了以前的文章,請返回並從第一篇開始。我們不想停下來,但要充分利用PID控制器和mBot平台。
在最後的示例中,我們沒有過多地關注
Ki
PID控制器的因素。因此,對於一個新實驗,我們將告訴您如何製作一個行為直接取決於Ki
參數的自平衡機器人。將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庫包裝器。
為了使程序正常工作,我們使用了一些Arduino庫。這些庫應添加到XOD IDE客戶端。要添加Arduino庫,請打開XOD的安裝位置,然後將庫文件
packages/xod-client-electron
夾複製到文件夾。
下面的列表顯示了您需要復制的Arduino庫。
- Jeff Rowberg 的I2Cdev和MPU6050庫。可以從GITHUB下載最新版本。
- Arduino 的PinChangeInt庫。該庫用於控制控制器板上引腳上的中斷。
MPU6050芯片具有一個
INT
引腳,可用於將可用數據更改通知控制器。使用此引腳,您可以從傳感器獲取更準確的數據。Makeblock的“ Me 3軸加速度傳感器和陀螺儀傳感器”支持該INT
引腳,我們將利用它。看一下下面圖片中的右圖釘。
“ Me 3軸加速度傳感器和陀螺儀傳感器”帶有白色標籤,並通過I2C進行通信。mCore板上的所有四個RJ25端口都標有白色標籤,因此傳感器可以連接到其中的任何一個。我們將傳感器連接到mCore板上的RJ25端口1。
要固定
INT
銷釘,我們將mpu6050-yrp-linear-accel
節點與鏈接rj25port-1-yellow
。該rj25port-1-yellow
節點將從RJ25端口1讀取數據更改並將其發送到該mpu6050-yrp-linear-accel
節點。
有什麼輸入和輸出
mpu6050-yrp-linear-accel
?讓我們來看看。INIT
—初始化傳感器的引腳;UPD
—觸發傳感器新讀數的引腳;GXoff
,GYoff
,GZoff
-陀螺儀偏移;AXoff
,AYoff
,AZoff
-加速度計偏移。
該偏置銷是可選的,用於校準傳感器以提高靈敏度並確定機器人本體上的安裝位置。默認情況下,偏移值設置為0。
ROLL
,PITCH
,YAW
-旋轉角圍繞X,Y,Z軸;laX
,laY
,laZ
-沿X,Y線性加速度,Z軸;DONE
—報告已讀取數據的引腳。
對於滾筒機器人,我們不需要所有輸出值。我們將只用
ROLL
價值來經營。將INIT
引腳值設置為on boot
,並將UPD
引腳值設置為Continuously
。
現在,讓我們添加
watch
節點,將其鏈接到ROLL
並上傳補丁。打開調試模式以查看ROLL
值是什麼。為了進行測試,我們將使機器人從平衡位置向不同方向偏離。

該
ROLL
值大約從4.6更改為57。如果機器人垂直站立,則該ROLL
值約為46。由於未校準傳感器,因此得到瞭如此奇怪的值範圍。因此,讓我們開始吧。校準傳感器
如何校準傳感器?
我們應指定偏移值
GXoff
,GYoff
,GZoff
,AXoff
,AYoff
,AZoff
陀螺儀和加速度計,其0現在是相等的。為了獲得該值,我們製作了mpu6050-calibrate
節點。
校準只能執行一次。創建一個新的空臨時補丁並添加
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
節點。
將
ROLL
引腳連接到的輸入pid-controller
。不要忘記刪除watch
節點,因為我們不再需要它。鏈接UPD
控制器的銷與DONE
所述傳感器的銷,以使pid-controller
僅計算輸出,當新的數據到達。
我們尚未配置PID控制器係數,但是,我們已經可以將
TARG
引腳中的設置點設置為3。
在最後一步,我們將
pid-controller
電機與電動機連接起來。我們的輸出連接pid-controller
到mbot-motors
通過節點clip
的節點。該clip
節點控制輸出,並保持在[-1,1]範圍內其值。
如果您的電動機旋轉方向錯誤,請交換mCore板上的電動機M1和M2的連接。或者,使用
subtract
節點更改值的符號。補丁完成。是時候調整pid控制器並觀察機器人的行為了。調整PID控制器
什麼
Kp
,Ki
和Kd
值平均為不倒翁機器人?
對於翻轉機器人,PID控制器的調整過程可能非常繁瑣。它比過去的示例更準確,您可以花費大量時間對其進行調整。請耐心等待,您肯定會找到合適的係數。
Kp係數
該
Kp
係數確定機器人返回平衡位置的力。Kp
值較低時,電機沒有足夠的力使機器人返回平衡狀態。較高的Kp
值會大大增加機器人從平衡狀態開始的振盪。由於平滑振盪Kp
不應過高,同時Kp
也不應過低以賦予機器人動力。
讓我們將其設置
Kp
為0.05並觀察機器人的行為。
我們用手輕輕握住機器人,以嘗試感覺電動機的速度。此值似乎太小。電機幾乎沒有旋轉。機器人沒有足夠的力量自行校正。我們將其設置
Kp
為1.5。
1.5的
Kp
值太高。這種流暢的振盪很難控制。和以前一樣,我們使用反複試驗法選擇平均值。我們設置Kp
為0.155。
氣因子
在我們以前的文章中,主要的PID控制器參數為
Kp
和Kd
,而Ki
電位沒有得到充分釋放。對於自平衡機器人,其主要係數為Kp
和Ki
。僅使用這兩個參數就可以達到平衡狀態。Ki
確定機器人進行自我糾正的時間。機器人偏差越大,累積的絕對誤差值就越大,並且需要更多的力才能使機器人返回到平衡位置。從物理上講,Ki
它不會影響電動機的速度,但會影響電動機的加速度。中心質量越高,加速度應該越高,否則校正機器人位置的力將不足。
讓我們將其設置
Ki
為0.05並停止用手握住機器人。
mBot下降了,我們應該增加
Ki
速度來做出更快的響應。我們將其設置為0.5。
更好,但我們仍然不滿意。我們逐漸增加該
Ki
值,直到機器人返回平衡位置。因此Ki
,我們的機器人的價值為1.195。
Kd因子
通過更改
Kd
因子,可以微調機器人對錯誤的敏感度。它用於使機器人振盪快速或緩慢。我們的機器人將的0值保持在很好的平衡狀態Kd
。但是,我們將其從0稍微增加到0.0075,以使振盪更加尖銳。
為了顯示當
Kd
值改變時振盪如何變化,我們決定增加Kd
兩次。查看當Kd
0.015 時機器人的行為。
振蕩的強烈增加會導致平衡的損失。我們保持
Kd
等於0.0075。結論
總之,我們只能向您展示新的自動平衡機器人在我們周圍的騎行情況。

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