GPS使用マニュアル
使用するPC 二宮机の隣にあるPCを使用 アカウントは個人用つくってもらうこと 管理者は二宮
モジュールのデータをすいあげる GPSBabelを使用 具体的な使い方は次ページの使用している画面と Helpを参照すること http://www.gpsbabel.org/ 具体的な使い方は次ページの使用している画面と Helpを参照すること 使用するデバイスはその都度かわるので、動かないときは別のCOM番号を試すこと。 GPSモジュールは2個あるので、別々のファイル名でデータを吸い上げること(例 GPS1, GPS2)
データの処理 吸い上げたデータはVMWARE上のLINUXのPerlとROOTで処理します。 VMWAREをたちあげ、LINUXをたちあげる Windows上と同じようにファイルを選択して、ドラッグして、ファイルを移動させる 移動させたファイルをLINUX上で中身を確認すること NMEフォーマットhttp://www.gpscompass.jp/info.html Perl で変換 perl conv.pl 入力ファイル名 > 出力ファイル名 conv.plの中身は次ページ 中でなにをやっているか理解しておくこと 出力ファイルはWGS84座標 2個のGPSファイルを変換 出力ファイル名は GPS1.txt GPS2.txt にすること ROOTを使って処理 マクロは t.Cを使ってntupleを作成 Ntupleの使い方は 猫ROOT、猿ROOT等の日本語ドキュメントを参照 VMWARE,LINUX、ROOT等については二宮君にきいてください。 LINUX, C++については3年実験で習得しているともと仮定して話を
conv.pl @Lines = <FILE>; close(FILE); $a = 6378137; $e2 = 2*$f - $f*$f; foreach $line ( @Lines ){ if ( $line =~ /GPGGA/ ){ @par = split( /,/, $line ); ($time, $phi, $rammda, $h ) = ($par[1], $par[2], $par[4], $par[9] ); # print "$time $phi $rammda $h\n"; $p = $phi; $r = $rammda; $pdeg = int($p/100); $pmin = $p - $pdeg*100; # print ("$pdeg $pmin\n"); $p = ($pdeg + $pmin/60.0 ) / 180.0* 2*3.1415926535; $phi = $p; $rdeg = int($r/100); $rmin = $r - $rdeg*100; # print ("$rdeg $rmin\n"); $r = ($rdeg + $rmin/60.0 ) / 180.0* 2*3.1415926535; $rammda = $r; # print ( "$time $phi $rammda $h \n"); print ( "$time $pdeg $pmin $rdeg $rmin $h \n"); $N = $a/sqrt( 1.0- $e2*sin($rammda)*sin($rammda) ); $x = ($N+$h)*cos($phi)*cos($rammda); $y = ($N+$h)*cos($phi)*sin($rammda); $z = ($N*(1.0-$e2)+$h)*sin($phi); # print "$time $x $y $z\n"; } conv.pl
#define ASIZE 3600 { FILE *fp; double clock, pdeg, pmin, rdeg, rmin, h; double phi, rammda; double PI = 3. 14159265358979323846; double a = 6378137.0; double f = 1.0/298.257223563; double e2 = 2.0*f + f*f; double x, y,z; double N; int t1[ASIZE], t2[ASIZE]; double x1[ASIZE], y1[ASIZE], z1[ASIZE]; double x2[ASIZE], y2[ASIZE], z2[ASIZE]; int id1, id2; id1=0; id2=0; fp = fopen( "GPS1.txt","r"); if ( fp == NULL ) { print ("file not opened \n"); exit(-1); } while ( fscanf( fp, "%lf %lf %lf %lf %lf %lf", &clock, &pdeg, &pmin, &rdeg, &rmin, &h ) !=EOF ){ //printf ( "%f %f %f %f %f\n", clock, pdeg, pmin, rdeg,rmin, h ); phi = (pdeg + pmin/60.0) /180.0 * PI; rammda = (rdeg + rmin/60.0) /180.0 * PI; // printf ( "%24.10f %f \n", phi, rammda ); N = a/sqrt( 1.0- e2*sin( phi) *sin(phi)); x = (N+h)*cos(phi) *sin(rammda); y = (N+h)*cos(phi) * cos(rammda); z = (N*(1-e2))*sin(phi); t.c
printf( "%f %f %f %f \n", clock, x,y,z ); t1[id1] = int( clock); x1[id1] = x; y1[id1] = y; z1[id1] = z; id1++; } fclose( fp ); fp = fopen( "GPS2.txt","r"); if ( fp == NULL ) { print ("file not opened \n"); exit(-1); while ( fscanf( fp, "%lf %lf %lf %lf %lf %lf", &clock, &pdeg, &pmin, &rdeg, &rmin, &h ) !=EOF ){ //printf ( "%f %f %f %f %f\n", clock, pdeg, pmin, rdeg,rmin, h ); phi = (pdeg + pmin/60.0) /180.0 * PI; rammda = (rdeg + rmin/60.0) /180.0 * PI; // printf ( "%24.10f %f \n", phi, rammda ); N = a/sqrt( 1.0- e2*sin( phi) *sin(phi)); x = (N+h)*cos(phi) *sin(rammda); y = (N+h)*cos(phi) * cos(rammda); z = (N*(1-e2))*sin(phi); t2[id2] = int( clock); x2[id2] = x; y2[id2] = y; z2[id2] = z; id2++;
ntu = new TNtuple("ntu","ntu","t:x1:y1:z1:x2:y2:z2"); int i1, i2; for ( i1=0; i1<id2; i1++ ){ for ( i2=0; i2<id1; i2++ ){ if ( t1[i1] == t2[i2] ){ printf( "t1[i1] \n"); ntu->Fill( t1[i1], x1[i1], y1[i1], z1[i1], x2[i2], y2[i2], z2[i2] ); } exit;