質問: 二輪倒立振子の制御シミュレーション 初めまして 現在、独立2輪型倒立振子のシミュレーションをするために 「simscape multibody」を使ってシミュレーション環境を作っています。 大まかな組み立てを以下に示します。 ワールド座標系に地面モデルを剛結合 ロボットの車軸中心にワールドを平行移動する用の座標系を作成 ロボットの姿勢変化を表す座標系を作成 ワールド座標系と2で作った座標系を「planar joint」で結ぶ 2で作った座標系と3で作った座標系を「revolute joint」で結ぶ 3で作った座標系とロボットのボディを剛結合する ロボットの両輪を「revolute joint」でボディに結ぶ ロボットのワールド上の平行移動は、車輪の角速度とボディの姿勢変化(角速度)を基にplanar jointに入力しています。 ここでロボットの挙動を確かめるために、車輪への入力を0(角速度=0)にした状態でどのような動きをみせるか確認しました。 するとロボットは前方へ倒れ、1回転した後にその勢いを残したままもう1回転...。回転は止まらず、勢いもどんどん増していく。 といった挙動を見せました。 ロボットと地面の衝突は考えていないので、お互いが衝突しないのは構わないのですが、 回転が止まらずに勢いが増していくことの原因とそれを防ぐための対策が思いつかず困っています。 なにか解決策はありますでしょうか。 simulinkのデータは下記のgithubにおいてあります。 よろしくお願いします。 https://github.com/calm0815/balboa32u4-matlab/tree/master/simscapemultibody
回答: はじめまして、モデルしっかりとは確認できておらず恐縮ですが、みたところ、タイヤ、bodyそれぞれのrevolute jointの角度から並進、回転を計算しているようですが、この計算式が想定外の動作が起きていると予想されます。 bodyの回転を0にすると前進が回避できることだけは確認を致しました。 タイヤの摩擦などを直接モデリングしにくいため、今回のようなモデルを構築頂いていると理解しましたが、 もしかすると、こちらのライブラリをお使い頂くとより簡単にモデリングが可能かもしれません。 以上ご参考になりましたら幸いです。