ちょっとすごいロガーを便利に使う(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);

 

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

 

クォータニオンとかorientation filterとか


最近fenrirさんのオープンソースハードウェアプロジェクトNinja-Scan-Lite(ブログページ)を広めようとNinja-Scan-Lite(ちょっとすごいロガー)(Google Code内プロジェクトページ)を中国深センに部品実装まで発注しました。写真はちょっとすごいロガーの1号機です。最近無事に秋田大学に納めまさせて頂きました。
その記事は後日書くとして、ジャイロで値を計測しても、姿勢角が知りたいのに、けっこう悩ましいですよね。
クォータニオンってやつを使うと計算が便利ってところまでは調べるとわかるのですが、
日本語の教科書はあっても、Web上の日本語記事はロクなのがありません。
公開されている論文だと良いのがありますが、日本の某企業の公開論文が悪すぎて時間を無駄にしたりしました。

クォータニオンの説明と計算は実際に商品にしているx-io社のものが良いです。どこかで前提条件となるクォータニオンの説明を見た後で、実装を確認する感じのレベル対象です。
特にMatlabの実装まで示しているので、参考になります。
http://www.x-io.co.uk/quaternions/

x-io社の慣性計測ユニットは加速度とジャイロと地磁気の値から現在の姿勢をフィルタリングして姿勢を求めるアルゴリズムが走っています。
フィルタの中身は公開されていて、orientation filterで調べると出てきます。

orientation filterには2パターンのフィルタがあります。
・加速度とジャイロから姿勢を求めるIMU filter
・加速度、ジャイロ、地磁気から姿勢を求めるMARG filter

どちらも、フィルタの機能として動きが少ないこと前提です。
フィルタのパラメータである、βとγの値を変えると動いている対象にもある程度対応できるようですが、
加速度は重力加速度のみを検知していて、磁気センサーは地磁気のみを計測していることが、フィルタの前提条件になっています。
センサー統合する際に多く用いられるカルマンフィルタに比べて計算負荷が少ないことが論文中のメリットに書いてあります。

その分使用条件があるのですが。。。

MEMSセンサーのジャイロのバイアスは無視出来ないほど大きいので、このようなセンサー統合が必要になってきます。多くのスマホでももう少し簡単なフィルタが入ってセンサー統合しているはずです。complementary filterとかが多いのでしょうか。。。

x-io社は色々とオープンソースにしていて期待しているところです。

というか個人プロジェクト的には明らかにライバルです。
http://www.x-io.co.uk/category/open-source/

スゴイロガー進捗(1)STM32F4の(仮)開発環境


前回に電源周りだけ確認したスゴイロガーことNinjaScanですが,STM32F4でLチカできるまで進みました.

これが出来るとハードウェア的には大部分の確認が取れたことになります.基板設計とアートワークの確認が取れることに意義が大きいです.好きにプログラムすることによって取り付けるセンサとのやり取りやコネクタから出ている信号線を使って通信できます.このあとはSuper Sylphideシリーズの設計資産を使ってソフトウェアの開発を行います.(これは自分には重すぎるのでお師匠様であるFenrirさん任せの予定)

(仮)開発環境まとめ

今回はSTM32F4の動作確認が目標だったので,簡単にマイコンに書き込める環境にしました.

  • ARM用 IAR Embedded Workbench(32KBコード制限の無料評価版)
  • ST-Link/V2(秋月で購入)
  • ファームウェアやサンプルプログラムは公式から
  • SWD(シリアル ワイヤ デバッグ)でデバッグ

ファームウェアはSTMicroの公式から落としたが,公式からだとすごく見つけにくいのでhttp://www.emcu.it/STM32.html#STM_Firmware_Librariesを参考にしました.

Lチカの書き方は当初「STM32徹底入門」のサンプルを参考にしていたが,STM32F1とSTM32F4とで微妙に異なるようなので

http://www.emcu.it/STM32F4xx/STM32F4-Library/STM32F4-Library.html

などを参考にした.全体的にはSTM32徹底入門のGPIOのサンプルそのまま.初期化の辺りを直すことと,F1からF4に変わることで,GPIOのクロックがAPB2からAHB1に変わっていること,GPIOの構造体変数が変わっていることを注意します.

EWARMをインストールした後,STM32F4 DSP and standard peripherals libraly... と書いてあるstm32f4_dsp_stdperiph_lib.zipを解凍してその中の[STM32F4xx_DSP_StdPeriph_Lib_V1.0.1] → [Project] → [STM32F4xx_StdPeriph_Templates] → [EWARM] → [Project.eww]からプロジェクトを作り,[User]の中身のmain.cやstm32f4xx_it.c辺りを書き換えました.

ST-Linkで書き込んだので,EWARMの[プロジェクト] → [オプション]のデバッガがJ-LinkになっているのをST-Linkにしておきます.

ST-LinkのJTAGの20ピンあるところからSWDに相当するピンの4本繋いで書き込みとデバッグが出来ました.

あくまで仮の開発環境で,コード制限などを考えると,新たに開発環境整えないといけないと考えているところです.STM32はググるとそれなりに情報が出てくるのでありがたい限りです.