marunomaruno-memo

marunomaruno-memo

Lego Mindstoms NXT - leJOS - (14) ジャイロセンサー

2009年03月30日 | LEGO
◆ Lego Mindstoms NXT - leJOS - (14) ジャイロセンサー

各速度を測定できるジャイロセンサーを使った例です。
なお、このジャイロセンサーは、Lego Mindstomes NXT の基本セットにも、おもちゃセッ
トにも含まれていませんので、別途購入する必要があります。

ジャイロセンサーは、HiTechnic 社の NXT Gyro Sensor (Model: NGY1044) です。
HiTechnic Product: http://www.hitechnic.com/

HiTechnic 社の説明から
---
HiTechnic社製ジャイロセンサ(NGY1044)は光センサ等と同様に10ビットの分解能を持った
A/Dデータとして取得されます。ジャイロセンサの更新レートは約300回/秒で、±360度の
測定範囲に対応します。
---

▼ジャイロセンサーから取得できる値?
---
ジャイロセンサーは、角速度(1秒間に何度動いたか)を検出するセンサー。正しくは
「ジャイロスコープ」というようで、ジャイロセンサーは和製英語らしいが、上記製品も
Gyro Sensor なので、どうなんだろう。(どうでもいいこと)

角速度自体は、スカラー値のようだが、この説明だと、当然、正負値が取得できる。
実際に、走行体に載せるとこれは3次元なので、実は各周波数を取得しているのかな? だ
としたら、非負値しか取得できないと思うが、実際には符号付値で取得できている。何か
を基準に、1次元に落としているんだろうか。その基準が、オフセット値? でも、オフセ
ット値もスカラー値なので、もう1次元分は何なのかな?
不思議な気がする。

もっとも、安い(数千円)のセンサーだから、角速度だけを取得しているだけかもしれない。
じゃあ、オフセット値は何? 何かの基準だと思われるが、0度の位置を表しているのかな?
実際のジャイロセンサーのソース(GyroSensor.java)を見ると、オフセットは 600 がデフ
ォルト値として設定されている。そして、readValue メソッドは、単に、
port.readRawValue() - offset
を返しているだけ。

□ウィキペディアからの説明の引用:

ジャイロセンサーは、運動している(ある速度をもっている)モノが回転すると、その速
度方向と垂直に「コリオリの力」が働くという物理現象を利用して角速度を検出している。
(http://ja.wikipedia.org/wiki/%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AD%E3%82%B9%E3%8
2%B3%E3%83%BC%E3%83%97)

角速度は、物体や質点の回転の速さを表す量であり、角度と時間の商で定義される。量記
号は ω(ギリシャ文字の小文字のオメガ)。角速度は3次元空間ではベクトル量として定
義でき、その大きさが角周波数である(ω = |→ω|)。単位は通常ラジアン毎秒(rad/
s)を用いる。
(http://ja.wikipedia.org/wiki/%E8%A7%92%E9%80%9F%E5%BA%A6)

コリオリの力は、回転座標系(Rotating reference frame)上で移動した際に移動方向と
垂直な方向に移動速度に比例した大きさで受ける慣性力の一種。
(http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%AA%E3%82%AA%E3%83%AA%E3%81%AE%E5%8
A%9B)
---


■ジャイロセンサー値を取得するアプリケーション

取得している間の最小値と最大値も合わせて表示する。取得の間隔は 50 ミリ秒。

□GyroSensor01.java
------------------------------------------------------
import lejos.nxt.Button;
import lejos.nxt.GyroSensor;
import lejos.nxt.LCD;
import lejos.nxt.SensorPort;

/**
 * ジャイロセンサー値を取得するアプリケーション。
 * @author maruno
 * @version 1.0, 2009/03/28
 * @since 1.0
 */
public class GyroSensor01 {

    public static void main(String[] args) throws Exception {

        // ジャイロセンサー・オブジェクトをポート4で生成する。
        GyroSensor gyroSensor = new GyroSensor(SensorPort.S4);      // (1)
        
        int value = gyroSensor.readValue();    // (2)
        int min = value;
        int max = value;

        // Escapeボタンが押されるまでループ
        while (!Button.ESCAPE.isPressed()) {
            min = Math.min(min, value);
            max = Math.max(max, value);
            LCD.clear();
            LCD.drawString("value = " + value, 0, 1);
            LCD.drawString("min   = " + min, 0, 2);
            LCD.drawString("max   = " + max, 0, 3);
            Thread.sleep(50);
            value = gyroSensor.readValue();
        }
    }
}
------------------------------------------------------


プログラムのパターンは、今までのセンサー値を表示するプログラムとまったく変わりま
せん。leJOS には、はじめからジャイロセンサーを扱うクラスが用意してあります。

□ GyroSensor gyroSensor = new GyroSensor(SensorPort.S4); // (1)

ジャイロセンサーオブジェクトを、ポート4につなげて生成します。


□コンストラクター
---
GyroSensor(ADSensorPort port)
---


□ LCD.drawString("value = " + gyroSensor.readValue(), 0, 1); // (2)

ジャイロセンサーからの値を取得して、NXT 画面に表示します。

□メソッド
---
int readValue()
ジャイロセンサーの値を取得する。値は、-1000 ~ 1000 の範囲くらいか?

void setOffset(int offset)
オフセット値を設定する。
---

以上



最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
LEGO専用超小型3軸加速度センサー (RP)
2009-06-01 23:25:13
新しい3軸加速度センサーがあります!
http://www.roboproduct.com/MS01002.html
にその情報あります。
返信する

コメントを投稿