GPSログ -高度の記録をグラフで出力する 続き

コードはこんな感じ
protected void SaveGraph( String filename )
{
int count = this.pos.Count;
int [] source = new int[count];
int [] dist = new int[count];
int posIndex;
for (posIndex = 0; posIndex < count; posIndex++) { source[posIndex] = (int)altitude[posIndex]; dist[posIndex] = (int)distance[posIndex]; } Bitmap bitmap = new Bitmap(700, 300); Graphics g = Graphics.FromImage(bitmap); g.FillRectangle(Brushes.White, 0, 0, bitmap.Width, bitmap.Height ); NPlot.Bitmap.PlotSurface2D surface = new PlotSurface2D(bitmap); NPlot.StepPlot plot = new NPlot.StepPlot(); plot.Pen.Color = Color.FromArgb(16, 128, 255); plot.DataSource = source; plot.AbscissaData = dist; surface.Add(plot); surface.YAxis1.WorldMin = 0; surface.YAxis1.Label = "高度 (m)"; surface.XAxis1.Label = "走行距離 (m)"; surface.Refresh(); bitmap.Save( filename, ImageFormat.Jpeg ); } 結果はこんな感じ
ログはこんな感じ

GPSログ -高度の記録をグラフで出力する

NPlotが.netやmonoで使えそうなので試してみた.
参考:.NETグラフライブラリ「NPlot」 (Database tearoomの夜明け)
■MonoDevelopでNPlotを使用する準備
1. NPlotのホームページから最新のnplot-0.9.10.0.zipをダウンロード
2. nplot-0.9.10.0.zipを適当なフォルダに展開
binフォルダ以下には, netに並んでmonoフォルダも用意されています
3. MonoDevelopを開いて(プロジェクト)を開く
4. ソリューション ビューで(プロジェクトの)参照を右クリックして「参照アセンブリの編集」を選択
5. 「.NETアセンブリ」タブを選択
6. 2.で展開した nplot-0.9.10.0/bin/mono/2.0/release/NPlot.dllを選択して追加する
7. 実行ファイルのフォルダにNPlot.dllをコピーしておく
試しにソースに次を設定して,コンパイルが通りました.
using NPlot.Bitmap;
当面の目的はWindows.Formに表示するのではなく,
画像ファイルに出力してhtmlに表示できるようにすること.
■サンプルプログラム
using System.Drawing;
using System.Drawing.Imaging;
using NPlot.Bitmap;
int [] source = { ,,, };
Bitmap bitmap = new Bitmap(500, 250);
NPlot.Bitmap.PlotSurface2D surface = new PlotSurface2D(bitmap);
NPlot.HistogramPlot plot = new NPlot.HistogramPlot();
plot.DataSource = source;
surface.Add(plot);
surface.Refresh();
bitmap.Save( “aaa.bmp”, ImageFormat.Bmp );
結果は下のように.

とりあえずはグラフが出せました.
色々と整形が必要ですね.

USBカメラその後




USBケーブルを工作.
ハンダ鏝でつないで収縮チューブで隠す.
HP 2133ですが,さすがに分解してWR-UC32を埋め込むのは無理そう.
# 機械的には可能だと思いますが,
# 仕上げをきちんとしないと使いづらくなると思う.
ということで,外付けWebCam的な工作をしたいところ.
要は,カメラモジュールをケーブルの根元ごと樹脂で固めて,
ネットブックの定位置に固定できるように器具を固定する.
ゆっくり考えます.

GPSログの処理 2

少し進展。
A, B点があった場合に、その距離をd(A, B)とする。
「d(A, C) * 1.2 < d(A, B) + d(B, C) の場合にはB点を省く。」 というルールでルートを縮約します。 結果、少し改善されたようです。
上記の方法だと、コーナーではどうしてもルートを丸めてしまうので、
距離が少なめに評価されてしまいます。
ログそのままだと距離が長めに評価されるので、それよりはいいと思ってますが。
// total distance
20.064 km → 19.774 km
走行距離は1.5%くらい短くなりました。

春はじめました

手取キャニオンロード 往路 20km分
金曜日には金沢でも桜の開花宣言がでました。
土曜日にようやく自転車で走れました!
13度くらいまで気温はあがったけど、体質なのか、
走り出しても体温が上がらず、筋肉が硬く悪循環。
帰ってからすぐに風呂に入りました。
ログ出力は未完成もいいところですが、使用を始めます。
現在は走行距離の計算ルーチンを作成中。
どうしても多めに積算されるので、インテリジェントに処理したいところ。

