はじめに
NMEAプロトコルを使用してGNSSデータを使用してアプリケーションをテストする必要がありました。 それは、彼が飛行機を操縦するためのドラフトプログラムに取り組んでいたという事実に関連しており、空中でテストするのは当然のことですが、地上のGNSS受信機で車を運転するのはあまり便利ではないので、仮想パラレルポートで移動していると思われる機器からのNMEAプロトコルデータが必要でした。 最初は別のソフトウェアを探していましたが、適切なものを見つけると思いましたが、それらのほとんどは有料であり、データエミュレーション制御はあまり便利ではありませんが、NMEA標準のほとんどすべてのパラメーターをエミュレートします。 しかし、原則として、座標、速度をエミュレートするシンプルなものが必要であり、かなり便利で論理的な制御が必要でした。 そのため、C#でこの種のアプリケーションを作成する必要がありました。
ちょこ
NMEA(「National Marine Electronics Association」)-正式名称は「NMEA 0183」-船舶(通常は航法)機器同士の通信用のテキストプロトコルです。
データはオファーの形式で送信されます。 提案の形式は次のとおりです。
$ AAAAA [、<data>] * hh 、ここで:
$-文の始まりの記号(コード24h);
AAAAA-プロポーザルの5文字のアドレス(名前)。
[、<data>]-コンマで区切られたデータフィールドのリスト(2hコード);
*-チェックサムのサイン(コード2Ah);
hhはチェックサムです。
例文:
GGA-GPS位置データ
観測に関連する時間位置とデータ。
$ GPGGA、hhmmss.sss、llll.ll、a、yyyy.yy、a、x、xx、xx、xx、xx、M、xx、M、xx、xxx * hh
4行をエミュレートする必要がありました。
- GLL-ロケーション
- GSV-可視衛星
- RMC-推奨される最小のGPSおよびGLONASSデータセット
- GSA-航法衛星に使用される精度劣化要因
エミュレーションは次の順序で編成されます。
- WGS-84システムで初期座標を設定します
- 次に、メルカトルなどの平面投影に移動します(C# GeoUtility.dllの既製ライブラリを使用して座標を変換します)
- フラット座標x、y、hがわかっているので、ロール、ピッチ、速度などのグラフィカルインターフェイスを介してパラメーターを変更することにより、航空機の動きの物理学を実装します。
- フラット座標をWGS-84システムの座標B、L、Hに変換します
- 必要な4行からNMEA標準のメッセージのパケットを形成します
- それらを仮想パラレルポートに送信します
Fly_nmea + Androidセンサー
より便利なテストのために、Androidセンサーからのデータの受信も調整しました(傾斜角)。 Android over UDPは、次のタイプの2行を送信します。
- 「角度:\ t236.04152 \ t-1.0 \ t-3.0」
- 「Acc:\ t-0.46309182 \ t-0.14982383 \ t-10.56939」
エミュレーションアプリケーションでは、それらを受け入れ、傾斜角に基づいてパラメーターを変更します。
- ロール
- ピッチ
エミュレーションアプリケーションでは、プログラムインターフェイスを介して制御からAndroidセンサーに切り替えることができます。
Fly_nmeaを接続する
COMポートをエミュレートするには、Virtual Serial Ports Emulatorも役立ちます。たとえば、2つの仮想COMポートの接続を設定する必要があります。たとえば、COM1 <-> COM6、Fly_nmeaはデータをCOM6に送信し、COM1にNMEAプロトコルを使用するプログラムがそれを取得します。
おわりに
一般に、私はそのようなソフトウェアを探すのにより多くの時間を費やしました、そして私が完全に満足するだろうと気づかなかったので、私はより速くそれを書きました。 私が取り組んでいたプロジェクトに加えて、エミュレータをNMEAプロトコルを理解するプログラム(2GisやSAS planetなど)に接続することも非常に成功しました。
FlyNMEAとAndroidセンサー(UDP経由でセンサーからデータを送信するプロジェクト)
ポートエミュレーションのVSPEはこちら
upd:エミュレートされたデータ周波数5 Hz