Tweet


* GPS で遊ぶ [#maccd222]

PC カード接続の GPS を手に入れたので遊んでみる.

** Linux からは [#q73045ce]

単純にシリアルのカードとして見えるようだ

 # cardctl ident
 Socket 0:
   product info: "SEIKO EPSON", "GPS Card E9840B", "V01.001"
   manfid: 0xc007, 0x0101
   function: 2 (serial)

** cat /dev/ttyS0 で [#d26ff5f1]

延々と位置情報が出力される.
こんなかんじ.

 $GPGGA,135311.4,3625.5091,N,13638.0179,E,1,4,3.10,,M,,M,,*65
 $GPGSA,A,2,25,19,27,03,,,,,,,,,3.10,3.10,0.03*09
 $GPGSV,2,1,8,25,44,245,47,19,65,014,45,27,42,278,44,03,45,059,47*49
 $GPGSV,2,2,8,08,00,000,46,10,00,000,00,11,00,000,47,12,00,000,00*4A
 $GPRMC,135311.4,A,3625.5091,N,13638.0179,E,0000.1,320,300607,,E*65

[http://bg66.soc.i.kyoto-u.ac.jp/forestgps/nmea.html NMEA-0183 フォーマット]と言うそうである.

** ドライブ [#a8c596c2]

位置情報の取得はできるようなので,GPS とノート PC をクルマに載せて林道を走ってみる.
位置情報は
 $ tee foo.nmea < /dev/ttyS0
で,画面上でデータを確認しつつファイルに保存.

** プロット [#fad59e6e]

取得したデータを加工してみる.
まずは,位置情報を抜き出す.
ここでは安易に perl を使う.

やってることは
- 緯度・経度・高度フィールドを抽出し
- 緯度・経度は 10 進数に変換
- 高度情報が欠測になっているところは前の値で補間

 #!/usr/bin/perl
 
 #
 # hhhmm.mmmm -> hh.dddd 形式への変換
 #
 sub gps2dec {
     my ( $hm, $dire ) = @_;
     my $sign = ( $dire eq 'S' or $dire eq 'W' ) ? -1 : 1;
     my $h = int ( $hm/100 );
     my $dec = ( $hm - 100*$h ) / 60;
 
     $sign * ( $h  + $dec );
 }
 
 $h_prev = 0;
 
 while ( <> ) {
       next if !/^\$GPGGA/;
       s/\*[0-9A-Fa-f]{2}[\r\n]*$//;
       #print "$_\n";
       ( undef, $time, $lat, $ns, $alt, $we, $qual,
 	$nsat, $hdop, $hight_sea, $m ) = split ',';
 
       if ( $hight_sea eq '' ) {
 	  $hight_sea = $h_prev;
       } else {
 	  $h_prev = $hight_sea;
       }
 
       $l = gps2dec ( $lat, $ns );
       $a = gps2dec ( $alt, $we );
       print "$l\t$a\t$hight_sea\n";
 }


このデータを使って gnuplot でプロットする.
- gif ファイルに出力
- 高度軸を中心に 360 度回転させたファイルを別々に作成

で,gifsicle でアニメーション gif を作成
 $ gifsicle --delay=10 --loopcount road*.gif > road.gif
で作成.

#ref (x.gif)
#ref(x.gif,center,320x240)

** todo [#r509c21c]

- 実は位置情報が南東方向に数100m ぐらいずれていたりする.
-- GPS をリセットしてやらないといけないらしいが,Linux 上からやる方法が不明.Windows からやるかな.
- 緯度 / 経度のアスペクト比がいい加減
-- ちゃんと長さの比率をあわせてプロットしたいところではある
- 地図との連携
-- google map を使う?


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS