ジャイロのキャリブレーション


ジャイロを付けたロボゼロが、突然コケまくるようになってしまった!
もう歩けない。ああどうしよう!!!!

ということが、よくあります。
すばりジャイロの故障か中央値のズレです。




調べてみるとジャイロの中央値というのは、そもそも温度などの影響でズレるものらしいです。
お正月に子供とwiiで遊んだのですが、たしかにコントローラーはよくズレました。
平面に置いて何秒間か放っておくと直るのですが、それがいわゆる較正(こうせい・キャリブレーション)だったようです。

中央値が大幅に変わってしまっても、中央値をキャリブレーションすることで、使用しつづけることができるかもしれません。




FBでmiconoさんにヒントをいただいたので、
さっそくキャリブレーションのプログラムを書いてみます。




まず、変数・数値・ジャイロセンサーの関係性を総おさらいします。
頭のモヤモヤを図解でハッキリさせます。

スライド2
(一部スクリーンショットROBOMICさんより。)

図解上の方が、RXコントローラー、Xcontrollerでのステータスチェック画面です。
どこの数値を見ればよいのか、その数値が何を示すのかは見ての通りです。

センサについている銀色のiPodみたいなユニットがジャイロの本体です。
基盤をよ〜く見るとG1、G2と記号が振ってあります。
V390はジャイロG1ユニットの値を読み取っており、それがピッチ軸とロール軸のどちらを示す値なのかは、センサの設置方向次第です。
オフィシャルが推奨するG1ピッチ軸方向(図の写真の向き)が無難です。




別の図で見てみます。

スクリーンショット(2013-01-19-0.39.54)

中に浮かんでいる箱がジャイロセンサユニットです。
図のように長い辺の平行線を軸とした回転速度を計測します。

実は、ジャイロの向きは、センサ全体を180度ずつ回転させる分には何の問題もなく、
90度回転させた時だけ軸が入れかわってしまうということが分かります。

ジャイロの軸は、ジャイロ基盤を水平に90度回転させた時に入れ替わります。
また、基盤を水平に180度回転させれば、入力値のプラスマイナスを入れ替える事ができます。
表裏を180度ひっくり返せば、ジャイロユニットの片方だけの入力値のプラスマイナスが入れ替わります。
これでもう混乱しませぬぞ。

プログラムはちょっと長くなりますので、続きを読むの中に。


▼(続きを読むの続き)

ロボゼロのプログラムに組み込む、キャリブレーション部分です。
ちゃんと動かなかったらすみませんすぐ直します。



;┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
;┃ジャイロキャリブレーション                      ┃
;┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
; 2013/01/18 ver 0.1
; 2013/01/19 ver 0.2 使い方追記。
;
; 使用変数一覧
;・V48 ピッチ軸ジャイロ中央値キープ用変数
;・V49 ロール軸ジャイロ中央値キープ用変数
;・V390:ピッチ軸ジャイロ入力値(=ジャイロ0=G1モジュール)入力値;0-255
;・V391:ロール軸ジャイロ入力値(=ジャイロ1=G2モジュール)入力値:0-255
;・V393:ジャイロ0中央値(V48を代入して使う)
;・V394:ジャイロ1中央値(V49を代入して使う)
;
;<このプログラムの組み込み方> 2013.01.19追記
;
;起き上がりプログラムの冒頭など、機体が安定静止した場所のプログラムに、
; JUMP(GYRO_CALIB)
; :GYRO_CALIB_APPLIED
;の2行を割り込ませ、下記のキャリブレーションプログラムを同ページのどこか
;邪魔にならない場所に貼付けてください。
;(特に、メインプログラムの最終行は、ジャンプを指定せずメインプログラムの冒頭
;へのリターンとしている場合がありますので、ご注意ください。
;その状態でこのプログラムを最後に追加すると、延々このプログラムが実行されてしまいます。)

