OSQZSS

オープンソース準天頂衛星(QZSS)受信機

RTKNAVIの使い方

2014-04-13 20:50:48 | RTKLIB
GPS受信機2台でローカルなRTKを試してみたいと,LEA-4T評価基板
2個購入される方がちらほら.折角なので,ラジコンカーでの実験を例に,
RTKNAVIの基本的な使い方を紹介したいと思います.

走行中の実験では,まったくFIXしてくれなかったので,今回はラジコンカーの
LEA-4Tに直接USBで接続して,静止状態でRTKを試みます.

 (クリックで拡大)

USBで接続されたLEA-4Tは,シリアルポートとして認識されます.
ここでは,基地局がCOM28,ラジコンカーがCOM3に接続されています.

 (クリックで拡大)

RTKNAVIを起動したら,まず画面右上のIボタン(Input Streams)をクリックして,
入力データのインターフェイスを指定します.

 (クリックで拡大)

今回の例では,RoverもBase Stationもシリアル接続ですので,
TypeにSerialを選びます.また,受信機はどちらもLEA-4Tですので,
Formatはu-bloxになります.

 (クリックで拡大)

さらに,Typeの隣のOptのボタンをクリックして,シリアルポートの
オプションを設定します.





u-bloxの受信機をRTKNAVIに接続する場合,受信機出力としてUBXフォーマットの
RXM-RAWとRXM-SFRBが必要になります.RXM-RAWには搬送波位相などの観測データが,
RXM-SFRBには放送歴などの航法メッセージが含まれています.

次に,測位結果を保存するために,Oボタン(Output Streams)をクリックして,
出力データのインターフェイスを指定します.

 (クリックで拡大)

ここでは,PC上のファイルに保存するためにTypeにFileを選びました.
さらに,出力先をOutput File Pathsで指定します.

 (クリックで拡大)

Input Streamsとして入力されるデータも,後解析のためにログとして保存することができます.
L(Log Streams)のボタンをクリックして,ログデータのインターフェイスを指定します.

 (クリックで拡大)

出力データと同様にTypeにFileを選び,Log File Pathsでログファイルを指定します.

 (クリックで拡大)

これで入出力インターフェイスの指定が完了しました.
次に,Optionsボタンをクリックして,RTKのオプションを設定して行きます.

 (クリックで拡大)

まず,Setting1のタブで,Positioning ModeにKinematicを選びます.
Frequenciesは1周波受信機ですので,L1に設定します.

 (クリックで拡大)

Setting2のタブでは,Integer Ambiguity ResとしてInstantaneousを選びました.

 (クリックで拡大)

事前に測位しておいた基地局のアンテナ位置は,PositionsタブのBase Stationで指定します.

 (クリックで拡大)

さて,これで一通りの準備が整いました.Startボタンをクリックして,測位を開始します.

 (クリックで拡大)

しばらくすると,測位結果や受信信号の強度などがRTKNAVIの画面に表示されます.

 (クリックで拡大)

画面右上,Lボタンの下にある三角形のアイコンをクリックすると,表示画面を
切り替えることができます.

 (クリックで拡大)

測位結果をグラフで表示するためには,PlotボタンをクリックしてRTKPLOTを起動します.

 (クリックで拡大)

以上がRTKNAVIの基本的な操作になります.

RTKは結局FIXせず,残念な結果でした.ログファイルに記録した観測データがありますので,
これをRTKPOSTで後処理することで,いろいろな設定を試してみたいと思います.

【追記】高須さんの実験結果を見る限り,ublox社のパッチアンテナとLEA-4Tの組み合わせで,
基線長7kmでも結構FIXしている.

GPS L1アンテナ・受信機評価

何がダメなのだろう?
コメント (1) |  トラックバック (0) | 

ラジコンカーのRTK測位

2014-04-12 19:55:57 | RTKLIB
良く晴れた実験日和.

RTKの実験にBeagleboneをラジコンカーに積もうとしたけれど,
意外と大きくてかさばる.

RTKLIBがubloxのフォーマットに対応しているのだから,
そのまま送れば良いかと妥協して,xbeeのピッチ変換基板を
その辺のジャンク基板から作成.



そして,合体.



これをラジコンカーに搭載して,roverの完成.

 (クリックで拡大)

