Re: The history of "M&Y"

Team "M&Y" and "花鳥風月"
the soliloquy of the father
毎日更新!

NXTねた その97 Gyro その3

2012-11-12 | NXTねた

これまでの実験でジャイロセンサーが動作したことは判りました・・・

とてもゆっくり回転する(しかもなるべく等速度で・・・)ロボットであれば、回転角を検知することができるかもしれません・・・

でも、さすがに、あれでは実戦に使えません。


じゃあ、どうするかというと・・・

さっきのプログラムでは1秒毎に角速度を計測していました。

この計測する時間間隔を短くします。


まず、半分(0.5秒毎)にしてみます。

ループの中の待ち時間を500msにします。

    Wait(500);
そして、積分の値を

    j+=i/2;

に変更します。

これは

    j+=i×0.5;

のことです。

先ほどよりも精度が上がったハズです。 (あくまでハズ)

やってみると・・・なんか精度が上がったような、上がってないような・・・(笑)


じゃあ、いっその事、ループの待ち時間を100msにしてみます。

   Wait(100);

    j+=i/10;

に変更して、実行してみます。

さらに精度が上がったハズです。

まあ、実際は、上がったような、上がっていないような・・・(笑)


ここで、はたと気が付きました。

i/10 の計算は変数i も10も整数なので、整数で計算されます。

もし、変数i が一桁なら i/10 は必ず「0」です。

これでは、精度が出ません。


だから、

    j+=i;

に変更します。 そうすれば、変数j には10倍の数値が入ります。

最後に変数j を表示するときに10分の1にします。


task main()
  {
  SetSensorHTGyro(S1);
  int i,j=0;
 
  while(true)
    {
    Wait(100);
    i=SensorHTGyro(S1,-8);
    j+=i;
    TextOut(0,LCD_LINE1,"   ");
    NumOut(0,LCD_LINE1,i);
    TextOut(0,LCD_LINE2,"   ");
    NumOut(0,LCD_LINE2,j/10);
    }
  }

結局こんなプログラムになりました。

実行してみると・・・

最初は1行目の表示は「0」、2行目の表示も「0」ですね。

センサーを90度右回転してみると・・・

2行目の表示が「90」位になりました。

センサーを左回転して、元の方向に戻すと・・・

2行目の表示が「0」に近い値(「-2」とか)になりました。

今度は左に90度回転してみます。

2行目の表示が「-90」位になりました。

センサーを右回転して、元の方向に戻すと・・・

やっぱり「0」にはなりませんが・・・まあ、1桁の数値です。


じゃあ、調子に乗って・・・

ループの待ち時間を10msにしてみます。

そうすると・・・

おぉ! 結構正確に表示できてるよ!

ちゃんと「0」に戻る・・・素晴しい!


ということで、ジャイロセンサーが使えることが判りました。

使い方によっては、コンパスセンサーよりも役に立つと思います。

少なくともチーム「M&Y」の中では、ジャイロセンセーはコンパスセンサーよりも絶大な信頼を得てます。(笑)

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Rescue-B explanation of the... | トップ | Rescue-B explanation of the... »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

NXTねた」カテゴリの最新記事