Quantcast
Channel: OSQZSS
Viewing all 643 articles
Browse latest View live

電子基準点データの取得

$
0
0
RTKNAVIの使い方で設置した基地局のアンテナ位置を求めるために,
近くの電子基準点データを用いて精密測位を実施します.

電子基準点のデータは,国土地理院の電子基準点データ提供サービス
公開されています.

まず,メインメニューから提供サービスをクリックしてサインインをします.

 (クリックで拡大)

ログインIDとパスワードを入力して,提供サービスにログインします.
はじめて提供サービスを受ける方は,ユーザー登録が必要です.

 (クリックで拡大)

提供サービスのメニューから,電子基準点選択をクリックします.

 (クリックで拡大)

地図上の赤点が電子基準点の位置になります.表示地区変更のプルダウン
メニューから,希望する電子基準点の地域を選びます.赤点をクリックすると,
その電子基準点が選択され,選択した電子基準点のボックスに表示されます.
ここでは,千葉市川の電子基準点を選んでいます.基準点を選択したら,
メニューから日付指定・点情報表示をクリックします.

 (クリックで拡大)

ここで,選択した電子基準点のID番号を控えておいてください.
後ほど,この電子基準点の座標を知るために必要になります.

電子基準点メニューで,ダウンロードするデータの期間を指定します.
期間を指定したら,観測データの一覧をクリックします.

 (クリックで拡大)

観測データ一覧から,希望する期間のデータをチェックして,
ダウンロードページへをクリックします.

 (クリックで拡大)

観測データ詳細一覧のページが開きますので,希望する時間帯の
観測ファイルをダウンロードします.

 (クリックで拡大)

ここでは,30231020.14o.gzという圧縮ファイルがダウンロードされました.
この圧縮ファイルの解凍には,7-ZIPがお勧めです.
解凍された観測ファイルは,RINEXというフォーマットのテキストファイルになります.
RINEXの詳細については,こちらをご参照ください.

 (クリックで拡大)

基地局の精密な位置を求めるためには,この電子基準点の位置が基準になります.
電子基準点の位置をダウンロードするために,提供サービスメニューに戻り,
日々の座標値[F3]をクリックします.

 (クリックで拡大)

リストの中から,観測データをダウンロードした電子基準点のIDがついている
ファイルを選びます.千葉市川のIDは93023ですので,93023.14.posを開きます.

 (クリックで拡大)

このファイルには,国土地理院が解析した電子基準点の座標データが記録されています.

 (クリックで拡大)

さて,これで基地局のアンテナ位置を求めるための基準となる電子基準点の
観測データとその座標が揃いました.

次は,これらのデータをRTKPOSTで解析します.

RTKPOSTで精密測位

$
0
0
RTKNAVIの使い方で設置した基地局の精密なアンテナ位置を求めるために,
まずは測位の基準点となる電子基準点のデータをダウンロードしました.

基地局の観測データは,u-blox社が提供するGPS評価用ソフトウェアの
u-centerを使って取得します.

ublox: u-center GNSS evaluation software for Windows

u-centerと受信機の接続については,こちらをご参照ください.



ここでは,取得されたデータのファイル名をbase_140412_013700.ubxとします.

 (クリックで拡大)

まず,RTKCONVを使用して,このUBXフォーマットのファイルから,標準的な
RINEXフォーマットの観測ファイルと衛星軌道情報ファイルを生成します.

 (クリックで拡大)

RTKCONVを起動し,RTCM, RCV RAW or RINEX OBSのボックスで,UBXファイルを
選択します.Formatには,プルダウンメニューからu-bloxを選びます.
出力ファイルには,RINEX OBS/NAV/GNAV/HNAV/QNAV/LNAV and SBSのリストから,
OBSとNAVをチェックします.

 (クリックで拡大)

次に,Optionsボタンをクリックして,生成するRINEXファイルの詳細を設定します.
ここでは,RINEX Versionに,電子基準点からダウンロードしたRINEXと同じ2.10を選びました.
LEA-4Tの場合,Satellite SystemsはGPSのみ,FrequenciesはL1のみとなります.
Observation TypesにはC(疑似距離),L(搬送波位相),D(ドップラー),S(信号強度)を
選んでいます.

 (クリックで拡大)

設定後にConvertをクリックすると,観測ファイルのOBSと衛星軌道情報ファイルのNAVが
生成されます.

 (クリックで拡大)

これで,基準局のアンテナ位置を求めるために必要なファイルがすべて揃いました.
精密測位を実施するために,RTKPOSTを起動します.

 (クリックで拡大)

RINEX OBS: Roverには,精密位置を求めたい基地局の観測ファイルを選びます.
RINEX OBS: Base Stationには,電子基準点の観測ファイルを選びます.
RINEX NAV/CLKには,衛星軌道情報ファイルを選びます.

 (クリックで拡大)

次に,Optionsボタンをクリックして,測位演算の詳細を設定します.

Setting 1のタブでは,Positioning ModeにKinematicを選びます.
FrequenciesはL1のみ,Elevation Maskは15度としました.

 (クリックで拡大)

Setting 2のタブでは,Integer Ambiguity ResとしてContinuousを選びました.

 (クリックで拡大)

Positionsのタブでは,Base Stationである電子基準点の座標を指定します.
ここでは,電子基準点データ提供サービスからダウンロードした千葉市川の
日々の座標値から,最新の値を入力しました.

 (クリックで拡大)