本来であれば,移動体側でRTK測位をすべきだろうけれど,
今回はroverのrawデータを基地局に送信して,そちらで測位.

 (クリックで拡大)

基準局の受信機もublox.
アンテナは簡易的にカメラの三脚で設置している.

 (クリックで拡大)

基準局アンテナの位置を精密に求めたいのだが,
一番近い電子基準点でも30kmほど離れている.

さすがに1周波の受信機で,この基線長のRTKは厳しいので,
とりあえずしばらく測位した後,測位結果の平均値を基準局の位置とした.

後はラジコンカーを走らせながら,RTKNAVIで測位するだけなのだが,
まったくFIXしない…





まず怪しいのはアンテナかな.基地局だけでも良いアンテナにすべきか?
あと,ラジコンカーが走行中に飛び跳ね,結構姿勢が安定しない.
それも受信信号に影響しそうだ.

また,20mも離れるとxbeeの通信が切れてしまう.通信は悩みどころ.
roverからrawデータ以外にも,モニタ目的で放送歴や測位結果などを送信している.
rawデータだけに限定してbaudrateを下げれば,もう少し状況が改善される?

それでも,移動体に1Hzの測位だと隙間だらけなので,できれば4Hzくらいに
データの頻度を上げたい.

久々にラジコンカーを走らせたけれど,軌跡をモニタしながらコントロールするのは楽しい.
いろいろと課題の残る実験でしたが,ラジコンも測位も満喫しました.
コメント (0) |  トラックバック (0) | 

測位演算の効率化

2014-04-11 17:30:46 | ロケット
リソースの潤沢なPCであれば問題ありませんが,組み込みシステムの
マイコンで疑似距離と放送歴から単独測位を実施しようとすると,
処理能力が不足しがちです.

特に,放送歴から衛星位置を求める演算は,三角関数を多用します.
さらに,測位演算のiterationのたびに,すべての衛星位置を再計算するのは,
非常に効率の悪い実装になります.

そこで,この衛星位置の計算を効率化する手段として,衛星の位置,速度,
加速度をある一定周期で計算し,その間は等加速度運動と仮定して
2次関数から衛星位置を求める方法が考えられます.

ICD-GPS-200には,放送歴から衛星位置を求めるアルゴリズムしか
説明されていませんが,下記の論文などで,速度,加速度の
導出方法が示されています.

GPS Satellite Velocity and Acceleration Determination using the Broadcast Ephemeris

ちゃんとした評価をしたことがありませんが,実装してみての実感として,
10秒間隔でも単独測位には十分な精度で衛星位置を近似することができます.

可視のGPS衛星は多くても10機程度なので,1秒に1衛星,放送歴から位置,
速度,加速度を計算するだけて良いことになります.

これでずいぶんと演算負荷を軽減できるのではないでしょうか.
お試しください.

【追記】高須さんにiterationごとの衛星位置の計算は不要とご指摘いただいた.
確かに,疑似距離と衛星クロックパラメータが与えられれば,受信時刻から
逆算して信号の送信時刻を求めることができる.その時刻での衛星位置さえ
計算しておけば,再計算は不要だ.RTKLIBでは,この方法が実装されている.

坂井さんの「GPSのための実用プログラミング」を始め,多くのテキストでは
疑似距離の残差を求める際に,観測時刻における衛星と受信機の位置から
幾何学距離を求め,その伝搬遅延を差し引いて信号の送信時刻を求めている.

そのため,iterationのたびに衛星位置を再計算しているのだが,
これが不要とは思いつかなかった.

そんなわけで,2次関数での外挿は無用の長物に…

【追記2】それでもこのままでは悔しいので,2次関数で外挿された衛星位置の
誤差を評価してみた.放送歴から計算した衛星位置に対して,外挿した場合の
衛星位置の差をプロットしてみると,10秒程度であれば数cmの誤差に収まっている.
放送歴のUREが1m程度なので,十分に小さな近似誤差だと言える.



効率化への貢献度が下がってしまった外挿法だけれども,測位解の出力頻度を
上げたいときなど,さらなる演算負荷低減の役に立つかな.

コメント (1) |  トラックバック (0) | 

Beagleboneの無線化

2014-04-10 22:49:39 | RTKLIB
amazonで面白そうなUSBハブを発見.Beagleboneに丁度良さそう.

