RTK測位アルゴリズム の基礎と プログラミング

RTK-GPS測位の基礎と
プログラミング (9)
Basics of RTK-GPS Positioning and Its Programing
東京海洋大産学官連携研究員/技術コンサルタント
高須 知二
Tomoji TAKASU
内容
• パッケージ構成
• プログラム構成
• 共通ヘッダ・共通ルーチン
• RINEX読み込み
• 整数最小二乗
• RTK測位
• 後処理基線解析AP
http://gpspp.sakura.ne.jp
パッケージ構成
• rtklib_1.0.tar.gz
./src
: ソースプログラム
./test
: テストプログラム・データ
./util
: ユーティリティ
./doc
: 文書
./gcc
: 構築環境GCC
./msc
: 構築環境MSC
./icc
: 構築環境Intel C+MKL
http://gpspp.sakura.ne.jp
プログラム構成
• rtklib.h
rtkcmn.c
readrnx.c
lambda.c
geoid.c
rtkpos.c
rnx2rtkp.c
• pos2kml.c
:
:
:
:
:
:
:
:
共通ヘッダ
共通ルーチン
RINEXファイル読み込み
整数最小二乗
ジオイドモデル
RTK測位
RTK測位メイン
変換ユーティリティ
http://gpspp.sakura.ne.jp
共通ヘッダ
• 定数
• 共通型
gtime_t
: 時刻構造体
obsd_t
: 観測データレコード
obs_t
: 観測データ構造体
eph_t
: 航法メッセージレコード
nav_t
: 航法メッセージ構造体
• 関数プロトタイプ宣言
http://gpspp.sakura.ne.jp
共通ルーチン (1)
• 行列・ベクトル演算
mat(),zeros(),eye() : 行列生成
dot(),norm() : 内積, euclidノルム
matmul(), matinv() : 行列積、逆行列
solve()
: 線形方程式
lsq()
: 最小二乗法
filter()
: Kalmanフィルタ更新
matprint() : 行列・ベクトル印刷
http://gpspp.sakura.ne.jp
共通ルーチン (2)
• 文字列・時刻操作
str2num() : 文字列→数値
str2time(),time2str() : 時刻→文字列
gpst2time(),time2gpst()
: GPST→時刻
gpst2utc(),utc2gpst(): GPST→UTC
timeadd() : 時刻加算
timediff() : 時刻差
http://gpspp.sakura.ne.jp
共通ルーチン (3)
• 座標変換
ecef2pos()
pos2ecef()
ecef2enu()
enu2ecef()
covenu()
geoidh()
:
:
:
:
:
:
ECEF→緯度経度高度
緯度経度高度→ECEF
ECEF→局地座標系
局地座標系→ECEF
局地座標系共分散
ジオイド高
http://gpspp.sakura.ne.jp
共通ルーチン (4)
• 航法ルーチン
eph2pos() : 航法msg→衛星位置
satpos()
: 衛星位置・衛星時計計算
geodist() : 幾何学距離計算
ionmodel() : 電離層モデル
tropmodel() : 対流圏モデル
pntpos()
: 単独測位
http://gpspp.sakura.ne.jp
RINEX読み込み
• int readrnx(char **files, int n,
obs_t *obs, nav_t *nav)
files
n
obs
nav
I
I
O
O
RINEXファイル
ファイル数
観測データ
航法メッセージ
http://gpspp.sakura.ne.jp
整数最小二乗
• int lambda(int n, int m, double *a,
double *Q, double *F, double *s)
n,m
a
Q
F
s
I
I
I
O
O
パラメータ数,Fix解数
Float解
Float解共分散
Fix解
重み付残差二乗和
http://gpspp.sakura.ne.jp
RTK測位
• void rtkpos(infunc_t input, outfunc_t
output, int mode, int nf, double *rb,
double elmin, double thres, int opt)
input
I
入力コールバック
output
I
出力コールバック
mode,nf,rb,elmin,thres,opt
I
測位パラメータ
http://gpspp.sakura.ne.jp
RTK測位 rtkpos()
観測データ入力
単独測位
精密相対測位
整数Ambiguity決定
測位解出力
http://gpspp.sakura.ne.jp
精密相対測位
共通衛星選択
状態変数時間更新
二重差残差計算
観測誤差共分散計算
Kalmanフィルタ更新
http://gpspp.sakura.ne.jp
整数Ambiguity決定
2重差バイアス生成
整数最小二乗
Fail
検定
Float解→Fix解計算
http://gpspp.sakura.ne.jp
後処理基線解析AP
• rnx2rtkp [option...] file file [...]
-h
-o output
-p mode
-m mask
-f freq
-v thres
-i
-e
-g
-t
-u col
-s sep
-r x y z
print help
output file
mode (0:single,1:dgps,2:static,3:kinematic)
elevation mask angle (deg)
number of frequencies (1:L1,2:L1+L2)
threshold of ratio-test for integer ambiguity validation
instantaneous integer ambiguity resolution
output x/y/z-ecef position [latitude/longitude/height]
output latitude/longitude in the form of ddd mm ss.ss
output time in the form of yyyy/mm/dd hh:mm:ss.ss
columns of time under decimal point
field separator
reference (base) receiver ecef pos (m)
http://gpspp.sakura.ne.jp
性能評価
• 定点測位
電子基準点
基線長
評価内容
• 移動体測位
自動車走行
基線長
評価内容
: 2004/1/1-12/31(30s)
: 0.3,3.3,4.3,~33.1km
: FIX率、精度
: 42分(1Hz),54分(2Hz)
: 0.1~3.1km
: FIX率、走行軌跡
http://gpspp.sakura.ne.jp