設定後にExecuteボタンをクリックすると,測位演算が開始されます.

 (クリックで拡大)

ここでは,base_140412_013700.posというファイルに測位結果が出力されます.

Plotボタンをクリックすると,この測位結果をグラフ表示することができます.
黄色の点がInteger Ambiguityが解けていないFloat解,緑色の点が搬送波位相の
波数が解けたFix解となります.

 (クリックで拡大)

Viewボタンをクリックすると,測位結果のテキストファイルが開かれます.
Qの列が測位解の状態を示しており,2がFloat解,1がFix解となります.

 (クリックで拡大)

RTKNAVIによるラジコンカーの測位では,今回の処理でRoverであった
基地局アンテナがBase Stationになり,ラジコンカーがRoverになります.
その際の基地局アンテナの精密位置には,測位結果のQが1である
Fix解の座標を使用しています.

AndroidでRTKLIB

$
0
0
準天頂衛星アプリコンテストに参加するために,まずはAndroidアプリの
開発環境を準備してみました.

ちなみに,スマートフォンに触れたことすらない初心者です.
スワイプって何?

ネットで探すと多くの入門記事があります.Eclipseをベースにした
Android Development Tools(ADT)と,新しいAndroid Studioがありますが,
ネットの情報が多いADTを選びました.

基本的に,こちらの記事の手順で開発環境をインストール.
ソフトウエアのバージョンは多少新しくなり,次の通りです.

Java SE Development Kit 7u55
ADT Bundle for Windows 20140321

準天頂アプリコンテストでは,プラットフォームをNexus 7 (2012)としています.
そこで,Android SDK Managerの設定では,Android 4.2.2 (API 17)のSDK Platformと
Google API,ARM EABI v7a System Imageをインストールしました.

 (クリックで拡大)

ここからは,こちらの記事を参考に,仮想デバイスを作成してエミュレータを起動.
Memory OptionsでRAMは512MB,VM Heapは64MBにしています.

 (クリックで拡大)

その後,プロジェクトの作成と実行をして,とりあえずエミュレータ上にHello World!を
表示することができました.

さて,開発環境が整ったので,Androidに移植されたRTKLIBがビルドできるかなと思い立ち,
気軽に手を出したのですが,これが泥沼でした.

エミュレータで動かすまで,休日を丸一日費やしたので,備忘録として記事に残しておきます.

このRtkGpsは,RTKNAVIの機能をAndroidに移植したものです.一時,Google Playに登録
されていたのですが,今は削除されています.しかし,GitHubにソースコードが公開されて
いるので,まずはこれを入手します.

GitHub: illarionov/RtkGps

ここで注意が必要なのは,RtkGpsのリポジトリの一部が,他のプロジェクトのリポジトリを
参照しています.ここでDownload ZIPをクリックしてでソースコードをダウンロードすると,
この外部のリポジトリにリンクしているフォルダのコンテンツは空っぽです.そのため,
必ずcloneをしてください.

 (クリックで拡大)

ちなみに,RTKLIBのフォルダはRTKLIBのリポジトリに,simonlynen_android_libsの
フォルダはLAPACKなどの移植版を含むandroid_libsにリンクしています.

RtkGpsのソースコードには.projectファイルがあり,このままEclipseにインポートできます.
AndroidManifest.xmlの中身を見てみると,targetSdkVersionが17となっており,すでに
インストールしたAndroid 4.2.2のプラットフォームで開発ができそうです.

ADTにプロジェクトをインポートすると,ビルドが自動的に始まります.
エラーも警告も出ないので,RunメニューからRun as Android Applicationを選んで,
エミュレータで実行してみます.

 (クリックで拡大)

しかし,ここでエラー.RtkGpsが実行できません.LogCatを見ても,何のことやらさっぱり.

 (クリックで拡大)

とりあえず,findLibrary returned nullを検索してみると,NDKやJNIといったキーワードが出てきます.
そういえば,RtkGpsのプロジェクトにjniというフォルダがあります.

さらにこれらを検索すると,どうやらCやC++で書かれたコードをAndroid上で実行するための仕組みのようです.
なるほど,そうやって移植するのか.

developer.android.com: Android NDK

そこで,Android NDKのサイトを頼りに,開発環境を追加.System and Software Requirementsを読むと,
Cygwinをインストールする必要があるようです.この時点でのCygwin DLLのバージョンは1.7.29です.
インストールの際に,Select PackagesでDevelを忘れずにInstallします.

 (クリックで拡大)

Android NDKのRequired development toolsであるmakeとawkのバージョンは以下の通り.

$ make --version
GNU Make 4.0
$ gawk --version
GNU Awk 4.1.1, API: 1.1 (GNU MPFR 3.1.2, GNU MP 6.0.0)

Cygwinのコンソールを立ち上げ,RtkGpsのプロジェクトフォルダでndk-buildを実行すると,
ライブラリのビルドが開始されます.

 (クリックで拡大)

スムーズに行くかと思いきや,こちらもエラーに遭遇.

まず,いくつかの.hファイルの中身が,単に他のファイルへのパスになっています.
これでも書式としては問題ない気がしますが,とりあえず#includeに書き直します.

 (クリックで拡大)

この変更が必要なのは,以下の6つのファイルです.

RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/SRC/blaswrap.h
RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/SRC/f2c.h
RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/INSTALL/blaswrap.h
RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/INSTALL/f2c.h
RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/BLAS/SRC/blaswrap.h
RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/BLAS/SRC/f2c.h