amazon: ELECOM USBハブ USB2.0対応 バスパワー 3ポート U2H-PP3BBK



3ポートあるので,Wi-FiのドングルとLEA-4T,XBeeを接続.



USBシリアルのポートにはモバイルバッテリから給電.
これで独立して動作するプラットフォームができた.



これが2台あれば,一方はbase stationとしてstr2strを,
もう一方はroverとしてrtkrcvを実行すれば,RTKができる!

そう,2台あれば…



【追記】str2strの使い方がhelpを見てもいまひとつ理解できなかったので
ソースコードを確認.例えば,USBで接続したubloxからのrawデータを
RTCM 3に変換してtcpsvrに出力したいときは,こんなオプションになります.

str2str -in serial://ttyACM0:57600#ubx -out tcpsvr://localhost:52001#rtcm3

 (クリックで拡大)
コメント (0) |  トラックバック (0) | 

LEA-4T評価基板の頒布案内

2014-04-08 07:56:48 | RTKLIB
搬送波位相の出力に対応したublox社製GPS受信機モジュールLEA-4Tの
評価基板の頒布を始めました.価格は送料込で4,000円になります.

 (クリックで拡大)

 (クリックで拡大)

BeagleboneでRTKLIBを動かした際に使用したものを,ホットプレートによる
リフローで量産したものです.あくまでも個人が趣味で設計したものであり,
性能を保証するものではありません.

USBケーブルやGPSアンテナは付属しませんのでご注意ください.
GPSアンテナは,SMAコネクタのものが接続できます.

スイッチサイエンス:GPSアンテナ 28dB 5m SMAコネクタ型

発送前にはGPS信号の受信および測位の動作を確認いたしますが,
この評価基板によって生じたいかなる故障や損害について,
いかなる責任も負いません.

以上の注意をご理解いただいた上で頒布を希望される方は
osqzss at gmail.comまでご連絡ください.

【動作確認】

1. 評価基板が届きましたら,まずu-centerをインストールしてください.

ublox: u-center GNSS evaluation software for Windows

2. 評価基板のジャンパがBUS側に接続されていることをご確認ください.



3. アンテナを接続してください.

4. USBケーブルでPCと接続すると,ドライバーがインストールされ,
シリアルポートとしてLEA-4Tと通信できるようになります.



5. u-centerを起動し,適切なCOMポートを選択してください.
Baudrateは57600ですが,u-centerは自動的に選択して接続します.



6. 出荷状態で,LEA-4TからはNAV-SOL,NAV-SVINFO,RXM-RAW,RXM-SFRBが
出力されています.これらのデータが受信されていることを確認してください.

 (クリックで拡大)

より詳細なu-centerの使い方については,下記の説明書などが参考になります.

GPS 評価用ソフトウェア 『u-center』 簡易マニュアル
u-center GPS 評価ソフトウェア ユーザーガイド
コメント (0) |  トラックバック (0) | 

MGEXでGalileo Fixes

2014-04-06 08:28:51 | RTKLIB
ESAのCertification of Galileo fixesに応募しようと,
東京からGalileoが4機可視となる早朝から調布のMGEX局にアクセス.

しかし,Galileo衛星はしっかりと4機観測されるものの,
RTCMでephemerisが流れていないのか,測位に使うことができません.

 (クリックで拡大)

MGEXのstation tableを見ると,CHOF7では,Galileoのephemerisである
message type 1045と1046に対応しているようです.

RTCMがダメならrawデータにアクセスしようと,mountpointにCHOF0を選んだのですが,
こちらには接続できず.他のサイトも,rawデータのmountpointに接続できません.
何か別の手順が必要なのかな?

【追記】RTCM 3のmessage typeを忘れるのでメモ.

1001 GPS L1 code and phase
1002 GPS L1 code and phase and ambiguities and carrier to noise ratio
1003 GPS L1 and L1 code and phase
1004 GPS L1 and L2 code and phase and ambiguities and carrier to noise ratio
1005 Station coordinates XZY for antenna reference point
1006 Station coordinates XYZ for antenna reference point and antenna height
1007 Antenna descriptor and ID
1008 Antenna serial number
1009 GLONASS L1 code and phase
1010 GLONASS L1 code and phase and ambiguities and carrier to noise ratio
1011 GLONASS L1 and L1 code and phase
1012 GLONASS L1 and L2 code and phase and ambiguities and carrier to noise ratio
1013 Modified julian date, leep second, configured message types and intervall
1014-1017 Network RTK (MAK) messages
1019 GPS Ephemeris
1020 GLONASS Ephemeris
1045-1046 Galileo Ephemeris
1071-1077 GPS-MSM data
1081-1087 GLONASS-MSM data
1091-1097 Galileo-MSM data
1101-1107 SBAS-MSM data
1111-1117 QZSS-MSM data
1121-1127 BeiDou-MSM data


