RaspberryPi
高層気象観測
 気象観測を続けていると、地上のみならす、上空の高層天気を知りたくなります。天気予報でも、「地上1500m上空の気温がマイナス6℃以下になると雪になる」とか、「上空に冷たい空気が入ったので大気が不安定になり雷の可能性がある」などと報じます。高層気象観測はラジオゾンデとよばれる風船を飛ばし、世界各地で毎日決まった時刻(日本標準時09時・21時)に行われており、気象庁では、全国16か所の気象官署や昭和基地(南極)で実施しています。 とてもアマチュアの手には負えません。
 そこで民間航空機からのACARSによる気象通報を受信し、それに一定の処理を行い、鉛直断面の高層天気として、表示することとしました。(2016.3.28公開 2017/11/09 acarsdecをVer3.4に変更)
ラジオゾンデによる高層気象観測網
 ラジオゾンデによる高層気象観測網(気象庁ホームページ)

 仮想レーダにより飛行機を追跡する、ADS-B受信機をつくりましたが、その際ACARSというのがあると知りました。ACARS (Aircraft Communications Addressing and Reporting System)とは、無線による地対空のデジタル・デ−タリンクシステムで、Aeronautical Radio, Inc社によって1978年に音声通信に代わる手段として開発されました。すなわちADS-Bが主として衝突防止のためであるのに対し、ACARSは、航空機のさまざまな運用情報を伝送しています。ADSBと比較すると次のようです。

   ADS-B
Automatic Dependent Surveillance-Broadcast
ACARS 
Aircraft Communications Addressing and Reporting System
 用途  主として衝突防止のため、現在位置、高度、対気速度のような情報を放送形式で送信する  便名、出発・到着時刻、現在位置、高度、搭載燃料、航空機の状態などのほか最新の気象情報を通報
 使用周波数  1090MHz  VHFエアバンド 131.250 MHz、AM 131.450 MHzなど
 情報の頻度  1秒に1回 程度  不定期 数秒に1回から数分に一回 
 情報の形式  国際標準が規定されている   かなり自由な形式

 航空機にとって、気象情報は大変重要で、たえず大気圧、外気気温、風向、風速を計測してそれにしたがって飛行しています。そのため良い精度で計測していると考えます。あわせてACARSの情報の中に、気象通報として地上に報告しています。それをひろって高層気象観測を行おうと思い立ちました

 次世代のACARSと位置づけられるVHF Data Link - Mode 2(VDL2あるいはVDL-M2 )はこちら

 1994年の気象学会の論文によると、気象庁で実際に航空会社の協力を得てACARSのデータを気象予報に用いる実験をしています。「ACARSのデータを気象予報に用いることは、きわめて有効で、日本国内や日本周辺にも豊富で質の良いACARSデータが得られ,しかもそれらが気象庁にオンラインで入電されるようになれば,日本付近の局地客観解析や局地予報モデルの精度が確実に向上するであろう.」と述べています。その後これが実際に利用されるようになったかどうかは不明です。
 問題となるのは、ACARSがあくまでも業務用通信であり、第三者がそれを傍受すること、内容を公表することは、電波法59条「傍受してその存在若しくは内容を漏らし、又はこれを窃用してはならない」という、秘密の保護規定にふれる可能性があります。充分に配慮する必要があります。
 例で説明します。たくさん種類のあるACARSの情報のうち、気象情報が含まれているものは次のようなものです。(acarsdec Ver3.4による)