次に,Static Libraryを生成する際に,Argument list too longのエラーが発生します.

 (クリックで拡大)

これも何かと調べてみると,どうやらコマンドラインの引数となるファイル名の数が
多すぎるようです.これを回避するためには,Android.mkに以下のラインを追加する
必要があるようです.

LOCAL_SHORT_COMMANDS := true

 (クリックで拡大)

この変更が必要なファイルは,以下の2つです.

RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/SRC/Android.mk
RtkGps/jni/simonlynen_android_libs/lapack/jni/clapack/BLAS/SRC/Android.mk

さて,これで問題は解決するのですが,NDK/docs/ANDROID-MK.htmlで次のような
コメントがあります.

NOTE: We do not recommend enabling this feature by default, since it
makes the build slower.

この警告の通り,ビルドは見事なほどに遅くなります.1時間以上かかりますので,
のんびりと待ちましょう.

 (クリックで拡大)

これで,RtkGpsに必要なライブラリも生成されました.

ADTに戻り,再度エミュレータにインストールすると,無事にRtkGpsが起動!

 (クリックで拡大)

GPS受信機とはUSBやBluetoothで接続するのですが,エミュレータでそこまで
模擬できるのかは不明です.実機で試してみたいな.

【追記】ちなみに,測位中の画面はこんな感じらしい.

 (クリックで拡大)

Raspberry PiでRTKLIB

$
0
0
積み基板の消化に,Raspberry PiにもRTKLIBをインストールしてみました.

ちょっとすごいロガーが繋がるようなので,アンオフィシャルなコマンド
NEO-6Mにrawデータを出力させれば,精密測位も楽しめそうです.

ina111's blog: ちょっとすごいロガーを便利に使う(4)Raspberry Piに接続

まずは,公式ページからOSのイメージファイルをダウンロードします.
今回は,RASPBIANを選びました.

raspberrypi.org: Downloads

Image installation guidesに従って,イメージファイルを書き込みます.
SDカードの容量は4GBのものを選びました.

raspberrypi.org: INSTALLING OPERATING SYSTEM IMAGES USING WINDOWS

SDカードの準備ができたら,Raspberry Piに差し込み,起動します.
その前に,シリアルコンソールでログインするために,PCとUSBシリアル変換ケーブルで
接続しておきます.ここでは,ストロベリーリナックスのUSBシリアル変換ケーブルを使います.

ストロベリーリナックス:OLIMEX USBシリアル変換ケーブル(3線式)



Raspberry Piを起動すると,まずはraspi-configを実行して初期設定を行うようにと
メッセージが表示されます.

 (クリックで拡大)

raspi-configを実行すると,次のような画面が表示されます.

 (クリックで拡大)

各項目の説明は,以下のサイトが参考になります.

digitale bottega cresc wiki:Raspbian 初期設定(raspi-config)

SDカードに書き込んだRASPBIANのイメージは,2.7GB程度しか使用していないので,
Expand Filesystemで4GBの容量をすべて使うようにパーティションをリサイズします.
次に,Internationalisation Optionsで,タイムゾーンをTokyoに設定しました.
その他の設定は,defaultのままです.

設定が終了したら,Tagキーを押して,<Finish>を選択すると,再起動します.
これで初期設定は終了です.

RTKLIBのインストールは,基本的にBeagleBoneでのインストールと同じ手順ですが,
今回は最新のパッチもあてておきます.

まず,RTKLIBをダウンロードします.

$ wget http://www.rtklib.com/prog/rtklib_2.4.2.zip
$ unzip rtklib_2.4.2.zip

次に,最新のパッチをダウンロードして,RTKLIBのフォルダに上書きします.