【追記2】コメントで高須さんからGalileoのephemerisの受信方法を
教えていただいたので,早速試してみました.

まず,RTKNAVIのInput Streamsの(2) Base Stationに,NTRIP Clientを追加します.
FormatはRTCM 3になります.

 (クリックで拡大)

(1) Roverは,これまで通りに,調布のMGEX局に接続します.



(2) Base Stationには,MountpointとしてRTCM3EPH-MGEXを入力します.



IGS Real-time Pilot Projectなどで配信されているephemerisの情報は,
GDCのサイトで紹介されています.

GDC: Broadcast Ephemeris from EUREF & IGS Real-time GNSS Resources

続いて,RTKNAVIのOptionsからMiscタブを選び,Navigation Message Selectionに
Allか(2) Base Stationを選びます.

 (クリックで拡大)

RTKNAVIをStartしてしばらく経つと,E12のephemerisが受信され,skyplot上に表示されました.
この時間帯に東京からGalileoは1機しか観測できませんが,GPSとの複合測位ができています.

 (クリックで拡大)

(2) Base Stationで受信しているRTCM 3のstreamを見てみると,Galileoのephemerisである
Message Type 1046が確かに受信されています.

 (クリックで拡大)

これでGalileoのみでの単独測位の準備が整いました.
次に4機可視になるのはいつだろう?
コメント (2) |  トラックバック (0) | 

リフローでublox基板の半田付け

2014-04-04 22:14:47 | RTKLIB
OSH Stencilsから購入した格安ステンシルを早速試してみる.



半田ペーストのエッジがだるいのは,ステンシルではなく,自分の腕のせい.

 (クリックで拡大)

リフローは信頼の山善ホットプレート
ちなみに,写真を撮ってから受信機の向きが間違っていることに気づく.

 (クリックで拡大)

特に温度プロファイルを取るわけでもなく,スイッチサイエンスの
記事を参考に180度で3分間のプレヒート.その後,230度に上げて
半田が溶けたら30秒間そのまま.最後にフタを開けて冷却という手順.

使ってみた印象としては,ステンシルが薄いかも.
パッドに塗布される半田ペーストの量が少なく感じます.

また,受信機モジュールの一部が浮いてしまい,
半田付けされていない端子もありました.



aitendoから購入したソルダペーストは,粒子が粗いのか,
ごわごわしたような仕上がりです.

 (クリックで拡大)

何も気にせずリフローで加熱してしまったリチウムバッテリは,
破裂して青い液体を吐き出しています.危ない,危ない.



リチウムバッテリを新品に取替え,コネクタ類も手付けして完成.
いくつかトラブルがありましたが,問題なく動作しています.



部品点数が少ないので,手付けより劇的に効率が良くなったとは感じませんが,
数を作るのであれば,やっぱり楽かな.

【追記】量産開始.

コメント (2) |  トラックバック (0) | 

GPSでDoppler測位

2014-04-03 05:11:21 | ソフトウェア受信機
@fenrir_nさんがTLで「スクリーンショットから自宅の位置を特定できるもんならやってみろ(意訳)」と
煽っていらっしゃったので,測位の方針を検討してみた.

そんなものsnapshot測位で一発だろと思ったのだが,さすがにGPS測位を理解されているので,
100km以上の疑似距離情報が黒塗りされている.これでは,単純にcode ambiguityを解くことはできない.
SVも黒塗りしているあたり,さすがだ.

しかし,時刻情報とDopplerは提供されている.衛星配置も他のスクリーンショットに写っている.
少なくとも日本在住だろうから,これらを頼りにSVの特定とDopplerによる測位は可能だろう.

ちなにみ,静止点であれば,Doppler測位で10km程度まで位置を絞り込むことができる.
そこからは,黒塗りされた部分的な疑似距離であっても,snapshot測位が可能だ.

