Webots仿真 一階倒立擺建模及LQR軌跡跟蹤(上)

 

Webots建模

我們首先要過一遍官方指導,瞭解node的相關概念:下圖爲一個solid node

一個有物理效果的實體(重力,碰撞)就必須有boundingObject ,shape,physics節點組成

多個solid可以在children目錄通過自身相對上級節點的座標變換串接起來

一個實體主要要由boundingObject ,shape,physics 即物理屬性 碰撞綁定形狀,形狀組成

箭頭從上到下依次是:

座標變換:參考座標系爲上一級座標系(如果是再樹中建立,就是以世界座標系爲參考,如果再children目錄中的solid及其派生節點,則是以children的座標原點變換(點擊children目錄就可以看到其對應的座標系))

rotation:四個參數,前三個定義一根旋轉軸,第四個爲角度

children:子節點用來連接其他東西,

contactMaterial:接觸材質,在樹最開始的worldInfo中設置

參數相關含義即英文含義,這裏主要定義接觸材質名稱,和摩擦係數

boundingObject:綁定碰撞形狀,參考官方例程。

physics:物理參數,參考官方例程:如果其爲空(NULL),其所在節點將不會移動,參考示例中的場地牆的案例

機器人建模需要的Robot節點和solid節點基本相同這裏就不再說明

開始修改模型

我們直接修改官方示例:

需要更改的項目將用其他顏色標出

我們將其另存爲新後就可以開始更改

藍綠色的字表示值是非默認值 

contactProperties:定義接觸面的相關參數

material:接觸面名稱

coulombFriction:摩擦係數

 

我們可以看到官方例程裏的碰撞綁定爲圖中紅色箭頭指示的紅色框;我們要將它和下面的物理屬性刪掉

因爲不知道什麼原因,這裏設置的質量會影響LQR控制器的控制;比如本來小車只有1KG的質量,但是如果你要在計算狀態空間方程時小車質量 設爲1KG 控制器控制的小車就會飛掉。

修改小車材質,使其透明 方便後續

在其中選擇 show joint axis 顯示關節軸,可以看到其中會有兩條條黑線:

其他顯示參數自行調整

藍色箭頭方向的爲小車導軌,紅色箭頭方向的就是擺杆的轉軸。白色線框爲小車碰撞邊界

 

SliderJoint :線性驅動器,參數名稱就是英文本意 ,從上到下爲

關節參數:關於初始位置,方向 ,限位,彈簧參數,阻尼係數

驅動器:線性馬達,位置傳感器,要記住驅動器名稱 後期的控制器需要它來調用API

 

現在可以看到:

箭頭所指的有一個顏色較暗的小座標系,這個是一個solid 節點質心的標誌,它的位置明顯不對勁

我們可以看到線性驅動器的endPoint的物理屬性,形狀和碰撞邊界表現爲小車,centerofmass爲默認,沒有偏移,所以這個節點的座標系原點應該是擺杆的質心,其質量爲1KG

 

我們將轉動關節HIP 的關節參數的position(初始位置)改爲0,方便讀取後續座標值,

anchor:轉軸原點,改不改對本例沒有影響。

可以看到 圖中大號座標系爲轉動關節endpoint 的座標系,其參考座標系爲上級,(即滑動關節endpoint),有興趣的可以自己改下參數觀察。

我們看下面物理參數部分,centerOFMass有值,y=-0.27 就是以endpoint爲參考,我們將其刪掉,或回覆默認值

這樣質心就會和endpoint solid的座標系重合,質心離轉軸等於擺杆的座標系Y軸數值

如果要修改擺杆長度,需要先修改endpoint的座標變換,在修改其children中的shape相關。

倒立擺控制率及屬性模型參考https://zhuanlan.zhihu.com/p/54071212

這裏僅給出狀態空間方程:

       

其中q:

控制器輸入U=-[K1 K2 K3 K4] X

X=[X,X_DOT,TH,TH_DOT],

K矩陣由matlab的LQR函數算出 代碼參照上述鏈接

控制器主要通過傳感器獲取位置和角度信息,計算狀態變量,傳給控制率來控制小車實現平衡。

這是控制效果,位置設置爲1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章