$ wget http://www.rtklib.com/prog/rtklib_2.4.2_p4.zip
$ unzip rtklib_2.4.2_p4.zip
$ cp -rf rtklib_2.4.2_p4/* rtklib_2.4.2

これで準備が整いましたので,appフォルダに移動してビルドします.

$ cd rtklib_2.4.2/app
$ chmod 755 makeall.sh
$ ./makeall.sh

ビルドには30分ほどかかりますので,のんびりと待ちましょう.

ビルドが終了すると,RTKNAVIに相当するコマンドラインのrtkrcvが出来ます.

$ cd rtklib_2.4.2/app/rtkrcv/gcc

まずは,LEA-4Tを接続して単独測位を試してみます.



rtkrcvの設定ファイルとして,rtkrcv.confをベースに,single_pi.confを準備します.

inpstr1-type =serial # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,7:ntripcli,8:ftp,9:http)
inpstr1-path =ttyACM0:115200:8:n:1:off
inpstr1-format =ubx # (0:rtcm2,1:rtcm3,2:oem4,3:oem3,4:ubx,5:ss2,6:hemis,7:skytraq,8:sp3)

測位結果は,tcp serverに出力して,それをPC側のRTKPLOTで表示させます.

outstr1-type =tcpsvr # (0:off,1:serial,2:file,3:tcpsvr,4:tcpcli,6:ntripsvr)
outstr1-path =localhost:52001

測位モードは単独測位,周波数はL1のみとなります.

pos1-posmode =single # (0:single,1:dgps,2:kinematic,3:static,4:movingbase,5:fixed,6:ppp-kine,7:ppp-static)
pos1-frequency =l1 # (1:l1,2:l1+l2,3:l1+l2+l5)

rtkrcvから実行されるrtkstart.shとrtkshut.shの属性も,忘れずに実行可能にしておきます.

$ chmod 755 rtkstart.sh
$ chmod 755 rtkshut.sh

これで単独測位の準備が整いましたので,rtkrcvを実行します.

$ ./rtkrcv -o single_pi.conf

新しいオフィスでは,屋上に設置したアンテナにアクセスできるので,測位結果も良好です.

 (クリックで拡大)



次に,BeagleBoneと同じ設定で,PPPを試してみます.

 (クリックで拡大)

こちらも,BeagleBoneよりも安定した結果が得られています.
最新のパッチを当てたのが功を奏しているのかな?

htopでCPUの負荷を調べてみると,BeagleBoneより少なく,
全体の3%しか使っていません.

 (クリックで拡大)

Raspberry PiよりBeagleBoneの方がハードウェアとしての性能は高いと
思っていたのですが,RTKLIBはRaspberry Piの方が快適に動作するようです.
ubuntuとdebianの違いなのでしょうか?

NavSparkのオンラインストア

$
0
0
indiegogoで資金を集めていたNavSparkが,オンラインストアをオープンした.

NavSpark Store: http://navspark.mybigcommerce.com

搬送波位相が出力されるNS-RAWは,indiegogoのサイトではS1315Fをベースに
していると説明されているが,オンラインストアの製品は他のモジュール同様に
Venus822Aを搭載している.

NS-RAW: CARRIER PHASE RAW MEASUREMENT OUTPUT GPS RECEIVER

RTKLIBが対応しているみたいなことを書いているけれど,フォーマットは
S1315Fと同じなのかな?

しかし,GPSのrawデータしか出力されないのか.これで$80はちょっと高い.
Venus822Aの機能的には,GPS+GLONASS+Galileo+BeiDouのすべてに
対応しているようなので,今後のfirmwareのアップデートに期待.

あと,気になるのがフロントエンド.NavSpark-GLとBDに搭載されている
謎のフロントエンドはどこのものだろう?



とりあえずCAN 5125Mで検索したけれど,ヒットなし.情報求む.

【追記】ちなみに,NVSの新しいNV08C-CSMとファームウェアもGalileoと
BeiDouに対応している.これもrawデータを出力してくれないかな.

NVS Technologies AG: New HW and FW release for NV08C-CSM series

RtkGpsとOpenStreetMap

$
0
0
エミュレータ上で測位が確認できたRtkGpsですが,メニューからMapを開いてみると
ただの方眼紙が表示されて,地図は空っぽです.

 (クリックで拡大)

Map表示には,デフォルトでAndroid版のOpenStreetMapライブラリであるosmdroidを
使っているようです.

osmdroid: OpenStreetMap-Tools for Android

確かにlibsフォルダの中にそれらしいライブラリがありました.

エミュレータで地図を表示させようとしたときのLogCatのメッセージを見ると,
Problem downloading MapTileという警告が出ています.

osmdroid関連の問題だろうと検索してみると,stackoverflowでこんなスレッドを発見.

Osmdroid and Mapnik tile provider no longer working
Downloading maptile: /0/0/0 HTTP response: HTTP/1.1 403 Forbidden

そこで,まずはsrc/ru0xdc/rtkgps/MapFragment.javaのTile SourceをMAPNIKから
MAPQUESTOSMに変更してみました.

 (クリックで拡大)

しかし,これで警告は消えるのですが,地図はあいかわらず空っぽのままです.

半分あきらめてosmdroidのソースコードを眺めていたのですが,MapTileの保存先に
外部メモリが指定されていることに気づきました.

osmdroid-android/src/main/java/org/osmdroid/tileprovider/constants/OpenStreetMapTileProviderConstants.java

/** Base path for osmdroid files. Zip files are in this folder. */
public static final File OSMDROID_PATH = new File(Environment.getExternalStorageDirectory(), "osmdroid");

そう言えば,osmdroidのwikiにも,エミュレータの設定でSDカードの容量を指定するように
書いてあったような.

osmdroid wiki: How to compile and run using Eclipse

SDカードスロットのないNexus 7をターゲットにしていたので無視していたのですが,
wikiの指示通りに設定したところ,無事に地図が表示されました.RTFM

 (クリックで拡大)

測位結果が赤色なので,隣にpegmanが立っていると,殺人現場みたいですね…

さて,これでソースコードから一通りの機能がビルドできようになりました.

次は実機にbluetooth経由でubloxのrawデータを接続したいな.

AndroidでGoogle Maps

$
0
0
衛星測位のアプリケーションならGoogle Mapを使ってみたいので,
Google Maps Android API v2の勉強.

頻繁に開発ツールやAPIがアップデートされているためか,検索でヒットする
サイトの説明が結構ばらばらです.SDKもインストールしたばかりなので,
Google Developersの最新情報を参考に,作業を進めます.

Google Maps API: Getting Started

非常に丁寧な説明で,基本的に順番通りに進めて行けば良いのですが,
説明がテキストベースということもあり,API keyの取得には戸惑いました.
ここは,スクリーンショットが豊富な解説サイトが参考になります.

Google Maps Android API v2 - Tutorial
Android working with Google Maps V2

さて,Getting Startedでは,Add a mapでサンプルをビルドするところまでしか
説明されていません.

とりあえずエミュレータでで実行してみたのですが,まずは失敗.

 (クリックで拡大)

エラーメッセージを頼りに検索してみたら,こんなスレッドを発見.

stackoverflow: This app won't run unless you update Google Play Services