;┌──<【GYRO_CALIB】ジャイロキャリブレーション開始 >───────┐
:GYRO_CALIB
;↓                                   ↓
;┌──< ジャイロをオフし、静止して安定待ち(3秒) >─────────┐
CALL(GYROOFF_CALIB)
WAIT(200)
WAIT(200)
WAIT(200);現行では3秒ですが、調整が必要です。
;↓                                   ↓
;┌──< ジャイロが安定していると想定し、現在の中央値を取得 >─────┐
V48 = V390
V49 = V391
;↓                                   ↓
;┌──< 新しい中央値でジャイロをオン >────────────────┐
WAIT(5)
CALL(GYROON)
;↓                                   ↓
;┌──< 起き上がりシークエンスに帰ります。 >─────────────┐
;適切なファイル名に帰ります。
JUMP(GYRO_CALIB_APPLIED)
;└───────────────────────────────────┘


;┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
;┃ジャイロ設定                             ┃
;┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
;ジャイロ中央値として、V48(ピッチ軸)、V49(ロール軸)の変数を使用する。

;┌──<【GYROON】ジャイロオン とりあえず足首のみ >─────────┐
:GYROON
(N389=0
(N393=V48
(N394=V49
(N396=0
(N398=0
(N397=7
(N399=0-7
(N401=0
(N403=0
(N402=0-8
(N404=0-8
(N389=1
RETURN
;└───────────────────────────────────┘

;┌──<【GYROOFF_CALIB】ジャイロオフ >──────────────┐
:GYROOFF_CALIB
(N389=0
(N393=V48
(N394=V49
(N396=0
(N398=0
(N397=0
(N399=0
(N401=0
(N403=0
(N402=0
(N404=0
(N389=0
RETURN
;└───────────────────────────────────┘





これは、とりいそぎ、起動時や起き上がり時にチェックすることを目的として書いた
キャリブレーションシーケンスです。
実用するには、
・必要な時にキャリブレーション→中央値をSDに自動書き込み
・キャリブレーション値に異常が出ていたらロボから音声で報告
などとすることで、起動や起き上がりを機敏にできるようになると思います。




ちなみに、手元のジャイロはやっぱり故障してました。中央値がズレただけじゃなかったです・・・
スポンサーサイト

テーマ : 自然科学
ジャンル : 学問・文化・芸術

コメントの投稿

非公開コメント

No title

プログラムの作法がいまいちわかってなくてすいません!

起動直後や起き上がりモーションの前、もしくはキャリブ用に設定したボタンを押す分岐に
割り込ませるイメージです。
起動直後を例にすれば、

(起動直後の適当な場所。機体が安定静止した状態で。)
JUMP(GYRO_CALIB)
:GYRO_CALIB_APPLIED
(起動シーケンスの続き)

という風に割り込ませ、キャリブ用のプログラムは同一ページの邪魔にならないところに貼るイメージです。
解説の処にその旨書いておくべきでした!(すぐ追記します。)
プログラムの部品のような、割り込ませて使うタイプのロボゼロプログラムは、ジャンプと帰り先ラベルのペアで公表していく感じになるのかな、と思います。

呼び出しは

miconoです。
すいません。教えて下さい。

GYRO_CALIB
は、どこからJUMPしてきてるんでしょうか?

あと、
JUMP(GYRO_CALIB_APPLIED)
で戻ってる?んで、呼び出しは、JUMPですかね?

で、
GYRO_CALIB_APPLIED
は、どの辺に書込んでいるんでしょうか?

よろしくお願い致します。
プロフィール

二名川(ニナガワ)

Author:二名川(ニナガワ)
ホビーロボットをレトロゲームが発展したものと捉えて楽しく遊び倒します。
子供が夢を見ている時間帯に稼働します。

宣伝:電子出版しました。
「コンソロイド ガイドブック」
46107_CONSOLOID_GUID_FACE_200.jpg





■作成中の機体
汎用ヒト型決戦遊具 ~RX計画~
RX-7.5 ゼロタンク
RRf-0.6 ゼニィ
RXM-7.9 ゼムネス
RX-7.5R 量産型ゼロタンク
RX-7.5Fp ファミタンク仮設1号
RX-7.7 ゼロキャノン
RX-7.8 ゼログレイ
SMS-0.1 ゼロライナー
以下続く

ブログ内検索
最近の記事
最近のコメント
カテゴリ
月別アーカイブ
リンク