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

 仮想レーダにより飛行機を追跡する、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の情報の中に、気象通報として地上に報告しています。それをひろって高層気象観測を行おうと思い立ちました


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

Aircraft reg: .JAXXXX Flight id: JLXXXX
Mode: Z Msg. label: H1
Block id: 2 Ack: !
Msg. no: D04A
Message :
#DFBPNT201-06 A34
19014308
N37446E140380005232589-45268 52 241
248498339
W 0 00530

このなかで、気象観測に必要な情報は
N37446E140380005232589-45268 52 241
という文字列のなかの一部の情報です。これを解読します。
現在位置: 北緯37度44.6分 東経140度38.0分
高度: 32589フィート
外気温: -45℃
風向: 268°
風速: 52ノット

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


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

 つぎにドングルですが、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のインストール方法を記します。
1.まずは、ADS-Bの場合と同様 ソウトウェアラジオ用パッケージであるrtl-sdrをダウンロード、インストールします。

2.RaspberryPiにおいてhttp://sourceforge.net/projects/acarsdec/からacarsdecをダウンロードします。
$ wget http://sourceforge.net/projects/acarsdec/files/latest/download -O acarsdec-3.2.tar.gz

3.展開します。
$ tar xvfz acarsdec-3.2.tar.gz
$ cd acarsdec-3.2

4.ここで展開されたファイルの中にMakefileがあります。READMEの指示にしたがってMakefileの中のCFLAGとLDLIBSを次のようにエディタで修正します。
CFLAGS= -Ofast -ftree-vectorize -funroll-loops -D WITH_RTL -pthread
LDLIBS= -lm -pthread -lrtlsdr

5.そしてコンパイル
$ make
acarsdec-3.2ディレクトリの中にプログラムが出来ています。

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

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

Usage: acarsdec [-v] [-o lv] [-A] [-n ipaddr:port] [-l logfile] [-g gain] [-p ppm] -r rtldevicenumber f1 [f2] ... [f4]

-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)
-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 nativ format
-i stationid : station id used in acarsdec network format.

-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]...[f4] : decode from rtl dongle number or S/N rtldevice receiving at VHF frequencies f1 and optionaly f2 to f4 in Mhz (ie : -r 0 131.525 131.725 131.825 )

For any input source , up to 4 channels could be simultanously decoded


7. acarsdecの起動
RaspberryPiにドングルをさし、アンテナをつなぎ、つぎのように起動します。
$ acarsdec-3.2/acarsdec -v -A -n 192.168.1.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 ACARSの周波数131.45MHz、131.25MHzと131.95MHz、3波を指定します。


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

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

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

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

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


 
ACARS情報の中から、気象データを抽出するプログラムは有用なものと考え、価値をおわかりいただける方に、公開させていただきます。このページのボトムをごらんください。


 筑波館野高層気象台の計測データを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の中に入った航空機のデータ(下の図の地図の部分だけ)をとりだし、プロットすることとします。





気象データ抽出用のプログラムの公開
上記のACARS情報の中から、気象データを抽出するプログラムは有用なものと考え、価値をおわかりいただける方に、公開させていただきます。(2017/08/22)
ACARSの1メッセージから、 時刻(JST)、現在位置(緯度latitude, 経度longitude)、高度(altitude m)、外気温(temperature ℃)、風速(windspeed m/s)、風向(winddirection 度)をとりだし、必要な単位変換を行い、csvファイルとして出力します(コンマ区切りのファイルで、EXCELで開けます)。次のような条件です。

1.Windowsで動くJAVAの実行形式JARで提供します。「JARが動く環境」が必要です。
2.ACARS情報をデコードするプログラムacarsdecがRaspberryPiで動いており、ログファイルが出力されていること。そのファイルをWindowsPCから共用あるいはコピーできていること。acarsdecのバージョンは3.2あるいは3.4のこと。ログファイル名はacarsdec.logで固定。
3.サポートは気まぐれです。変換時エラーが多発する場合、ログファイルを提供いただくことがあります。改善していきます。
4.電波法に触れる可能性があることをご承知置きください。当方はこれ以上の責はありません。
5.そのほか観測の結果の交換、対外発表など、ご協力頂くことを条件とさせていただきます。
6.以上を確認させていただいて上で、無償提供いたします。ホームページ管理人にメールをください。