ちょっとすごいロガーを便利に使う(1)GPS受信機として

”ちょっとすごいロガー”の便利な使い方について気が向いた時にまとめていきます。

GPS受信機として

ちょっとすごいロガーの基本的な使い方として4つの動作モードがあります。

  1. LiPo電源もしくはモバイルバッテリー等USB電源を使ってデータをSDカードに保存していく
  2. SDカードを挿してUSBでPCに繋いで外付けメモリとしてSDカードの中身を読む
  3. USBを経由してPCに現在の計測値のデータ流し込む
  4. PC接続のGPS受信機単体として使う

この4番目のGPS受信機単体として使うモードを使うと載っているu-bloxのGPSモジュールNEO-6Mの評価基板として”ちょっとすごいロガー”が使えます。PCと繋げて色々と遊べます。

GPSダイレクトモードにする

ninjascanlite-gps

ちょっとすごいロガーに挿れるmicroSDカードには通常はログ保存ファイルとして”LOG.DAT”が生成されます。GPSダイレクトモードにするにはこのmicroSDカードの中に”direct.gps”という名前の空ファイルを作ります。空ファイルは空のテキストファイルなどを作っておいて、ファイル名を変更すれば作れます。

direct.gpsファイルを作ったらPCとUSBを挿し直します。そうすると余計なデータ無しでUSBとGPSモジュールが直接繋がります。

u-bloxのGPSモジュールを使っているので、Windows専用ですが、u-centerというソフトを使ってどのようなデータが吐出されているか見れます。

u-blox社のu-center配布場所

ソフトの使い方はどこかのドキュメントを見てもらうことにして、、、緯度経度はもちろんのこと、受信しているGPS衛星の見えている角度や受信強度などなどたくさんの情報が見えます。

ninjascanlite-ucenter

ちょっとすごいロガーにはGPSモジュール用のEEPROMは入れていないので、電源を入れなおすとNEO-6Mは初期設定の出力に戻ってしまいます。設定をずっと生かすにはファームウェアを変えて書き込むしかありません。

CFGなどをいじると出力されるセンテンスが変わったりします。下の画像ではNMEAセンテンスという標準的なセンテンスを出力させています。設定を変えて遊ぶという評価基板としては使える機能だと思います。

ninjascanlite-ucenter2

 

直感的には使いにくいかもしれませんが、u-centerはGoogleEarthに出力出来たり便利です。

あと、NEO-6Mには隠しコマンド的なものもあるようです。。。隠しコマンド使うとスゴイことになります。

 

ちょっとすごいロガー販売開始

開発を続けているちょっとすごいロガー(NinjaScan-Lite)の販売をBASEというネットショップで開始しました。BASEは働いている六本木のシェアオフィスですぐ近くにいた(今は渋谷にお引っ越し)会社さんなので雰囲気分かっているので安心です。

下のリンクから購入可能です。クレジットカードと銀行振込に対応しています。その他、問い合わせしてもらえれば対応させて頂きまっす。

この商品はオープンソースを独自に商品化したもので、ソース元に販売等の本商品に関する問い合わせは行わないでください。

(追記)

サポートページ作りました。

http://www.ina111.org/ninjascan-light

ちょっとすごいロガーのGUIフロントエンド作ってる

ちょっとすごいロガー(Ninja Scan Lite)リンク

”ちょっとすごいロガー”はとても小さい動き計測のためのロガーです。3軸加速度、3軸ジャイロ、3軸地磁気、気圧高度計、GPS受信機のデータをSDカードに保存したり、USBを通してPCと通信したり、(ファームウェアを改造すれば)シリアル通信で他の機器と(例えば無線機など)通信できるオープンソースハードウェアな計測器です。センサの数は多く、でも機能はログを取るだけに絞ったものです。

3つ目のが今回の作ったものの置き場です。

作ったもの

ちょっとすごいロガー(NinjaScanLite)の開発で、一般販売するにあたって、黒い画面でコマンドをガシガシ打ち込んで使えおらぁ!っていうオラオラ系も味がありますが、ゆるふわな感じも大事です。

なので、ちょっとすごいロガーのGUIフロントエンドをC#で作りました。一般公開して、広く使ってもらえるようにしようとしています。exeファイルは後日公開予定。

上にも貼っていますが、開発状況は以下で。

https://github.com/ina111/NinjaScan_GUI

機能
  • ちょっとすごいロガーのUSBから出力されるバイナリデータ(Sylphideプロトコル)のストリームをパースする機能
  • youtube動画のようにリアルタイムで値をグラフで出力する機能
  • SDカードに保存されているLOG.DATというバイナリファイル(Sylphideフォーマット)をCSV形式に変換
  • (GPSから得られる位置情報をGoogleEarth上に表示)

