二輪倒立振子の制御シミュレーション
32 views (last 30 days)
Show older comments
初めまして
現在、独立2輪型倒立振子のシミュレーションをするために
「simscape multibody」を使ってシミュレーション環境を作っています。
大まかな組み立てを以下に示します。
- ワールド座標系に地面モデルを剛結合
- ロボットの車軸中心にワールドを平行移動する用の座標系を作成
- ロボットの姿勢変化を表す座標系を作成
- ワールド座標系と2で作った座標系を「Planar Joint」で結ぶ
- 2で作った座標系と3で作った座標系を「Revolute Joint」で結ぶ
- 3で作った座標系とロボットのボディを剛結合する
- ロボットの両輪を「Revolute Joint」でボディに結ぶ
ロボットのワールド上の平行移動は、車輪の角速度とボディの姿勢変化(角速度)を基にPlanar Jointに入力しています。
ここでロボットの挙動を確かめるために、車輪への入力を0(角速度=0)にした状態でどのような動きをみせるか確認しました。
するとロボットは前方へ倒れ、1回転した後にその勢いを残したままもう1回転…。回転は止まらず、勢いもどんどん増していく。
といった挙動を見せました。
ロボットと地面の衝突は考えていないので、お互いが衝突しないのは構わないのですが、
回転が止まらずに勢いが増していくことの原因とそれを防ぐための対策が思いつかず困っています。
なにか解決策はありますでしょうか。
simulinkのデータは下記のgithubにおいてあります。
よろしくお願いします。
0 Comments
Answers (3)
Norihiro Kobayashi
on 22 May 2019
はじめまして、モデルしっかりとは確認できておらず恐縮ですが、みたところ、タイヤ、BodyそれぞれのRevolute Jointの角度から並進、回転を計算しているようですが、この計算式が想定外の動作が起きていると予想されます。
Bodyの回転を0にすると前進が回避できることだけは確認を致しました。
タイヤの摩擦などを直接モデリングしにくいため、今回のようなモデルを構築頂いていると理解しましたが、
以上ご参考になりましたら幸いです。
Hiroumi Mita
on 5 Jun 2019
>ロボットと地面の衝突は考えていないので、お互いが衝突しないのは構わないのですが、
>回転が止まらずに勢いが増していくことの原因とそれを防ぐための対策が思いつかず困っています。
>なにか解決策はありますでしょうか。
このシステムにおいて、
linear_model.mを実行すると、このシステムの伝達関数が得られます。
このシステムのzpk表現の伝達関数は
zpk_P = zpk(ss_P)
zpk_P =
-57.466 (s+3.418) (s^2 - 5.081s + 17.36)
----------------------------------------
s (s-5.974) (s+5.974) (s+27.64)
となり、s=5.974(>0)は、指数発散極となるので、システムは発散します。
もし、例えば、この発散が重力に負けてだんだん弱まるようにするのであれば
ロボットの本体の回転軸に、粘性摩擦(-C*dθ/dt)のような回転エネルギーを
減少させる力学要素をモデルに加えればよいと思います。
さて、このシステムは上記のように、現状は指数発散極を持つので
動きが発散するのは当然です。上記は、物理モデル的にシステムのふるまいがあるところで止まるようにするわけです。
別の方法としては、
状態フィードバック制御をかけて、フィード制御がかけられた閉ループの
極を安定側(複素平面の虚軸から見て右側)に移動させられれば
、システムは安定になるわけです。これが、いわゆる倒立振り子の制御です。
最終的にはそうされたいのだろうと推測しますが、もし、そうなら次のように
すこしずつ進めることをお勧めします。
まず、
#1. 本体だけのモデルを線形化して、状態フィードバック設計
倒立できることを確認
#2. #1.ができたら、
本体+タイヤのモデルを線形化して、状態フィードバック設計
倒立できることを確認
Hiroumi Mita
on 14 Jun 2019
最も簡単な方法なら、
Revolute JointのBlock Parameterに
Internal; Mechanicsがあります。
そこで、
#1.Spring Stiffness (バネ剛性)
#2. Damping Coefficient (ダンピング係数)
という2つのパラメータがあります。
#1. はRevolute Jointの回転軸回りの回転バネの固さ
#2. はRevolute Jointの回転軸回りの粘性係数
を示します。#2. に適当な値を入れれば回転粘性の特性を持たせることができます。
0 Comments
See Also
Categories
Find more on アセンブリ in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!