角速度ジャイロセンサー

 ロボットを安定に倒れないように動作させるには、センサーが欠かせない。その1つが角速度を測るジャイロセンサー。これは、回転のスピードを測るもので、ロボットが倒れそうになれば、その倒れる回転速度が信号として測れる。その信号から倒れるのとは逆方向にモータを動かせばよいわけだ。
 現在の小型ロボットの多くは前後と左右の方向用に2個のジャイロセンサーを使っているものが多い。しかし、この場合ジャイロセンサーを胴体などに置くため、ロボットの姿勢が変わると足や手のサーボの回転軸とジャイロセンサーの軸が異なってしまう。したがって、直立に近い形の場合にしかセンサーは有効ではない。この問題を解決する単純な方法は、サーボ1個1個それぞれにジャイロを固定する方法だが、コストがかかる。そこで、我々は3個の直交するジャイロセンサーを用い、ロボットの姿勢を計算により求めて座標変換を行うことにより、いかなる姿勢においてもサーボモータの回転軸方向の角速度を正しく得られるようにしている。例えば、ジャイロで測った3軸の角速度がそれぞれωx、ωy、ωzで、角度θだけz軸を中心として胴体が回転していれば、各成分はωxcosθ-ωysinθ、ωxsinθ+ωycosθ、ωzに成る。高校で習った簡単な数学の知識で計算できる。

 現在は、AIT鉄人2号へこのシステムを実装して色々実験中。使用しているジャイロセンサーはGWS PG-03。標準のケースは外し、3個を1つのケースに入れて胴体の重心付近に入れている。信号はパルス幅として得られるため、FPGAに実装したカウンターで計測している。

ジャイロセンサー
GWS PG-03
ケースから外したところ
ジャイロ制御無し
(動画WMVファイル980kB)
ジャイロ制御有り
(動画WMVファイル670kB)
お約束
 
180度開脚 傾斜面歩行
前後10度
左右1度
少し曲がっても倒れない
(動画WMVファイル1.3MB)
3軸あればこんなことも安定化
 
 センサでフィードバック制御する場合、そのフィードバック量(補正量)をどのように決めるかも重要と成る。ラジコンヘリ等の場合は角速度に比例してサーボを動かしている。小型ロボットの場合も、同様な制御方式を取っているケースが多いようだ。しかし、この方式をそのまま小型ロボットの姿勢制御に使った場合、応答速度が遅く、またゲインをあげると発振を起こしやすいという問題がある。そこでわれわれは、大学の制御工学の講義で勉強したPID制御方式を取り入れてみた。この方式は、偏差の比例(P:Proportional)成分だけでなく、積分(I:Integral)と微分(D:Derivative)を組み合わせて補正量を決める方式。以下のような式で表わされる。ここで、u(t)が補正量。e(t)が偏差。Kは各フィードバックゲインを表わす。この方式は、応答速度が速く、また定常偏差も小さいという特徴がある。発振も起こりにくい。
             
 現在は、AIT鉄人2号のSH7145Fで計算を行って、PID制御の実験を行っている。(ただし、SH7145Fの性能では、ここまでの計算を行うのは少し苦しい。計算プログラムに工夫が必要。)積分計算は、センサ信号にオフセットがあると大きな誤差として現れるため注意が必要だ。現在は、オフセット自動補正機能を搭載してかなり小さなオフセットに抑えられている。
 動作によって、積分のゲインを上げると有効な場合、微分ゲインをあげると有効な場合などさまざまだ。現在は、試行錯誤で最適値を見つけているが、なかなか難しい。修行が必要そうだ。GUIで各パラメータを変更できるよう、モーションエディタをバージョンアップして最適値を探している。
ジャイロゲインエディター
パラメータの数が・・・・・
 
 
 小型ロボットではジャイロセンサーは多くの場合歩行の安定化など、状態の安定化に使われるケースが多いようだ。しかし、せっかくのセンサーをそれだけのために使うのはもったいない。例えば、静止状態でセンサの変化を見れば、ロボットにどのような力が加わったかを知ることができる。それに対してロボットが反応するようにしておけば、自律動作が可能になる。以下は、AIT鉄人2号を使って、外力に自動的に反応するようにした例である。
 
止めてよー!
(動画WMVファイル1.27MB)
痛いなー!
(動画WMVファイル528KB)