UPDATE
The Google maps API v2 is now installed on the latest Google system images (api:19 ARM or x86).
So your application should just work with the new images. There is no need to install these files.

どうやらGoogle Maps API v2をサポートしているsystem imageはAPI Level 19以上のようです.
そこで,AVDのTargetをGoogle APIsのLevel 19で作りなおし.

 (クリックで拡大)

これで無事にGoogle Mapsがエミュレータで動作しました.

 (クリックで拡大)

BluetoothでRtkGpsに接続

$
0
0
準天頂衛星アプリコンテストでお借りしたNexus 7が届きました.
早速,Android版のRTKLIBであるRtkGpsをインストールしてみます.

Licenseを読むと,ソースコードも実行ファイルも配布は自由のようですので,
下記のリンクにアップしておきます.

http://www.muse.dti.ne.jp/ebinuma/download/rtkgps/

まず,apkファイルをインストールするために,SettingsのSecurityから,
Unknown sourcesをチェックしておきます.

 (クリックで拡大)

apkファイルをインストールする方法はいくつかあるようですが,
gmailのアドレスに送ったapkファイルへのリンク先を
Nexus 7で開くのが一番簡単そうです.

RktGpsには,Bluetooth経由でLEA-4Tを接続します.
ラジコンカーのRTK実験で作成したXBeeのピッチ変換基板に
ランニングエレクトロニクスのSBXBTを接続します.



BluetoothのUSBドングルには,その辺に転がっていたPlanexの
BT-Micro3E2Xを使いました.

SBXBTのファームウェアは,@HirakuTOIDAさんのアドバイス通りに
接続先のbaudrateを115200に固定したものに書き換えています.
LEA-4Tのシリアル出力もそれに合わせておきます.

Avionics for HPA: XBeeタイプマイコン基板 SBXBTでHPA_Navi IIを無線化する

さて,LEA-4TとSBXBTに給電してからNexus 7のBluetoothをONにすると,
SBXBTが見つかります.デバイス名をタップしてPINに0000を入力すると,
pairingできます.

 (クリックで拡大)

RtkGpsでは,まずメニューからInput streamsを選び,GPS受信機との
入力インターフェイスを設定します.

 (クリックで拡大)

今回は,単独測位を試すために,INPUT ROVERのみをONにして,
TypeからBluetoothを選びます.

 (クリックで拡大)

次にStream settingsをタップして,Bluetooth deviceにparingしている
SBXBTを選択します.

 (クリックで拡大)

Formatにはu-blox LEA-*Tを選びます.

 (クリックで拡大)

これで単独測位の準備が整いました.メニューからServerをONにすると
LEA-4Tに接続して,測位が開始されます.



お借りしたNexus 7はWi-Fi版ですが,モバイルWi-Fiルータを使えば
ntrip経由で基準局に接続することもできます.

次はリアルタイムでRTKを試してみよう.

【追記】HPA_Navi IIとの接続も確認.
ubloxからの出力は,2番目のXBeeのポートに直結しています.


Nexus 7でQZSS

$
0
0
準天頂衛星アプリコンテストの説明を読むと,Nexus 7 (2012)のWi-Fiモデルは,
準天頂衛星のL1-C/A信号を受信することができると書かれています.

しかし,これ,どうやって確認すれば良いのでしょうか?

そこで,Nexus 7に搭載されているGPS受信機の出力をモニタするために,
u-centerのAndroidアプリをインストールしました.

u-blox: u-center GPS evaluation App

Android版のu-centerにはNMEAモニタが搭載されており,
そこから受信機の状態を知ることができそうです.

 (クリックで拡大)

NMEAフォーマットの詳細は省くとして,$に続く最初の2文字はtalker IDと呼ばれ,
GPがGPS,GNがGPSとGLONASSのmixed data,QZがQZSSを示します.

それに続く3文字のうち,GSVが可視と予測される衛星,
GSAが測位演算に使われている衛星を示しています.

Nexus 7のNMEA出力を見てみると,QZGSAに衛星番号01があることから,
測位演算にQZSSの初号機,みちびきが使われていることが判ります.

GNGSAがあるため,GLONASSも受信しているのかと期待したのですが,
どうやら,Nexus 7 (2012)ではGLONASSは受信できていないようです.
Nexus 7 (2013)の仕様を見ると,こちらはGLONASSも受信できます.
コンテストの賞品,こっちにしてくれないかな…

ASUS: Nexus 7 (2013) スペック

QZGSVからは,仰角が69度,方位角が191度に衛星が見えていることが
判ります.これをGNSS Radarで予測した位置と比較すると,ほぼ同じです.
これがQZSS衛星で間違いないようです.

 (クリックで拡大)

さて,残った$PGLORは何でしょうか?

一般的に,$の次のPはProprietary(所有の,独占の)を意味しており,
受信機メーカが独自に決めたフォーマットを示しています.

どこのメーカのフォーマットかと調べてみたら,Global Locateのものであることが判りました.
この会社は,2007年6月にBroadcomに買収されています.

Broadcom to Acquire Global Locate, Inc., a Provider of Industry-Leading GPS Chips and Software

ネットで検索しても,フォーマットの仕様を見つけることはできませんでした.
衛星番号や通信の状態など,なんとなくは予想できそうですが,
仕様をご存じの方がいらっしゃいましたら教えてください.
A-GPS関連のセンテンスなのかな?

BeiDouの航法メッセージ

$
0
0
高須さんのところにskytraqから送られてきたrawデータ対応の
GPS+BeiDou受信機をお借りして評価しています.



