2012年7月28日土曜日

RTKLIBのrtkpostをLINUXで動かす

RTKLIBってwindows版がメインなのか、残念・・・
LINUX版はコマンドラインのappしかなくてマウスでぐりぐりできないよ・・・

て思う人も結構いそうだけど、何気にwineで動くんだよね。

$ wine rtkpost.exe




rtklibを使ってRINEX L1, C1, L2, P2を表示させる

rtklibというGNSS解析ソフトウェアがある。
    http://www.rtklib.com/

なんとフリーで、オープンソース。
ざっと中身を見ると、APIもかなり充実していて、インターフェースが非常にシンプル。単独測位くらいまでならほとんど自前でコーティングせず作れてしまいそう。すごい。

とりあえずRINEXファイルを表示だけするものを作ってみたので使い方をメモ。

rtklibを使って少しずつGNSS解析の中身を理解していきたい。
(*C1, P2と書いたけど、rinex.cの中で優先順位が決まっているので、きちんと固定するには setrnxcodepriを呼ばなければいけない)
 /*
 * printobs.c
 *
 *  Created   : 2012/07/28
 *      Author: sako
 */
#include "stdio.h"
#include "stdlib.h"
#include "rtklib.h"

/* copied from postpos.c in rtklib v2.4.1 */
static int nextobsf(const obs_t *obs, int *i, int rcv) {
    double tt;
    int n;
    
    for (;*in;(*i)++) if (obs->data[*i].rcv==rcv) break;
    for (n=0;*i+nn;n++) {
        tt=timediff(obs->data[*i+n].time,obs->data[*i].time);
        if (obs->data[*i+n].rcv!=rcv||tt>DTTOL) break;
    }
    return n;
}

int main(int argc, char *argv[]) {
    char *rinex_o;
    int i, j, nu;
    char tmstr[20];

    obs_t obs={0};
    nav_t nav={0};
    sta_t sta[1];

    /* parse argument */
    if (argc > 1) {
     rinex_o = (char *) malloc( strlen(argv[1]) + 1);
     strcpy(rinex_o, argv[1]); 
    }
    else {
        printf("no input file\n");
        return -1;
    }

    /* read rinex obsfile */
    if(readrnx(rinex_o, 0, &obs, &nav, &sta[0]) <= 0) {
        printf("Can't read rinex obs file.\n");
    }

    i = 0;
    while(i<obs.n) {
        /* seek index of the next epoch */
        nu = nextobsf(&obs, &i, 0);
        printf("----- epoch start -----\n");
        printf("sat num: %d\n", nu);

        for(j=i;j<i+nu;j++) {
            time2str(obs.data[j].time, tmstr, 0);
            printf("%2d: %s %3d %f %f %f %f\n", j-i, tmstr, obs.data[j].sat,
                obs.data[j].L[0], obs.data[j].P[0],
                obs.data[j].L[1], obs.data[j].P[1]);
        }
        i += nu;
    }

    return 0;
}

2012年7月24日火曜日

教科書を注文

GNSS - Global Navigation Satellite Systems: GPS, GLONASS, Galileo and More [ペーパーバック]
Bernhard Hofmann-Wellenhof , Herbert Lichtenegger , Elmar Wasle










widelane+narrowlaneくらいを勉強がてら自分で計算してみたいけど、基準衛星の選択とかが面倒くさそうな気がする。座標変換も面倒くさそうな気がする。

ああ、こんなこと考えながらwidelaneてどんな式だっけか、と今日思ったのがこの教科書を買う動機だったのを思い出した。





ええ!teqcってRINEX ver.2.12に対応してないのか!?
じゃあ作ったプログラムはファイルの結合と、ヘッダにプログラム名を入れて自己満にひたるために使うか。

2012年7月13日金曜日

GNSS IFB

ブログをはじめることにした。

GNSSの勉強やプログラミングのメモなどを書いていこうと思っている。

今日読んだのはこれ。


Demystifying GLONASS Inter-Frequency Carrier Phase Biases

 http://www.insidegnss.com/node/3073


これまでGLONASSを別の種類の受信機で二重位相差を取ると発生する周波数依存のバイアスは、回路の群遅延だと思っていた。

でもこの論文によるとその影響はせいぜい0.1mm程度で、数cmにも達するこのバイアスは受信機ファームウェア内の信号処理に起因するとのこと。

よって、温度にも依存しないし、一定値となることが期待される。
これが本当ならバイアスの傾きを定数として求めておくことは十分可能だと思われる。

しかも、周波数に一つ、ではなく、受信機に一つだけ求めておけば良い。
(距離に直すと同じ値のバイアスになるため)

・・・しかし、これは、本当に本当なんだろうか。

2012年7月11日水曜日

テスト

テストです

ブログをはじめることにした。

GNSSの勉強や、プログラミングのメモなどを書いていこうかと思っている。