2023年4月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            

カテゴリー

ブログパーツ

無料ブログはココログ

« 2012年5月 | トップページ | 2012年7月 »

2012年6月

2012年6月10日 (日)

XG1300Lでレーシングカーを制御する

花岡ちゃんのウィークエンド:

以前、村田のジャイロとPICを使って簡単な1軸ジャイロコンパスを製作し、レーシングカーの自律走行にチャレンジしました。この投稿です。動画で見ると、「グリップ走行」ではオーバルコースの連続走行をこなしていますが、周回を重ねるごとに進行方向がずれていくのがわかると思います。これは振動などによるジャイロシステムのドリフトが主な要因で、5周後には10度くらいずれてしまっています。
今まで作った中では、シンプルな割には出来のよいシステムなんですが‥ 旋回角度の制御などなら十分に実用になるものの「コンパス」としては厳しいですね。

今回のウィークエンドでは、このレーシングカーにXG1300Lを搭載して、同じようにオーバルコースの自律走行を試してみました。

Dscn2214

今回のジャイロは、最大角速度が100度/秒と小さめなので、速度は少し抑えめにして、グリップ走行のみでテストしました。今回も直進距離は走行時間で決めています。

以前の実験に比べると、進行方向が最初と最後で全くずれていないのがわかると思います。(旋回半径はメカ頼みの無制御なのでバラツキがあり、オーバルコースの「場所」は周回ごとに画面右の方に少しずつずれていきますが)
動画では5周しかしていませんが、20周させても同様でした。もっと広い場所があればエンデューロテストができるんですが‥ とまれ、ジャイロコンパスとしては及第点でしょう。さすが「本物」ですね。

2012年6月 9日 (土)

同じカメラかな?Ai-Ball購入

デスコンになってしまったプラネックスのCS-W07G-CYですが・・ 最近こんなものをアマゾンで見つけ、購入しました。中身は同じもののようで、使い勝手も同じです。

Aiball


代替品を探した結果、この商品にたどり着きました。以前CS-W07G-CYを分解したとき、基板にAi-Ballという文字があることに気づき、それを頼りに調べたところ、Trekという会社で日本でも以前販売していたことがわかりました。同社のシンガポールの通販サイトではまだ商品があるのですが、どうも日本には送ってくれないようでinternational shipping が選べません。残念、これまでかと思っていたのですが・・ 

ところが最近、わずかですがアマゾンやヨドバシなどでも扱っていることに気づき、仕事中にもかかわらず即座に購入したしだいです。値段はちょっと高めの13K円ほどでした。

2012年6月 4日 (月)

慣性センサXG1300Lの実力を探る(おしまい)

花岡ちゃんのウィークエンド:

テストの結果、ジャイロの安定度は相当なもので、当方の実験では静止状態でのドリフトが1時間で1度以下という結果でした。実際の使用状況下でカタログデータの10度/時間は十分に担保できるでしょう。その他マニュアルに記載されていない(あるいは読み取りにくい)性能を下記にまとめておきます。

●旋回角の初期値は0以外に出来ない
使い方によってはリセット後の初期値が0度ではなく、90度などにセットしたい場合もありますが、旋回角レジスタに値を書き込むことは出来ません。そのような場合はマイコン側で変換する必要があります。

●旋回角は右旋回でプラス、左旋回でマイナス
旋回角の読み出し値は、右(時計回り)に旋回させていくと数値が増えてゆき、180.00度を超えるとマイナス179.99度という数値になります。つまり読み出した数値がずばり原点からの旋回角になっている訳で、アプリケーションプログラムで使いやすくなっています。

●ジャイロコンパスとして使うなら、旋回は水平に、旋回速度は低めに
本機のジャイロは1軸ですから、障害物を乗り越えながら進む探検ロボットなどには、ジャイロコンパスとしては使用できません。センサの角度が変わるとコンパスが狂ってきます。また、旋回速度の最大は100度/秒です。これは4秒で一回りするくらいの速度ですが、安全を見るならこの半分くらいに押さえるのがよいようです。ただし、これはあくまでもコンパス、つまり方位基準として使う場合で、ねずーのようにアクションの角度測定だけなら、そんなに神経質になる必要はありません。

