1

GPS 受信機の NMEA 出力を解析しているときに、次の行が表示されます。

$GPGSV,4,1,16,02,17,228,35,03,04,048,37,05,59,285,29,06,02,030,34*73
$GPGSV,4,2,16,07,58,061,46,08,80,159,40,09,11,227,32,10,51,167,47*77
$GPGSV,4,3,16,13,15,089,38,15,00,279,,16,00,018,,26,34,279,42*7A
$GPGSV,4,4,16,28,20,154,39*4C

私が理解しているように、ウェブ上のさまざまな情報源 (たとえば、ここ) から、これは間違っています。3 番目の数値によると、16 個の衛星があるはずです。これは、以前に遭遇したすべての GPS 受信機に当てはまりましたが、この文には 13 個の衛星のデータしか含まれていません。

これはエラーですか?それとも、仕様を間違って読んでいますか?

4

2 に答える 2

7

Nmea は弱く指定されたファイル形式です。GPS チップの製造元は、NMEA 仕様をどのように解釈するかについてのドキュメントを提供しています。
たとえば、ublox と Sirf にはそれぞれ、NMEA 形式の解釈方法を説明する約 40 ページの章があります。

したがって、「それとも、仕様を間違って読んでいるのでしょうか?」と書いた場合、問題は、どの仕様を読んでいるのかということです。GPSチップメーカーのそれ?NMEA 0183 仕様には、文を正しく解析するための十分な情報が含まれていません。

特にあなたの場合: NMEA プロトコルは、空の値と無効な値を処理する方法を説明していません。

あなたの場合、受信機は 16 個の衛星を見ることを期待していますが、13 個しか見つかりませんでした。しかし明らかに、メーカーはチェックサム文字列を停止して追加することにしました。(欠落している 3 つの sats に対して空のセミコロンを出力することが必須であるとは、単に指定されていません。

残念ながら、CHPS チップの製造元ごとに NMEA パーサーを作成する必要があります。
そのため、常にチップ メーカーのプロトコルのバイナリ形式を使用することをお勧めします。(たとえば、uBlox バイナリまたは Sirf バイナリは正確に指定されているため)。

GpsBable のドキュメントをさらに見ることができます。さまざまなメーカーがさまざまな GSV データ セットをどのように生成するかを示しています。

更新:
あなたが今言ったように、それはubloxレシーバーです:

答えは、はい、NMEA 文は有効です。ublox プロトコル仕様を見てください。私はublox 5の仕様を使用しています:GSV文が記述されているページで、「メッセージ構造」を見てください:

{,sv,elv,az,cno}*cs

中括弧は繰り返されるシーケンスを囲みます。以下の「1..4」を見てください。これは、1、2、3、または 4 ブロックを意味します。「4」、「1..4」と書かれていないため、サテライト情報はオプションであり、空であってはなりません。

ublox が提供する例をさらに見ると、質問で示しているように、最後の GPGSV メッセージに含まれる衛星が 4 つ未満であることがわかります。

于 2013-03-14T18:02:32.830 に答える
0

はい、一貫性がありません。最後のメッセージには、合計 16 個の衛星が宣伝されるように、複数 (実際には 4 個) の衛星が記述されているはずです。GPS 受信機は、空の視線方向と SNR がその時点で不明であったとしても、少なくとも衛星 ID (PRN) を報告しているはずです (例: {,01,,,})。

そうは言っても、不正なメッセージに対して耐性のあるプログラムを作成する方がよいでしょう。この場合、表示されている衛星の数を 13 に更新します。

(チェックサムを確認しましたが、問題ありません。)

于 2015-05-16T21:49:48.093 に答える