[#1 (F:131.250 L: -14 E:0) 08/11/2017 15:23:48 --------------------------------
Mode : Z Label : H1 Id : 6 Nak
Aircraft reg: .JA709J Flight id: JL0033
No: D01A
#DFBPNT201-08 A49
08152345
N35221E139440152315005 -9264 481018
232378340
W 0 02113


このなかで、気象観測に必要な情報は
N35221E139440152315005 -9264 481018
という文字列のなかの一部の情報です。これを解読します。
現在位置: 北緯35度22.1分 東経139度44.0分
高度: 15005フィート
外気温: -9℃
風向: 264°
風速: 48ノット

 これ以外の情報はすべて捨て去り、保存、公開はしないこととします。さらに得られた気象データは航空機個別の情報を追跡するのではなく、あるエリアを通過する航空機すべての1時間の統計データとして公表することとします。
 これでも秘密の保護規定に触れるかもしれませんが、気象データは自然現象の数値であるので、お許しいただければとおもいます。


ハードの構成
 全体の構成はADS-Bの場合と同様で、
アンテナ→RTL2832U+R820Tドングル→RaspberryPi→ホストPC
です。なにより重要なのはアンテナであることはADS-Bと同様です。性能の良さそうなサガ電子工業のAL-120F-MR エアーバンド専用アンテナをもちいました。

 つぎにrtlsdrドングルですが、ADS-Bと同様、改良版を用います。 ドングルとアンテナの配線長は短い方がよいので、ドングルは金属ケースにいれ、軒下に設置。RaspberryPiとはUSB接続。RaspberryPiとホストPCとはWiFi接続です。

サガ電子工業のAL-120F-MR
金属ケースに入れたRTL2832U+R820Tドングル
ヒートシンクで空冷
M型コネクタでアンテナに接続。USBに出力


ACARS受信ソフト
 ACARSを受信するには、KG-ACARSというフリーソフトが有名です。これはWindowsで動き、ACARS情報をデコードし、地図上に航空機の位置を表示するもので、たくさんの方が使っておられます。今回は地図表示は不要であり、24時間運転可能、複数チャンネル同時受信のため、このソフトは使いません。
 ACARS情報を受信するRaspberryPi用のソフトは捜したところつぎの2種類があります。
acarsdec
AcarsDeco2

まず、ADS-Bで用いたModesdeco2と同じ作者のAcarsdDeco2をためしました。AcarsdDeco2はソウトウェアラジオ用パッケージであるrtl-sdrが不要で、これだけで動くことが特徴です。しかし3周波のACARSデータを同時受信するはずでしたが、実際に動かしてみると、2波まででしたので、acarsdecを使うことに変更しました。日本の場合、ACARSには2つの周波数131.45MHz、131.25MHzが使われていると言われていますが、実際は混雑時には131.95MHzも使われております。acarsdecは4周波まで同時に受信できます。こちらを参考にしました。

以下にacarsdecのインストール方法を記します。(2017/11/09 acarsdec-3.4に修正)
1.まずは、ADS-Bの場合と同様 ソウトウェアラジオ用パッケージであるrtl-sdrをダウンロード、インストールします。

2.つぎにRaspberryPiにおいてhttps://github.com/TLeconte/acarsdecからacarsdecをダウンロードします。
$ git clone https://github.com/TLeconte/acarsdec.git

3.コンパイル
$ cd acarsdec
$ make
この場合、sndfile.h  alsa/asoundlib.hなど "No such file or directory"というメッセージが出た場合、次をインストールし再度コンパイルします。
$ sudo apt-get install libsndfile1-dev
$ sudo apt-get install libsound2-dev

acarsdecディレクトリの中にプログラムが出来ています。

6.ホームディレクトリから
$ acarsdec/acarsdec
で、動くはずです。つぎのヘルプメッセージが出力されます。

Need at least one of -a|-f|-r|-R options
Acarsdec/acarsserv 3.4 Copyright (c) 2017 Thierry Leconte

Usage: acarsdec [-v] [-o lv] [-t time] [-A] [-n ipaddr:port] [-l logfile] -a alsapcmdevice | -f inputwavfile | [-g gain] [-p ppm] -r rtldevicenumber f1 [f2] ... [fN] -R < /stdin@12500:1channel:float32native |

-v           : verbose
-A           : don't display uplink messages (ie : only aircraft messages)

-o lv          : output format : 0: no log, 1 one line by msg., 2 full (default) , 3 monitor mode, 4 newline separated JSON

-t time        : set forget time (TTL) in seconds for monitor mode (default=600s)
-l logfile        : Append log messages to logfile (Default : stdout).
-n ipaddr:port    : send acars messages to addr:port on UDP in planeplotter compatible format
-N ipaddr:port    : send acars messages to addr:port on UDP in acarsdev native format
-i stationid      : station id used in acarsdec network format.

-a alsapcmdevice  : decode from soundcard input alsapcmdevice (ie: hw:0,0)
-f inputwavfile    : decode from a wav file at 12500 sampling rate
-g gain        : set rtl preamp gain in tenth of db (ie -g 90 for +9db). By default use AGC
-p ppm        : set rtl ppm frequency correction
-r rtldevice f1 [f2]...[f8] : decode from rtl dongle number or S/N rtldevice receiving at VHF frequencies f1 and optionally f2 to f8 in Mhz (ie : -r 0 131.525 131.725 131.825 )
-R           : decode from stdin at 12500 sampling rate, 1 channel, native float32

For any input source, up to 8 channels may be simultaneously decoded


7. acarsdecの起動
RaspberryPiにrtlsdrドングルをさし、アンテナをつなぎ、つぎのように起動します。
$ acarsdec/acarsdec -v -A -n 192.168.xx.4:9742 -l acarslog/acarsdec.log -p 1 -r 0 131.250 131.450 131.950
起動メッセージはつぎのようです。

Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Tuner gain : 49.600000
Set center freq. to 131975000Hz
Exact sample rate is: 2500000.107620 Hz
Decoding 3 channels

パラメータを説明します。
-v  パリティエラーなどメッセージが出力されます
-A 地上からのメッセージは不要ですので表示なしにします
-n 192.168.1.XX:9742 ホストのPCで、PlanePlotterというソフトが動いていれば、それにデータを送り込み地図上に航空機の位置を表示することが出来ます。
-l acarslog/acarsdec.log RaspberryPiのホームディレクトリ下のacarslogディレクトリのなかに、logファイルを作ります。これを周期的に、ホスト側から読みに行き、気象データを抽出します。
-p 1 ドングルの周波数がずれている場合があり、SDL#等を用い調査し、PPM単位で補正します。今回の製品は優秀で1ppm
-r 0 131.250 131.450 131.950 rtlドングルの番号を指定 ACARSの周波数131.45MHz、131.25MHzと131.95MHz、3波を指定します。


PCに取り込み気象データの抽出
 PC上でJAVAでプログラムを作り、気象データの抽出、グラフの作図を10分に1回、全自動で行います。

(1) RaspberryPiにlogファイルが出来ていますので、周期的にPCからそれを読み出します。

(2) さまざまな運用情報の中から、気象に関するデータの入っているメッセージのみを書き出します。

(3) さらにそのメッセージのなかから、 時刻、現在位置(緯度latitude, 経度longitude)、高度(altitude)、外気温(temperature)、風速(windspeed)、風向(winddirection)をとりだし、必要な単位変換を行います。最終的には下のような、csvファイルを得ます。1行がACARSの1メッセージに相当します。

 ACARSメッセージは標準化されておらず、航空機の機種、航空会社によりさまざまで、10パターン以上あり、この(3)はかなり苦労しました。


 


 筑波館野高層気象台の計測データを1日後に気象庁ホームページで見ることが出来ます。それと今回のデータを比較すると下のように温度、風速、風向ともに、よく一致しています。次のようにコメントできるでしょう。

1.筑波のデータは2016年3月19日の9時のラジオゾンデによる計測データ。当方日野のデータは、9時から9時59分まで間に受信した個別の航空機からのACARS気象データ。

2.ラジオゾンデは2万メートル以上の高度まで(風船が破裂するまで)計測されますが、航空機の巡航高度は最高1万メートル前後であり、限定されます。しかし、地表から高 さ約1万メートルまでの範囲を対流圏(troposphere)と言い、気象現象はほとんどこの中で起こっていますので充分です。

3.航空機はラジオゾンデのように垂直に上昇するわけではなく、またACARSは数100km遠隔のデータを受信することがあります。広範囲の受信は必要ではなく、エリアに限定すべきです。

4.当地の上空は横田空域の米軍管理のエリアで、これを避けるため民間航空機は高度を5000メートルまで高度を上げ、西に向かって多く飛んでいます。羽田発着の低高度のデータとあわせるとかなり良いデータとなります。

5.しかし、高度1500mから3000m付近のデータは、理由は不明であるが、得られていません。

6.あたりまえですが、航空機の飛ばない深夜時間帯にはデーターがえられません。また、台風や雷雲を避けて飛行しますので、その中のデータは得られません。

7.ラジオゾンデのように、1日に2回だけではなく、航空機が飛んでいる時間帯には、いつでも有効な情報が得られます。

8.データは、気温、風向、風速のみで、湿度はありません。

 以上のことを配慮すれば、航空機の気象データは大いに活用されるべきと考えます。



運用
 充分実用になることがわかったので、運用に入ります。結果をこちらに示します。
1時間に一度、上に述べた気象データのcsvファイルをつくり、その中から東京上空のエリアだけをグラフにプロットします。
すなわち緯度34.75〜36.5、経度 137.5〜140.5の中に入った航空機のデータ(下の図の地図の部分だけ)をとりだし、プロットすることとします。