【追記】特定しました

【追記2】Doppler測位に興味のある方は,これなんかを読むと良いです.

Nicholas Bernard Otieno Othieno: Combined Doppler Time-free Positioning for Low Dynamics GNSS Receivers
コメント (0) |  トラックバック (0) | 

BeagleboneでSDR?

2014-04-02 08:05:45 | ソフトウェア受信機
taro君のGNSS-SDRLIBがどんどん進化している.

Taro +memo: 2013年度のまとめ(2) GNSS-SDRLIB

次のリリースでLEX信号もサポートされるらしい.
このあたりの小型PCで,LEX受信機が簡単に作れそう.

PC Watch: ECS、世界最小のBay Trail-M搭載デスクトップを国内投入
Gigazine: 2万円以下で購入できる世界最小スーパーコンピューターをNVIDIAが発表

それ以上に興味のあるのがgccでのコンパイルのサポート.
Linux環境でも動かせるのは嬉しい.

デフォルトだと相関器が多すぎてキツイけれど,
普通にEarly-Lateだけであれば,Beagleboneでも
なんとかならないかな?

【追記】Micheleのblogを読む限り,Beagleboneで動きそうな感じ.
しかし,これ2009年の記事か.何周回遅れているんだ…

Michele's GNSS blog: Still alive and working hard
コメント (0) |  トラックバック (0) | 

Rawデータの精度とダイナミクス

2014-03-31 18:22:53 | ロケット
測位演算の素となるGPSのrawデータですが,その性能は精度とダイナミクスの
トレードオフで決まります.

まず精度ですが,rawデータに含まれる雑音を減らすためには,平滑化の時間を
長くすればするほど有効です.

一方,受信機と衛星の距離は刻々と変化しており,これを追尾しなければなりません.
受信機側の動きが激しければ,それだけ短時間に距離の変化を推測する必要があります.

つまり,精度を高めるために平滑化の時間を長くすると,静止点や滑らかに
移動する受信機でしか信号が追尾できず,逆に高ダイナミクスの受信機で
信号を追尾しようとすると,平滑化の時間が短く,精度が劣化します.

したがって,受信機の設計では,想定される受信機のダイナミクスの
最大値に合わせて,平滑化の時間を決定することになります.

GPS受信機の主なユーザである歩行者や車は,通常は一定速度で移動すると
仮定できるため,信号追尾には2次の線形フィルタが広く使われます.
疑似距離を生成するために拡散コードの位相を追尾するフィルタを
DLL(Delay Locked Loop),精密測位に使われる搬送波位相を追尾する
フィルタをPLL(Phase Locked Loop)と呼びます.

線形フィルタでは,その次数のダイナミクスに対して定常偏差が残ってしまいます.
rawデータである距離は0次となるため,1次は速度,2次は加速度に相当します.

この定常偏差の大きさは,加速度とフィルタの帯域によって決まります.
帯域とは,ざっくりと平滑化時間の逆数だと考えてください.
つまり,帯域が狭いと平滑化の時間が長いことになります.

2次の線形フィルタでは,定常偏差は加速度に比例し,帯域の3乗に反比例します.
したがって,DLLまたはPLLに許容される定常偏差の大きさが与えられれば,
アプリケーションに応じた加速度の最大値に対して,帯域が求められます.

さて,通常の受信機が経験するであろう加速度は,せいぜい2G程度です.
この加速度に対応した帯域を求めると,DLLで1Hz以下,PLLで10Hz程度と
なります.

つまり,疑似距離は1秒以上平滑化され,搬送波位相は0.1秒ほど平滑化
されることになります.

このため,疑似距離においては1Hz以上,搬送波位相においては10Hz以上の
距離の変化は,平滑化されてダイナミクスとして意味をなさないことになります.

世の中には,測位結果やrawデータを50Hzや100Hzで出力する受信機が存在しますが,
サンプリングレートと帯域は別物です.これらの受信機で広帯域な観測が可能という
訳ではありません.出力頻度の高い受信機を利用して地震波や建築物の振動などを
観測しようとする研究もみられますが,GPS受信機のrawデータは,信号追尾の原理上,
帯域がそれほど広くないことに注意が必要です.
コメント (0) |  トラックバック (0) |