テストの結果はかなり良好でした。ロボット掃除機のような室内の移動ロボットにジャイロコンパスとして搭載可能です。もちろん、シェーキーカメロのようにオドメトリで同様のことは可能ですが、オドメトリの場合、旋回角の分解能をあげるためには駆動輪のエンコーダの分解能をあげる必要があり、機械的な工作が大変になります。また、幅の広いタイヤや、キャタピラなどを使った場合、旋回時の接地点が路面によってかわるため、同じステップ数だけ駆動輪をまわしても、旋回角が違ってくる場合もあります。もちろんスリップは論外ですね。高安定のジャイロコンパスを使えばこの辺の問題を解決でき、ロボットの自己位置推定をロバストなものにできるでしょう。

結論としては、室内用の移動ロボットの自己位値推定には、かなり有効なセンサだと思います。ラフなオドメトリ、極端な話をすれば、時間による移動距離の推定でも、ソコソコの精度で位置の推定ができるのではないでしょうか。何故なら、距離は壁への衝突の検出などで容易に補正できますが、角度の補正はそれに比べると難しいからです。
1万円という値段なら、充分検討に値すると思います。

2012年6月 3日 (日)

慣性センサXG1300Lの実力を探る(その3)

花岡ちゃんのウィークエンド:

今回の投稿は実験に使ったPICプログラムの説明です。プログラムは毎度おなじみのCCSCで作成しました。

先ずはデバイスのI2Cアドレスを確認しておきます。XG1300LのI2Cアドレス(デバイスアドレス)は0x02です。これはアドレスバイトが0x02ということで、このバイトの最下位ビットは読み書きフラグですので、書き込みのときは0x02、読み出しのときはフラグを立てて0x03ということになります。

XG1300Lは使用前にリセットする必要があります。マニュアルによるとリセット後1秒間はセンサを動かしてはいけません。この間にジャイロなどのセットアップをしているようです。
リセットはこのように行います。

void resetGyro(void){
//まずアドレスのセット
i2c_start();
i2c_write(0x2); //XG1300LのI2Cアドレスと書き込みビット0
i2c_write(0x60); //リセットレジスタのアドレス
i2c_write(0x0); //ダミー書き出しデータ
i2c_stop();
}

リセットするにはレジスタ0x60に書き込みを行うだけです。書き込みデータは何でもいいようです。

旋回角度を読み出す関数はこれです。シリアルフラッシュメモリの読み込みと基本的に同じです。

long readGyro(void){
unsigned long xx,yy;
//アドレスのセット
i2c_start();
i2c_write(0x2); //XG1300LのI2Cアドレスと最下位ビット0(書き込みコマンド)
i2c_write(0x42); //旋回角レジスタのアドレス
//2バイトの連続読み出し(LSB,MSBの順)
i2c_start();
i2c_write(0x3); //XG1300LのI2Cアドレスと最下位ビット1(読み出しコマンド)
yy=i2c_read();  //LSB(下位バイト)
xx=i2c_read(0); //MSB(上位バイト)ー読み込み後ACKを返さない
i2c_stop();
return((xx<<8) + yy); //2バイト
}

ccscではlongは16ビットの変数です。今回は旋回角のレジスタだけ読み込みましたが、グローバル配列に全ての情報をいっぺんに読み込んでもよいでしょう。

プログラムをスタートするとターミナルにOKと表示し、1.5秒後から旋回角を300ms周期でタイプアウトします。システムが旋回角の送信を始めるまではXG1300Lを動かしてはいけません。そのまま触らなければ0をタイプアウトし続けるはずです。

この状態で、XG1300Lをゆっくり滑らせるように左右に回転させると数字がかわるのが確認できます。

Photo

最初の状態から右に90度ほど回転させると、数値は9000くらいになると思います。旋回角は1/100度単位で計測されています。つまり、読み出し値を100で割ると旋回角が直読できます。
こうなれば正常に動作しています。

