2008年7月31日木曜日

LQGによる倒立振り子の制御実験

久しぶりにロボット的なものを作りたくなったので
どうせなら制御理論の検証ができるものを…
というわけで、Segway的な倒立振り子を作ってみた。

全体図



機械部分は入手性がよくて組み立て簡単な田宮模型の部品で固めました。
本体はユニバーサルプレートで、たまたま手に入った透明プラスチックバージョンを使ってます。
車輪はナロータイヤセット、ギアはハイパワーギアボックスHEだったと思います。
もうちょっとギア比が低いハイスピードギアボックスの方がベターかもしれません。

電池ボックスは熱に強い金属のやつを買ってきました。
一度熱で端子付近のプラスチックが溶けたことがあるので…

回路を実装する基板はSunhayatoのICB-88

電池ボックスも基板もいい感じにユニバーサルプレートにくっつきます。

回路


回路も今後の補修のために部品の入手性がいいやつで…

右の緑色の基板はトランジスタ技術の付録についてたR8C/Tinyの基板です。
これはSunhayatoからも互換性のあるものが出てますね。

真ん中の青色はSunhayatoの加速度センサーモジュールMM-2860

左の青い基板は同じくSunhayatoのモータードライバモジュールMM-531です。
電流容量0.7Aは心もとないので、2回路をパラレルにして使っています。
同じチップなら特性もわりとそろっているので問題ないと思いますが
あんまり誉められたもんじゃないですね。

左下のディスクリート部品的な部分で2.4Vの電源から3.3Vの電源を作ってます。
モーターの電源は電池直結です。

右端のコネクターはE8aエミュレータを接続するためのもので
上の3線は角速度ジャイロ(KRG-3)
下の2線はデバッグ用のブザー
左の4線は電池とモーターです。

側面




機械部分にあんまりこりたくないのでユニバーサルプレートと
ねじとスペーサーでしのいでいます。
基板を固定するビスがかなり長いのは転倒時に基板が地面に当たるのを防ぐためです。

モーター



モーターについてるセラミックコンデンサはブラシで発生するノイズを
吸収するためのものです。
マイコンと一緒にDCモーターを使う場合には必須らしいです。
たしかに昔PICマイコンを使ってたときにはこれで誤作動しなくなりましたが
最近のマイコンでも必要なのだろうか…

ちなみにエンコーダはついてないので
車輪の回転角は制御していません。角速度のみの制御です。

制御



最初は適当にPID的な制御でも立つかなーと思っていたのですが
意外とチューニングに苦戦したので
おとなしくモデルを構築してLQGを使ってみました。
制御器が不安定システムになるようなので
まぁなるべく極が左の方に来るように調節しています。
制御器は3次のシステムで制御周期は10msです。
R8Cでこの制御周期だと5次くらいまでなら何とかなるかな〜という感じでしょうか。

やっぱりモーター周りのモデルが怪しいのですが、
ロバスト制御の代名詞であるH∞制御とかだとこの手の怪しさは扱いにくいですね。
そのあたりを扱える理論が必要なのだろうか…

2008年4月22日火曜日

MATLABで無名関数

ずっと先輩のコードとかを見て何となく
MATLABのプログラムを書いていたんだけども、
改めてチュートリアルとか読んでみると知らなかった機能が結構ある。

中でも無名関数があったのを知らなかったのは大分損してたかも。
ちなみに使い方はこんな感じ。
>> f=@(x,y) x^2+y^2

f =

  @(x,y)x^2+y^2

>> f(1,3)

ans =

  10

>>



2008年4月21日月曜日

MATLABで図をエクスポートする時に軸が変化する問題

MATLABのFigureをEPSにしようと思って保存すると、
こんな感じの図を保存したのに,


こんな感じに軸が粗くなっちゃうことがよくあります。
これはMATLABがEPSとかAIファイルへのエクスポート時に
文字のサイズを大きくしようとした結果レイアウトが変わることが原因ぽいです。
Figureのエクスポートの設定でフォントのサイズを変えないようにするとか、
スケーリング時の最小値を小さい値にしておくと期待通りの結果になります。


こんな感じに設定すると

こんな感じの結果が得られます。