GPS使用マニュアル 使用するPC 二宮机の隣にあるPCを使用

GPS使用マニュアル
使用するPC
• 二宮机の隣にあるPCを使用
• アカウントは個人用つくってもらうこと
• 管理者は二宮
モジュールのデータをすいあげる
• GPSBabelを使用
– http://www.gpsbabel.org/
• 具体的な使い方は次ページの使用している
画面と Helpを参照すること
• 使用するデバイスはその都度かわるので、動
かないときは別のCOM番号を試すこと。
• GPSモジュールは2個あるので、別々のファ
イル名でデータを吸い上げること(例 GPS1,
GPS2)
データの処理
•
吸い上げたデータはVMWARE上のLINUXのPerlとROOTで処理します。
1.
2.
3.
VMWAREをたちあげ、LINUXをたちあげる
Windows上と同じようにファイルを選択して、ドラッグして、ファイルを移動させる
移動させたファイルをLINUX上で中身を確認すること
–
NMEフォーマットhttp://www.gpscompass.jp/info.html
Perl で変換
4.




perl conv.pl 入力ファイル名 > 出力ファイル名
conv.plの中身は次ページ
中でなにをやっているか理解しておくこと
出力ファイルはWGS84座標
2個のGPSファイルを変換 出力ファイル名は GPS1.txt GPS2.txt にすること
ROOTを使って処理
5.
6.
–
–
マクロは t.Cを使ってntupleを作成
Ntupleの使い方は 猫ROOT、猿ROOT等の日本語ドキュメントを参照
•
VMWARE,LINUX、ROOT等については二宮君にきいてください。
LINUX, C++については3年実験で習得しているともと仮定して話を
@Lines = <FILE>;
conv.pl
close(FILE);
$a = 6378137;
$f = 1/298.257223563;
$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;
$r = $rammda;
$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";
}
}
#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);
printf( "%f %f %f %f \n", clock, x,y,z );
t2[id2] = int( clock);
x2[id2] = x;
y2[id2] = y;
z2[id2] = z;
id2++;
}
fclose( fp );
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;
}