|
VHF Data Link - Mode 2(VDL2あるいはVDL-M2 )は次世代のACARSと位置づけられるもので、従来のACARSに比べ10倍の伝送速度で、航空機と地上の間のデータ伝送する方式です。
ACARSを用いて、高層気象データを収集していると、ボーイング787など新形式の航空機からの情報が無いことに気がつきました。在来、詳細な気象情報を提供してくれていたボーイング777などが退役していくと、いずれどういうことになるか、心配していました。
所属する、電子情報通信学会の通信ソサイエティマガジン2017年秋号に、「航空機用無線通信システム」の記事があり、そのなかでVDL2の紹介がありました。最新の技術を使っており、とくに輻輳するヨーロッパでは、ACARSからVDL2に移行が進行しているようです。早速当研究所でもソフトウェアラジオによりVDL2の受信機を作成することにしました。
ACARSは、航空機のさまざまな運用情報を伝送していますが、VDL2の目的はまったくおなじで次のように変調方式・プロトコルが異なります。
|
VDL2 VHF Data Link - Mode 2 |
ACARS
Aircraft Communications Addressing and Reporting System |
用途 |
便名、出発・到着時刻、現在位置、高度、搭載燃料、航空機の状態などのほか最新の気象情報 を通報 |
左に同じ |
使用周波数 |
VHFエアバンド 136.975 MHzの周波数が、共通チャンネル |
VHFエアバンド 131.250 MHz、131.450 MHzなど |
チャンネル間隔 |
25 kHz |
25 kHz |
変調方式 |
8相PSK 31.5 kbit/s |
音声帯域MSKモデム 2.4 kbit/s |
プロトコル |
ICAO(nternational Civil Aviation Organization )による標準化 |
かなり自由な形式 |
VDL2はACARSとおなじ、VHFエアバンドをもちいていますが、つぎのような新しい技術で構成されています。
1. 8相PSK変調方式により、従来方式の10倍以上の伝送速度
2. 136.975 MHzの周波数が、共通チャンネルで、ここが混雑しているときは、自動的に他のチャンネルに移行する
3. WiFi等で使われている CSMA(Carrier Sense Multiple Access)方式により、送信する前にチャンネルが空いているかを調べ、データの衝突を防止する
4. 伝送フレームフォーマットは、エラー訂正可能なHDLCとX25方式パケットを用いている。
現役時代に標準化にかかわった、HDLCとX25がここでも使われていることに、感動です。
ソウトウェアラジオでVDL2の受信のため、このプロトコルをソフトで実現しなければなりません。自作するのは、なかなか手強いですが、ありがたいことに先駆者がdumpvdl2を開発、公開しておられます。簡単にインストールできますが国内ではまだ紹介例が少ないので、ここに概要を述べることとします。ACARSの場合と同様、RTL2832U+R820TドングルとRaspberryPiを用います。ここではPi3モデルB、OSはjessieを前提にします。
ADS-BあるいはACARSの場合と同様に、RaspberryPiでソフトウエアラジオを動かすために必要なソフトを準備します。
1. 必要なパッケージをインストール
$ sudo apt-get update
$ sudo apt-get install git
$ sudo apt-get install cmake
$ sudo apt-get install libusb-1.0-0.dev
$ sudo apt-get install build-essential
$ sudo apt-get install pkg-config
2. rtl-sdrのソースの取得
つぎに最も重要なソウトウェアラジオ用パッケージであるrtl-sdrを本家からインストールします。
$ git clone git://git.osmocom.org/rtl-sdr.git
3. rtl-sdrをビルド
$ cd rtl-sdr
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ sudo ldconfig
$ cd ..
$ sudo cp rtl-sdr.rules /etc/udev/rules.d/
4. /etc/modprobe.d/ディレクトリにrtlsdr.confというファイルを下記の内容で作成
$ sudo nano /etc/modprobe.d/rtlsdr.conf
blacklist dvb_usb_rtl28xxu
blacklist rtl2830
blacklist rtl2832
blacklist dvb_usb_v2
blacklist dvb_core
|
一度念のためリブートしておきます。
5. ドングルをRaspberryPiのUSBにさし、つぎの確認を行います。
$ lsusb
Bus 001 Device 004: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
|
$ rtl_test
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM Found Rafael Micro R820T tuner
・・・・
|
6. つぎにVDL2のソフトウェアのインストールです。 Tomasz Lemiech 氏が開発した、dumpvdl2がこちらにあります。
ダウンロードは
$ git clone https://github.com/szpajder/dumpvdl2.git
7. 次にコンパイル
$ cd dumpvdl2
$ make
dumpvdl2ディレクトリのなかに、プログラムができています。これでインストール完了です。
8. ためしにホームディレクトリから
$ dumpvdl2/dumpvdl2 --help
でコマンドの使い方が表示されます。
dumpVDL2 v1.1.0
Usage:
RTL-SDR receiver:
dumpvdl2 [output_options] --rtlsdr <device_id> [rtlsdr_options]
[<freq_1> [freq_2 [...]]]
I/Q input from file:
dumpvdl2 [output_options] --iq-file <input_file> [file_options]
[<freq_1> [freq_2 [...]]]
common options:
<freq_1> [freq_2 [...]] VDL2 channel frequences, in
Hz (max 8 simultaneous channels supported).
If omitted, will use VDL2 Common Signalling Channel
(136975000 Hz)
output_options:
--output-file <output_file> Output decoded frames to <output_file>
(default: stdout)
--hourly Rotate output file hourly
--daily Rotate output file daily
--utc Use UTC timestamps in output and file names
--raw-frames Output AVLC payload as raw bytes
--msg-filter <filter_spec> Message types to display (default:
all) ("--msg-filter help" for details)
--output-acars-pp <host:port> Send ACARS messages to Planeplotter
over UDP/IP
rtlsdr_options:
--rtlsdr <device_id> Use RTL device with specified
ID or serial number (default: ID=0)
--gain <gain> Set gain (decibels)
--correction <correction> Set freq correction (ppm)
--centerfreq <center_frequency> Set center frequency in Hz
(default: auto)
file_options:
--iq-file <input_file> Read I/Q samples from file
--centerfreq <center_frequency> Center frequency of the input
data, in Hz (default: 0)
--oversample <oversample_rate> Oversampling rate for recorded
data (default: 10)
(sampling rate will be set to 105000 * oversample_rate)
--sample-format <sample_format> Input sample format. Supported
formats:
U8 8-bit unsigned (eg. recorded with rtl_sdr)
(default)
S16_LE 16-bit signed, little-endian (eg. recorded
with miri_sdr)
|
全体の構成はACARSの場合と同様で、
アンテナ→RTL2832U+R820Tドングル→RaspberryPi→ホストPC
です。
rtlsdrドングルとしてあらたにソフトウェアラジオ用として開発された、RTL-SDR.COM V3を購入しました。 たいへん優秀で、ソフトによる補正は不要、筐体にふれてもほのかな温度です。
|
RTL-SDR.COM V3
1 PPM の温度補正発信器(TCXO)
SMA コネクタにより50Ωのアンテナが接続可能
アルミニウム筐体による空冷 |
|
アンテナはACARSのためのAL-120F-MRと共用するため、第一電波工業のSS500で、2つのrtlsdrドングルに分岐します。
RaspberryPi3は4つのUSBが制御できますので、下の図のように構成します。
RaspberryPiとホストPCとはWiFi接続です。
|
軒下に設置した分配器とrtlsdrドングル。新しくRTL-SDR.COMを購入
SS500分配器とドングルはMP-SMAP変換コネクターで接続
左のグレーの同軸は、アンテナケーブル
シャシーのなかに、いままでのACARS用のrtlsdrドングルが入っている |
|
|
|
|
RaspberryPiにrtlsdrドングルをさし、アンテナをつなぎ、つぎのように起動します。
$ dumpvdl2/dumpvdl2 --rtlsdr 1 136975000 --gain 49.6 --output-file vdl2log/vdl2.log
--msg-filter downlink,avlc_i,acars --output-acars-pp 192.168.xx.4:9742
起動メッセージはつぎのようです。
dumpVDL2 v1.1.0
Sampling rate set to 1050000 sps
Found 2 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
1: Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Exact sample rate is: 1050000.026077 Hz
[R82XX] PLL not locked!
Center frequency set to 136975000 Hz
Device #1: gain set to 49.60 dB
Device 1 started
|
パラメータを説明します。
--rtlsdr 1 136975000 rtlsdrドングルの番号を指定 acarsdecとかち合わないように注意 共通チャンネル136.975MHzを指定(デフォルト)
--gain 49.6 ゲインを49.6dB
--output-file vdl2log/vdl2.log RaspberryPiのホームディレクトリ下のvdl2logディレクトリのなかに、vdl2.logファイルを作ります。これを周期的に、ホスト側から読みに行き、気象データを抽出します。
--msg-filter downlink,avlc_i,acars 様々なデータのなかから必要なもの(acarsのダウンリンクのみ)だけを出力するよう、フィルタを指定。これをしていしないと、不要のデータがたくさん出る。
--output-acars-pp 192.168.xx.4:9742 ホストのPCで、PlanePlotterというソフトが動いていれば、それにデータを送り込み地図上に航空機の位置を表示することが出来ます。
このほかの指定方法は、こちら。またフィルタについてはこちらに詳しい。
同一のRaspberryPiで旧来のACARSを受信するためacarsdecも動かします。そのためにscreenをインストールしておきます。
$ sudo apt-get install screen
そして、screenごとに、acarsdec、dumpvdl2を起動することとします。
dumpvdl2から出力される気象データを含むメッセージは次のようです(新型の航空機を例示)。旧来のACARSのacarsdecが出力するメッセージとほぼおなじです。
例1 日本航空 JA348J Boeing 737-846 羽田からの離陸直後
[2017-11-09 06:47:45 JST] [136.975] [-15.0/-38.9 dBFS] [23.9 dB]
851CCA (Aircraft, Airborne) -> F00648 (Ground station): Command
AVLC type: I sseq: 0 rseq: 1 poll: 0
ACARS:
Reg: .JA348J Flight: JL0501
Mode: 2 Label: H1 Blk id: 7 Ack: ! Msg no.: D02A
Message:
#DFBWDCAF9000D20A 6
08214018
100N35333E1394752140 16345 20
200N35334E1394752140 16339 21
300N35335E1394742140 16341 27
400N35335E1394742140 16342 26
500N35336E1394742140 16340 35
700N35336E13
|
高度100フィートから700フィートまで、位置と気象データを1つのメッセージで送っている。たとえば
高度: 100フィート
現在位置: 北緯35度33.3分 東経139度47.5分
外気温: 16℃
風向: 345°
風速: 20ノット
なぜ700フィートの気象データが欠落しているのか不明。
例2 全日空 JA818A Boeing 787-8 Dreamliner
[2017-11-09 06:50:07 JST] [136.975] [-11.1/-39.2 dBFS] [28.1 dB]
86D2EE (Aircraft, Airborne) -> F00648 (Ground station): Command
AVLC type: I sseq: 7 rseq: 4 poll: 0
ACARS:
Reg: .JA818A Flight: NH0985
Mode: 2 Label: H1 Blk id: 5 Ack: ! Msg no.: D13A
Message:
#DFBPO8JA818A985 RJTTRJOO081117215001
1513 7 210ACMF1017
WN35034E13845121500327978-33270117 21900
|
従来のACARSに現れなかった、787-8 Dreamlinerからのメッセージ例。
WN35034E13845121500327978-33270117 21900
から
現在位置: 北緯35度03.4分 東経138度45.1分
高度: 27978フィート
外気温: -33℃
風向: 270°
風速: 117ノット
気象データの抽出手順は、次の通りです。10分に1回、全自動で行います。
(1) RaspberryPiではacarsdecとdumpvdl2が動いており、acarsdec.logとvdl2.logの2本のログファイルが出来ています。周期的にPCからそれらを読み出します。
(2) ホストPC上で、それぞれのファイルから、 時刻、現在位置(緯度latitude, 経度longitude)、高度(altitude)、外気温(temperature)、風速(windspeed)、風向(winddirection)をとりだし、必要な単位変換を行います。acarsdec_weatherdata.csv
とvdl2_weatherdata.cavの2つのCSVファイルが得られます。
(3) 2つのCSVファイルを1本に併合(マージ)します。
(4) そして、GNUPLOTによるグラフ描画し、FTPによりホームページに掲載します。
比較的簡単に最新の航空機からのACARSを受信することができ、高層の気象情報を得る強い味方が増えました。
すでにかなりの数の航空機がVDL2を利用し、移行が進んでいるようです。従来のACARSのメッセージ量を1とすると、これに加えVDL2により0.5〜0.8、すなわち2倍近くの気象情報が得られます。航空機の世代交代によりこれがさらに進むと考えられます。
注意点としては
1.1台のRaspberryPiに2個のドングルを使用する場合、上に述べた/etc/modprobe.d/rtlsdr.conf がないと動きませんでした。また、rtlsdrドングルの番号はどちらが0番、1番になったか、dumpvdl2から見えません。1台ずつUSBに接続し、ソフトを追加起動するようにします。
2.2個のドングルで消費電力も増えるので、電源は2.5A のアダプタでないと不安定でした。
3.旧来のACARS受信のため、同居するacarsdecは、最新のVer3.4にする必要がありました。そのためこちらのACARSのページを更新してあります。
4.VDL2の周波数は136.975MHzのみを指定していますが、ヨーロッパの混雑エリアでは136.725, 136.775, 136.875MHzも使われているようです。日本では未確認です。dumpvdl2は8周波数までデコードできるそうです。
5.旧来のACARSに比べ、高度化しているため伝送距離が短いかと思っていましたが、ほぼ同じで、北は福島、西は静岡まで受信できてます。(気象情報の場合は、遠隔地のデータはむしろノイズですから、フィルタしていますが)
6.電波法59条「傍受してその存在若しくは内容を漏らし、又はこれを窃用してはならない」という、秘密の保護規定にふれる可能性があることには変りありません。
|
|
|