NavSparkのBeiDou版かと思っていたら,モジュールタイプでした.
多分中身は同じで,CAN5125とVenus 8なのでしょう.
ファームウェアはrawデータ対応のカスタム品です.

観測データについては,GPSのrawデータ出力に対応している
S1315F-RAWと同じフォーマットなので,問題なくデコードできます.

しかし,BeiDouの航法メッセージのデコードが面倒なうえに,
ファームウェアがバグだらけ.ほぼskytraqのバグ取り要員です.
バグを指摘すると,次の日には新しいファームウェアが送られてきます.
1週間も経たずに,すでに2回もファームウェアが更新されました.

S1315F-RAWを評価したときを思い出します.歴史は繰り返される

ソフトウェア受信機でBeiDouの単独測位をしてから1年以上経つので,
ほどんど仕様を忘れており,同じところでつまづいています.

そんな訳で,備忘録.

1. 航法メッセージにはD1とD2の2種類がある.MEO/IGSOはD1,GEOはD2を放送.
2. D1が50bpsなのに対して,D2は500bps.
3. D1のサブフレームは6秒毎に繰り返される.一方,D2は0.6秒毎.
4. 5つのサブフレームで1つのフレームを構成.D1は30秒,D2は3秒で1フレーム.
5. D1のSOWは,それが含まれるサブフレームの先頭が送信された時刻を示す.
(GPSの場合は,次のサブフレームが送信される時刻.)
6. D2のSOWは,それが含まれるフレームの先頭が送信された時刻を示す.
(サブフレームではないので注意.5つのサブフレームのSOWは同じ.)
7. D1のephemerisは,サブフレーム1〜3に含まれる.
8. D2のephemerisは,サブフレーム1のページ1〜10に含まれる.
9. D2のサブフレーム1は最初の150ビットのみが有効.残りはリザーブ.
(リザーブは0と1の繰り返し.)

これだけ思い出すのに,結局BeiDouのICDを再度読み直す羽目に.
almanacをデコードする元気がなくなったので,とりあえずephemerisだけで良しとします.

さて,GPS+BeiDouの評価をしていて気付いたのですが,いくつかの
BeiDou衛星が正常に受信できていません.



2007年に打ち上げられたC30は電波を出していないようで,
そもそも受信ができません.

C13はhealthフラグが立っていました.メンテナンス中でしょうか.
C02は東京からだと仰角が低く,受信が難しいようです.

問題はC04です.受信強度が高く,healthフラグも問題ないのですが,
なぜかephemerisが正常と判断されません.

ephemerisのパラメータをひとつひとつ調べてみると,
Week Numberが3000週を超えるような大きな値を示していました.
今週は,正しくは436です.

これは明らかな異常で,healthフラグを立てるべきなのですが,
普通に運用されています.

結構重大な不具合かと思うのですが,GNSS界隈でもまったく
ニュースになっていません.なにか見落としている?

Androidで位置ゲーム

$
0
0
準天頂衛星アプリコンテストに向けて作成中の位置ゲームが
やっと形になってきた.

GPSで測位がきるよう,屋外で一通りの動作を確認.



UIのセンスが皆無であることには目をつぶるとして,
とりあえず実現したかった最小限の機能は実装できた.

ネタばらしをすると,その昔に作ってみたいと思いながらも
手を出さずに終わってしまったReverse Geocache Puzzleの
Androidアプリ.

Arduiniana: The Reverse Geocache Puzzle



実際に宝箱を開けるというハードウェアが持つ独特の魅力には
敵わないけれど,Android端末だけで同じ機能が実現できるのは
お手軽で良い.

【追記】AVDでGoogle Mapsは表示できるようになったものの,
Backボタンで地図を表示しているActivityから戻ろうとすると,
LogCatに次のようなエラーを出力してクラッシュしてしまう.



どうやらOpenGL ES 2.0の問題のようだが,解決法が判らない.
ARM EABI v7aのSystem Imageではサポートされていない?

stackoverflow: Does the Android Emulator support OpenGL ES 2.0?

【追記2】x86 System ImageのGoogle APIsを使ってみたけれど
同じようにクラッシュする.stackoverflowに同じ現象が報告されて
いるけれど,解決法はなし.実機では発生しないので無視しても
良いのだけれど,なにかと不便だ.

stackoverflow: Google Maps activity crashes with SIGSEGV on back button

GPSによるロケットの飛行安全

$
0
0
先日,GPS IIF-6衛星を打ち上げたDelta 4ロケットは,
飛行安全のための追尾に,これまでのレーダーではなく
ロケットに搭載されたGPS受信機を利用したそうです.

Spaceflight Now: Rockets leap into the 21st century with GPS upgrade

JAXAもH-IIAの高度化として,レーダー局を廃止して,
機体搭載型の飛行安全航法センサを開発するらしい.

文部科学省: 宇宙輸送系研究開発に係る平成 27 年度の取組の検討状況について

ロケット搭載用GPS受信機の時代が来る!

RTKLIBのBeiDou対応

$
0
0
RTKLIBの新しいパッチ(rtklib_2.4.2_p5)が公開され,
BeiDouを含めた測位に正式に対応しました.

RTKLIB: Support Information

そこで,早速,マルチシステムでの測位を試してみました.
赤点がGPSのみ,青点がGPS+GLONASS+BeiDou+QZSSでの
single point positioningの結果になります.

 (クリックで拡大)