USBカメラ デビュー


興味本位で共立電子の「USBカメラ フラット モジュール」を買ってみた。
3,360円 + 送料。
製品ページ: WR-UC32
前情報どおり、ubuntuでも差すだけで使えた。
とりあえず、Skypeでも動作を確認できるが、
cheeseというアプリでも簡単に遊べる。
> sudo apt-get install cheese
静止画や動画をキャプチャできる。
カメラはいい感じに小さくて、
カバーを付けれて、ケーブルをなんとかすれば、そのまま外付けUSBカメラになる。
何となれば、HP 2133(スタンダード モデル)に内臓できそうなサイズです。
分解できればやってみたい気もする。

脱Windowsまで何マイル?

MonoDevelop面白いですね。
でもブレークポイント(ブックマーク)が効かない…
ubuntu 8.10では MonoDevelop 1.9が入るらしいです。
# バージョン表示は1.0
2.0 alpha 2ではブレークできるらしいので、しばらくの辛抱かな?
それまでは、Console.WriteLineでなんとかしましょう。
とりあえず、GPS-CS3のログを読み込んで、ルートを整形するだけはできました。
ログ
コースは正常にとれているようですね、
って、位置が全然違うよ。
正しくは→ ログ の赤線です。
データはWGS84、Google MapsのデフォルトもWGS84だったはず?
まぁ、とりあえず、ubuntuだけでできるメドが立ったので、
これからゆっくり進めていきます。
追記:
緯度経度の度分秒の分秒を変換していなかったので、修正。
テストではWadachiが吐き出したhtmlをベースにしているので、
ここら辺は、自分用にカスタマイズ可能な形で作りたい。
また、時々ポイントがピョッとワープするので、これをインテリジェントに取り除きたい。

GPS-CS3でテスト

GPS-CS3を早速テスト。
GPS-CS1KSPと比較してみます。

■起動
電源ボタンを押してから衛星を認識するまでの時間を測定(ただし、目測)
1回目
 CS1: 約60秒
 CS3: 約30秒
2回目
 CS1: 約32秒
 CS3: 約16秒
おおっ、約半分の時間で認識してますね。
■自転車で走ってみる(ゆっくりポタリング)
ログ
赤のラインがCS3、黄色のラインがCS1です。

こんな感じでログをとってみました。
拡大してみると、CS3の方は、ほぼ道路上に載っていますが、
CS1は全体的にずれている感じ。
とりあえず、CS3になり精度がアップしたことを確認できました。
■GPS情報書き込み
Cyber-shot DSC-T7で撮ったメモリースティックデュオをCS3に入れて、
GPS情報を書き込みます。
一枚あたり3〜4秒ほどかかりました。
■問題点
実は、HP2133 + ubuntu では、CS1をつないでも認識できていません。
CS3は問題なくできているので、今後は大丈夫ですけど。
ゆっくり歩いてのログもとったのですが、
CS3のログはWadachiではエラーが出て、
読み込めませんでした。
■総括
私的にはCS1でも、ロガーとしてはOKなレベルでした。
CS3になり精度は上がっていますが、劇的というほどでもない感じ。
緯度経度が表示されるのは判りやすくていいですね。
見てどうするというわけでもないですが。
今のところ、使い道は考えてないけど、
単体で画像にGPS情報を書き込めるのは便利そうです。
1万6千円ほどだして買い換える必要があったかどうかは微妙ですが、
まぁ、面白いので結果的によかったと思います。

mono – C# on linux

調べてみると、monoが.NET 2.0相当になり使えるようになっている。
Debianやubuntuのパッケージもある。
Synapticで見てみると、ASP.NETもあり、apacheに対応してるようだ。
また、mono-commonなど既にインストールされているコンポーネントもある。
monoで作れば、ローカルでも動かせるし、サーバアプリにもできる。
ログの解析エンジンはWindowsでも使える。
monoで開発してみる。
Synapticで “monodevelop” をインストールする。
“monodoc” というドキュメントのパッケージもあるが、
こちらはほとんど中身が無いようなので、必要はないでしょう。
インスト後、アプリケーション/プログラミング/MonoDevelopを実行。
画面はこんな感じ。



ちなみにMonoDocはこんな。

WindowまわりがGtkな他は、Windows版のVisual Studioと同じようです。
以下、次号。