詳しくはソースコードのmain.cを見てもらえばわかりやすいと思います。(なお、MPLABとccscを使っている方はcドライブの直下にプロジェクトフォルダをおけばビルドできると思います。)
プロジェクトフォルダ「XG1300L.zip」をダウンロード

次回は評価結果です。

2012年6月 2日 (土)

慣性センサXG1300Lの実力を探る(その2)

花岡ちゃんのウィークエンド

今回はXG1300LをPICマイコンに接続し、プログラムの仕様などを決めます。

接続自体はI2Cなので簡単です。回路は以前の投稿を見てください。今回はPickit2のおまけ基板(PIC16F887)を使っています。
これが実験装置です。

Dscn2185

右上がいつものシリアルレベル変換機、左下の基板がPIC16F887基板です。ブレットボードにはI2Cのプルアップ抵抗などが乗っています。テスト時にXG1300Lを旋回させやすくするために、ケーブルはもう少し長い方がいいと思います。

まずはXG1300Lのデータシートマニュアルを読みます。もともとNXT専用なのでタイミングチャートやI2Cでのアクセス手順などの詳細なデータはありません。I2Cの情報としてはI2Cアドレスと内部レジスタのあっさりした解説があるだけです。I2Cデバイスへのコマンドの出し方はいろいろあるようですが、これはシリアルフラッシュメモリのように、内部レジスタのアドレスを送って旋回角などを保持しているレジスタを読み出すようです。
今回の実験ではレジスタ0x42と0x43から旋回角の16bitデータを読み込み、10進変換してシリアル通信でパソコンに送信、Teratermなどのターミナルソフトで表示する事にします。

今回、仕様を調べていて少しばかり気になることがありました。
日本語のドキュメントには、加速度センサについて「センサ内部で積分演算をして、速度と距離の情報も取り出せる」旨の表記がありますが、英文の資料にはそんなことは書かれていません。データシートには"Selectable Output(Angular Rate, Angle, Acceleration)"とあり、角速度、旋回角、加速度しか記載がありません。演算しているのはジャイロ出力に対してであり、そのアウトプットは旋回角と角速度だけです。日本語の紹介記事はほとんど間違っているので、どうも日本の代理店が出している資料に間違いがあるのではないでしょうか。

次回はXG1300Lにアクセスするプログラムを作ります。

2012年6月 1日 (金)

慣性センサXG1300Lの実力を探る(その1)

花岡ちゃんのウィークエンド:

仕事にかこつけてLEGO Mindstorm NXT用の「慣性センサ」XG1300Lを入手しました。

Dscn2184

高安定度のジャイロと3軸の加速度センサを組み合わせたもので、原点からの旋回角が直接読めるのがポイントです。プログラムなしでジャイロコンパスとして使える訳で、これはなかなか便利そうではないですか。しかもドリフトが10度/時間とはなんと安定なんでしょう! 僕が使っていた村田のジャイロと自家製ソフトの組み合わせとは比較になりません。ねずーでは旋回制御と直進補正にそうやって作ったジャイロコンパスを使いましたが、残念ながら「コンパス」としては使い物はならず、数分するとドリフトが始まるといった性能でした。

以前仕事で購入したことがある、この3軸角度センサは、とてもすごい性能ですが、お値段もすごくて30万近かったように記憶しています。それに近いものが1万円ほどで手に入るのなら万々歳ですが、はたしてどうでしょう?

今回はこれをNXTではなく、PICマイコンに接続してみます。I2Cで通信しているようなのでなんとかなるでしょう。コネクターはこのような接続になっていることがわかりました。

Xg1300

このケーブルは電話線に使われる6芯のモジュラージャック付きのように見えますが、ラッチが1ピン側にオフセットしてある特別仕様のものです。電話用のモジュラーを改造して使うのも手ですが、NXT用のケーブルセットを購入し、これを使ったほうが安全です。今回は途中で切断してピンヘッダをハンダ付けしました。

今回はここまで。次回はマイコンとの接続方法です。

« 2012年5月 | トップページ | 2012年7月 »