ばらつきは減少しますが,オープンスカイなので,全体的な誤差としては
あまり変化がありません.静止衛星が多いBeiDouの影響で,
北東−南西方向に伸びた誤差分布になる傾向があります.

スカイプロットはこんな感じ.最大で25機,常に20機以上の衛星が可視です.
QZSSが見えている時間帯を選んだので,このときGalileoは見えていません.

 (クリックで拡大)

ひとつ残念なのが,今回のアップデートで,GPS以外の衛星システム単独での
測位ができなくなったことです.例えばGPS−BeiDouなど,GPSを含めた測位は
実行できるのですが,BeiDou単独での測位ができません.

これまではGPS以外のシステム単独でも測位が実施できたので,
これはもとに戻して欲しいな.

あと,しばらく航法メッセージの異常が続いていたBeiDouのC04が,
何事もなかったのように正常な運用に戻っていました.

 (クリックで拡大)

結局,なにもアナウンスがなかったけれど,いったい何があったんだろう?

【追記】記事を書いていて思ったのだが,マルチシステムでの測位が普通になった今,
single point positioningの和訳が単独測位というのは紛らわしい.GPSとGLONASSの
単独測位と書かれたら,システムとして単独ではないのに単独測位とはこれいかにと
思ってしまう.

【追記2】GPS以外の衛星測位システム単独での測位に対応したパッチ(rtklib_2.4.2_p6)が
公開されました.ありがとうございます!

赤がGPSのみ,青がBeiDouのみでのsingle point positioning結果になります.
BeiDou単独での測位誤差の分布は,衛星配置への依存性が顕著です.
オープンスカイで誤差が4m以上になるのは,ちょっといただけない.

 (クリックで拡大)

RTKLIBでマルチGNSS測位

$
0
0
RTKLIBが新しいパッチ(rtklib_2.4.2_p6)でBeiDouを含めた測位に
公式に対応したので,Taro君のテストデータをダウンロードして,
移動体でのマルチGNSS測位を試してみました.

Taro +memo: RTKLIBでMulti-GNSS-RTK

オプションは評価結果のPDFファイルで説明されている設定と一緒です.

 (クリックで拡大)

 (クリックで拡大)

GPSのみと,GPS+GLONASS+QZSS+BeiDouでの精密測位の結果は以下通り.

 (クリックで拡大)

 (クリックで拡大)

Google Earthの3次元マップで見てみると,どこで測位精度が劣化しているか
一目瞭然で面白い.

 (クリックで拡大)

それでも,高層ビルの多い都市部で,70%近いFIX率はすごい.

【追記】本家のチューニングは95%を超えている!

日記・備考録: 2014/05/28

【追記2】と思いきや,どうやら間違った位置にFIXしているようだ.
結局70%近辺に落ち着いている.

日記・備考録: 2014/05/29

マルチGNSSスマートフォン

$
0
0
BroadcomのFrank van Diggelenによるスマートフォン向けの
BeiDou/Galileo/GLONASS/GPS/QZSS/SBASチップに関する記事.

GPS World: Interchangeability Accomplished

BCM47531がすでに対応しており,実機での動作写真もある.
今年にはこのチップを搭載したスマートフォンやタブレットが出てくるらしい.
これは楽しみ.

【追記】市場の規模を考えたら,BeiDou対応は当然だよな.

Broadcom: New GNSS Location Chip with Support for Chinese BeiDou Satellite System

GPS宝探しの遊び方

$
0
0
GPS宝探しは,準天頂衛星を含めた衛星測位サービスを利用した位置ゲームです.
宝物を隠す役と探す役の2人で遊びます.
現在位置から宝物までの距離だけを頼りに,宝物が隠された場所を探します.

Google Play: GPS宝探し

準天頂衛星アプリコンテストへの参加作品のため,Nexus 7 (2012) でのプレイに
最適化しています.また,Google Mapsが表示できなくてもゲームはできますが,
より楽しむために,モバイルWi-Fiルーターなどによるネット接続をお勧めします.

ゲームで使う宝物として,おもちゃの金貨や宝箱などのアイテムを準備してください.



まずは,宝物を隠す役が,このアイテムをどこかに隠します.
メインメニューで,「宝物を隠す」ボタンをタップしてください.

 (クリックで拡大)

衛星測位が開始されたら,宝物を隠す場所へ移動します.
隠す場所を決めたら,その場所を秘密のメッセージに入力します.
例えば,ここでは「錨の下」です.





 (クリックで拡大)

その後,宝物を隠した場所の近くで「ここに隠す」ボタンをタップします.
測位精度が十分小さければ,その位置と秘密のメッセージが登録されます.
測位精度が不十分で登録できないときは,宝物の近くを移動してみるか,
宝物を隠す場所を変更してください.

次に,宝物を探す役に交代して,宝探しを始めます.
メインメニューで,「宝物を探す」ボタンをタップしてください.

衛星測位が開始されてから「ここを探す」ボタンをタップすると,
現在位置から宝物までの距離が表示されます.
東へ向かうか,西へ向かうか,この距離だけを頼りに,宝物を探します.



 (クリックで拡大)

ただし,「ここを探す」ボタンをタップできる回数は限られています.
ボタンの下に表示されている残り回数がゼロになると,
宝物を発見できないままゲーム終了です.

宝物が隠された場所に到着すると,隠した場所を示す秘密のメッセージが表示されます.
そのメッセージが示す場所に隠された宝物を発見したら,宝探しは成功です.

 (クリックで拡大)