Visual Studio2013だとExpressでもNugetが使えるようになっていて、ライブラリが楽に管理できるので、捗ります。

使っているもの

  • Sylphideフォーマット :転送や保存のデータ量の圧縮のためにセンサデータはASCIIのような読みやすい形式ではなく、バイナリデータにしてあります。なので、デコードする必要があります。C#にはBinaryStreamというクラスがあるので、Sylphideフォーマットにしたがってクラスを作ってパースしています。Sylphideフォーマットを使っているHPA NaviやTiny Featherなどとはセンサの違いなどのため、完全な互換性はありません。
  • Math.net Numerics :数値計算とか行列計算のライブラリ。補間とか色々便利。Nugetから。
  • ZedGraph :グラフライブラリ。timerのイベントでグラフを再描写してリアルタイムグラフにしている。Nugetで入れました。
  • OpenTK :(未実装)OpenGLのC#のフレームワーク。姿勢の表示とかやろうかと。Nugetにもあるが、HPからダウンロードしないと使えませんでした。
  • GoogleEarthAPI :GoogleEarthAPIはJavaScriptなので、やりたい命令を関数として書いたJavaScriptが入っているhtmlファイルを用意して、C#から下記のようにするとJavaScriptの中の関数が実行されるので、カメラ動かしたりできます。
webBrowser1.Document.InvokeScript("js_func", args);

 

計測器、ロガーはとにかく足回りの整備です。これを使った色々が出てきてくれるとやりがいがあるなぁ。

 

x-io社のx-IMUを使ってみた話

x-io社のx-IMUという慣性計測ユニットが気になったので使ってみた話。

買ったのはこれ

MEMSのジャイロセンサは角速度を計測しているが、バイアスが酷く、姿勢を計測しようと積分するとどんどん誤差が蓄積します。

解決方法としてはカルマンフィルタなど、他のセンサの値と角速度センサの値を組み合わせる技術が使われます。。その中でも加速度と磁気センサの値が重力加速度と地磁気だけの状態だと簡単に実装できて強力なデジタルフィルタが公開されています。orientation filter とかMadgwick’s filterとか言われています。これが今回購入したx-IMUには実装されています。普通に買えるものだったりオープンソースのアルゴリズムなのに、日本ではあまり話題になってないので、メモ代わりに書いておきます。重力加速度以外の加速度や地磁気以外の磁気があるところではフィルタの性能が落ちるアルゴリズムになっているので要注意です。

購入

到着するとこんな感じ。

2014-03-01 14.37.071

電子部品を包む袋に入ってる

2014-03-01 14.38.221

 

レジストが見たこと無い面白い色です。あんまりキレイには思えないです。

レジストの厚みはかなり厚いです。基板の厚みもすごいことになってます。GFRP板のmicro SDカードもどき入っていました。Bluetoothモジュールは技適通ってない(たぶん)ので使いません。設定でdisableにしないといけません。

2014-03-01 14.41.551 2014-03-01 14.42.471 2014-03-01 14.43.041

 

性能

静置試験の結果を置いておきます。自分の環境での性能なので、環境によって全然異なってくると思います。1時間静置しておきました。上のグラフの上からジャイロ、加速度、地磁気の生データです。

下のグラフは姿勢角のグラフです。上のsubplotはジャイロの角速度の値から姿勢をクォータニオン表示で積分していって、オイラー角になおしているものです。真ん中はorientation filterで出力されたもの。下は真ん中のグラフを上下に拡大したものです。フィルタあると1時間で1度程度ずれるかどうかぐらいです。補正が効いているので、たぶん何時間でもこの程度のドリフトで収まるはずです。地磁気でしか補正されない1軸(ここではz軸)だけ地磁気のノイズの影響を強く受けているのもわかります。x軸y軸は加速度センサでも補正されているので、かなり安定しています。

生データからでは10度以上出るドリフトがキレイに消えているのがわかります。

X-IMU_MARG_longtime_sensor

X-IMU_MARG_longtime_attitude

ちなみにですが、データはバイナリで出てくるので、Windows用のGUIソフトがないと読めるフォーマットに変換出来ません。オープンソースなので、自分でなんとかすればいいんでしょうか・・・

GUIソフトでcsv形式にしてpythonのmatplotlibでグラフ化しています。

電子工作的に・・・

mbedでこのフィルタがすでに実装されていました。

https://mbed.org/cookbook/IMU

ただし、ADXL345 and ITG-3200のセンサの組み合わせ用に作られいるので、他のセンサでは書きなおさないとダメですね。

http://www.x-io.co.uk/open-source-imu-and-ahrs-algorithms/

ここに元となる論文、C言語の実装、Matlabでの実装、C#でのWindows上でのソフトが公開されています。