端末が1台のときは,交代で宝物を隠し,宝物を見つけるまでの「探す」の回数が
少ない方が勝ちになります.端末が2台あるときは,お互いに宝物を隠してから
端末を交換し,相手より先に宝物を見つけるタイムトライアルも楽しめます.

この距離から位置を求める宝探しの方法は,衛星測位と同じ原理になります.
衛星測位の原理を勉強すれば,ゲームに勝てるようになるかもしれません.

MatRockSim+GPSシミュレータ

$
0
0
@ina111さんが素敵なロケットシミュレータを公開してくださったので,
GPS信号シミュレータ用のモーションファイルを作ってみました.

GitHub: ina111/MatRockSim

愛用しているSpirent社のGPS信号シミュレータでは,車や航空機,
人工衛星にはシナリオのテンプレートが準備されているのですが,
なぜかロケットはありません.

Spirent: GSS8000 GPS/GNSS Constellation Simulator

飛翔体のシミュレーションをするとなると,ユーザが自前で
モーションファイルと呼ばれる位置と姿勢の時系列データを準備して,
それをSimREMOTEというオプションでシミュレータに読み込ませる
必要があります.

Spirent: SimREMOTE User Manual (PDF, 6.6MB)

位置については,MatRockSimがECEF座標系で出力しているので,
そのままモーションファイルに利用できます.

姿勢については,MatRockSimがUp-East-Northのローカル座標に対する
quaternionsを出力するのに対して,GPS信号シミュレータでは,
North-East-Down座標でのheading,elevation,bankで記述します.

ある座標系で定義されたquaternionsを別の座標系から見たものに
どうやって変換するのか,いまひとつ理解できなかったので,
座標変換はあきらめて,ロケットの機体座標系を無理やり一致させました.
そのため,GPS信号シミュレータでは飛行機の背中からにょっきりと
ロケットが突き出したようなビジュアルになります.

ただし,オイラー角がsingularになってしまうケースがあるなど,
姿勢については,まだGPS信号シミュレータ側で工夫が必要です.

ロケットの機体や性能に関するパラメータはなかなか一般に公開されませんが,
宇宙研のM-3ロケットシリーズの機体データがwebに掲載されています.

ISAS: 衛星打ち上げロケットM3-S

この公開データをもとに,ina111さんがMatRockSim用のパラメータファイルを
準備してくださったので,早速,GPS信号シミュレータ用のシナリオを作成して
動作試験をしてみました.

受信機は,いつものようにNovAtel SuperStar II+自作ファームウェアです.



ina111さん向けに開発したファームウェアでは,ublox社のGPS受信機と互換性のある
出力フォーマットを実装しています.そのため,u-centerで観測データのモニタリングや
ログができます.

 (クリックで拡大)

MatRockSimから生成したロケットのシナリオはGPS信号シミュレータで問題なく実行され,
受信機の方もロケットのダイナミクスや速度・高度に関係なく測位できていました.

 (クリックで拡大)

 (クリックで拡大)

これでロケット用GPS受信機の開発が捗る!

GPSの予算

$
0
0
Galileo云々はともかくとして,GPSの予算の話は面白い.

ASCII.jp: GPS頼りのリスク─日本の測位衛星事情

興味があったので調べてみたところ,GPS.govのサイトが参考になる.

GPS.gov: Fiscal Year 2014 Program Funding

年間$1.2Bの予算に対して,日本の人口は1.2億人.確かに一人あたり1,000円だ.

しかし,米国の軍事予算が年間$650Bであることを考えると,その程度かという気にもなる.

一方,実用準天頂衛星は,衛星と地上システムの整備で,5年間で1,700億円の予算を計上している.
これは,一人あたり年間300円の計算になる.

内閣府: 「実用」準天頂衛星システムへ

30機以上が運用され,世界中で利用できるGPSが1,000円.
実用準天頂衛星は3機で300円.

そう考えると,あまり良い買い物に思えない.

ハルロック

$
0
0
これは!
20年ぶりくらいでモーニングを買うことになるのか?



はるちゃんがRAWデータを取るようになったら,単行本買うよ.

【追記】ところで,デート実現装置に組み込まれたGPS受信機は
どのモジュールだろうか?秋葉原で買いそうなイメージだけど,
秋月が扱っているモジュールでQZSS対応は見当たらない.

秋月電子通商:GPS(全地球測位システム)・GPSデータロガー

QZSS対応で広く出回っているチップとなるとMediaTekのMT3339だろう.
日本で入手するとなると,スイッチサイエンスで扱いのあるLS20031かな?

スイッチサイエンス:LS20031 66チャンネル5Hz GPSモジュール



完全に一致.

小型衛星用GPS受信機

$
0
0
これまでにも市販品を改造したり,FPGAで受信機を開発したりして
みたけれど,サイズも消費電力も,CubeSatのような超小型衛星に
搭載するには大きすぎて,なかなかフライトのチャンスがありません.

最新のチップセットで,小型で省電力な衛星搭載用GPS受信機を
入手したいという欲望に勝てず,ついにメーカーと交渉して特別な
ファームウェアの受信機モジュールをロットで発注するという
暴挙にでてみました.



早速インターフェイス基板を設計してGPS信号シミュレータで
試験したところ,衛星高度でも問題なく測位しています.

信号補足も地上と同じくらいに早く,コールドスタートからでも
測位まで1分程度です.



さすがメーカー製,測位性能がすばらしい.

さて,次は放射線試験だ.
Viewing all 643 articles
Browse latest View live