RaspberryPi
RaspberryPiによるADS-B受信機
 SDR(Software Defined Radio)「ソフトウエアラジオ」という方式があります。これは出力や周波数帯、変調方式などが異なるさまざまな無線通信手段を、1台の無線機のソフトウエアを書き換えることで対 応する技術です。言いかえると、汎用的なハードウエアを用いて通信を行い、従来は半導体が行ってきた方式依存の処理の大部分をソフトウエアで行います。新 しい通信方式が登場すると新しいソフトウエアを取得して通信機器に送り込むことで、ハードウエアを交換する必要がありません。
 これを実現するために従来は、高度な信号処理プロセッサを用いる必要があり、手が出せませんでしたが、QSTというアマチュア無線の雑誌2013年1月号に、パソコン用のUSBタイプのワンセグTVチューナー(日本の方式とは異なるDVB-T方式)を用いると簡単に実現できることが発表され、一躍世界に広がりました。
Cheap and Easy SDR
 これはQST 2013年1月号のタイトルです。ドングル(Dongle)とは「コンピューターのUSBポートに接続する小さな装置」を指 すため、もっぱらこのチューナーは「ドングル」と呼ばれます。価格は20ドル前後と手ごろであり、生産は中国、日本でもインターネット通販で安価に手に入ります。
 さて、そのソフトウエアラジオでなにを受信するかですが、ADS-B(Automatic Dependent Surveillance-Broadcast)を受信しようと思います。
 ADS−Bは航空機から1090MHzの周波数で、航空機識別子、GPSによる現在位置、高度、速度などを含む信号をたえず放送的に発信しており、この情報を地上や航空機間で利用することでより安全に航空機を運用できるようにするものです。近年これに対応したトランスポンダを搭載する航空機が増えてきています。それを受信し、パソコン地図上に仮想レーダのように、航空機を表示しようとするものです。
 なお、Windowsマシンでこれを実現する例が多いですが、24時間運転の必要性から、省エネのRaspberryPiが最適です。すでに先駆者がさまざまな開発を行っており、それを使わせていただきました。

 仮想レーダ画面
Flightradar24へ情報を提供する
 Flightradar24(フライトレーダー24)は飛行中の民間航空機の現在位置をリアルタイム表示するWebサービスです。Wikipediaによると、2006年、2名のスウェーデンの航空ファンがヨーロッパ北部・中部のADS-B受信ネットワークの構築をスタートし、たくさんの人誰で受信したADS-BのデータをFlightradar24のサーバに送信できるシステムとして公開されたため、世界各国の航空ファ ンによってレーダーの対応範囲は拡大し、現在はヨーロッパ、アメリカをはじめとして世界中ひろくボランティアが参加者がいます。従来は航空管制官やパイロットしか知ることのできなかった航空機の位置情報・飛行経路が手軽に取得できるため、航空事故発生時にマスメディアの情報源として用いられることもあるようです。Flightradar24が推奨するADS-B受信機がありますが高価(800ユーロ)で、ここに述べてきたDVB-Tドングルとソフトウェアラジオによる受信機が普及したため、一気に情報提供者が増加しています。
 ここではRaspberryPiによるADS-B受信機でFlightradar24に情報をアップし、ボランティアの仲間入りをしたいと思います。



 ドングル(DVB-T+DAB+FM USB チューナー RTL2832U+R820T)はアマゾンで入手できます。簡易包装で送られてきたセットはドングルの他にアンテナとリモコン、CDがついており、これが1000円〜2000円(価格は時々変わる)。リモコン、CDの使い道はありませんがアンテナは、さまざまな実験用に使えましすし、特殊なMCXコネクタはあとで部品として貴重です。
 ドングルのなかをのぞいてみると、キー部品の信号処理LSI Realtek RTL2832U とチューナLSI Rafael Micro R820T がみえます。
 一部に、ドングルの製造が雑で、USBの接続が不安定、あるいは周波数がずれているなどの報告がありますが、そのようなことはなく、充分安定に使えました。

 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
$ sudo cp rtl-sdr.rules /etc/udev/rules.d/


4./etc/modprobe.d/ディレクトリにrtl-tcp-blacklist.confというファイルを下記の内容で作成

$ sudo nano /etc/modprobe.d/rtl-tcp-blacklist.conf
 blacklist dvb_usb_rtl28xxu
blacklist rtl2830
blacklist dvb_usb_v2
blacklist dvb_core
一度念のためリブートしておきます。

上のようにドングルを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
・・・・


 これでソフトラジオがRaspberryPiで実現できましたので、試しにFMラジオを受信してみます。例えば79.5MHzにチューニングする場合
次のコマンドをRaspberryPiのコマンドラインから入力します。
$ rtl_fm -f 79.5M -M fm -s 200000 -r 48000 - | aplay -r 48k -f S16_LE

RaspberryPiのイヤホンジャックにイヤホンをさしこむと、FM埼玉が聞こえます。

 次にRaspberryPiのソフトラジオをWindows親機からリモート操作する練習を行います。

1.Windowsパソコン側のSDRソフトのダウンロード

 SDRSharpというソフトを使います。Dawnloadsページ
  http://sdrsharp.com/index.php/downloads
を開きます。

 Dawnloadsページの中ほど「Important note for RTL-SDR users」の項目にある、
 sdr-install.zip ファイルをダウンロードします。

2.ファイルの解凍とインストール
 PCがインターネットアクセスできる環境であることを確認し、解凍したフォルダの中の、install.bat をダブルクリックします。自動的にsdrsharpフォルダーが作成され、その中にSDR#の必要なファイル群がインターネット経由でダウンロードされます。ダウンロードが終了し たら、sdrsharpフォルダーを開き、中に、 zadig.exe と SDRSharp.exe が保存されていることを確認します。

3.RaspberryPiで次を実行

$ rtl_tcp -a 0.0.0.0

4.Windows側でSDRSharp.exe を起動すると、次のような画面が現れる
 Source のプルダウンメニューを RTL-SDR/TCP とし、歯車形のConfigure ボタンをクリック
サブウィンドウが現れるので、Hostに、RaspberryPiのIPアドレスを記入し、Port が1234を確認しクローズ
Radio のWFM ボタンを指定
一番上の大きな数字に、受信したい放送局の周波数を指定
3角のスタートボタンをクリック



 右側のスライダを適宜調整すると、このような画面があらわれます。またパソコンのスピーカから音声が聞こえます。
終了するには、RaspberryPi側でctr-C

Modesdeco2を導入
 いよいよ、ADS-Bの受信設定です。ADS-Bの情報を受信しそれをデコードするフリーソフトには、いくつかあります。ここでは評判の良いModesdeco2を使います。上で説明したソフトラジオ用のデコーダソフトは使わず、これだけで動作するようです。こちらを参考にしました。
1.まずは、 RaspberryPi用の modesdeco2 のダウンロードです。
$ wget https://drive.google.com/open?id=0B7NYXizl0U6iRmpQUXp0Z1Q0SG8&authuser=0

2.ファイルを展開します
$ tar xfz modesdeco2_rpi_20150321.tgz

3.これでソフトの準備が出来ました。たくさんのパラメータ指定があります。しらべるには
$ ./modesdeco2 --help

4. modesdeco2の起動
 設置されているサイトの、緯度経度を調べておきます。60進ではなく少数以下4桁まで指定します。そしてつぎのように起動します。
$ ./modesdeco2 --gain 49.6 --sbs10001 10001 --avrmlat 30002 --beast 30005 --rbs --msg 30003 --location 35.xxxx:139.xxxx --web 8080
2015-04-03 12:48:31.428  INFO     ModeSDeco2 v.20150321
2015-04-03 12:48:31.482 INFO Magnetic declinations coefficient file wmm.cof load successful
2015-04-03 12:48:31.513 INFO Using device: 0 mnf: Realtek prod: RTL2838UHIDIR serial: 00000001
2015-04-03 12:48:32.034 INFO Supported Gains (dB): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6
2015-04-03 12:48:32.036 INFO Sample Rate: 2.0 MHz
2015-04-03 12:48:32.038 INFO Freq: 1090.0 MHz
2015-04-03 12:48:32.039 INFO Freq Correction: 0 ppm
2015-04-03 12:48:32.093 INFO Gain: 49.6 dB
ADS-Bが正常に動き出しました。

4.LANにつながっている、パソコンのブラウザからアドレスを
http://192.168.1.xx:8080/

とすれば、このページのトップのような仮想レーダの画面が映し出されます。

Flightradar24にフィード方法
 それではRaspberryPiからFlightradar24へ情報をアップロードする(これをフィードといいます)プログラムをインストールします。こちらあるいはこちらを参考にしました。

$ wget https://dl.dropbox.com/u/66906/fr24feed_arm-le_242s.tgz

つぎに展開します。
$ tar xfz fr24feed_arm-le_242s.tgz

ファイル名を確認し、インストールします。
$ ls
$ file fr24feed_arm-le_242s

動かします。
$ ./fr24feed_arm-le_242s
 ここまで確認できたら、もうひとつRaspberryPiの基本的な設定をおこなっておきます。すなわちRaspberryPiで複数のセッション(たとえばModesdecoとfeedプログラム)を動作させるために、GNU screenを使えるようにします。screenを使うと、プロセスを動作させたまま接続を切断したり、複数のセッションを起動することが可能です。

インストールはつぎによります。
$ sudo apt-get install screen

 Flightradar24に登録(サインアップ)を行います。
サインアップはModesceco2を起動した状態で行うため、screenコマンドを実行します。
$ screen
Screen version 4.01.00devel (GNU) 2-May-06

Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan,
Sadrul Habib Chowdhury
Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael
Schroeder
Copyright (c) 1987 Oliver Laumann

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 3, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program (see the file COPYING); if not, see http://www.gnu.org/licenses/,
or contact Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

                  [Press Space for next page; Return to end.]

screenのグリーティングメッセージですから、returnを入力します。アンテナのついたドングルが正しく接続されていることを確認し、先に説明した、Modesceco2の起動コマンド(パラメータも指定する長いやつ)を入力します。
Modesceco2が起動されたら、Ctrl+A, Ctrl+Dを続けて打鍵します(この操作をデタッチという)。ふたたびコマンドプロンプトが現れます。これでModesdeco2が動いたままもう一つのscreenが起動できます。
そこで再び、
$ screen
 そして、 returnを入力し、つぎのコマンドでFlightradar24への登録を行っていきます。質問に答えながら必要な項目を入力していきます。Latitudeは 緯度、Longitudeは経度で、分・秒ではなく小数点で正しく入れます。これの入力を間違うと、下記の正しいコールサインがもらえません。

$ ./fr24feed_arm-le_242s --signup
[i]FR24Feed v242 - built on Apr 23 2014/09:49:17
Welcome to the FR24 Feeder sign up wizard!

Before you continue please make sure that:

 1 - You have a working receiver/decoder providing Basestation compatible stream
 2 - You know the network address of the data feed (localhost:30003 by default)
 3 - You know your receivers location up to 1 decimal point
 4 - You have a working email address that will be used to contact you

To terminate - press Ctrl+C at any point

Step 1/5 - Enter Latitude  (DD.DDDD)

$:xx.xxx
Step 2/5 - Enter Longitude (DD.DDDD)
$:xxx.xxx
Step 3/5 - Enter your email address (username@domain.tld)
$:xxx@xxxx.xxx
Step 4/5 - Enter your the hostname of the data feed (leave empty for localhost)
$:
Step 5/5 - Enter your the port number of the data feed (leave empty for 30003)
$:
Step4/5あるいは5/5は、先ほどパラメータでModesceco2を起動していますので、空欄でよろしい。
 ここまで入力すると入力されたデータがチェックされます。そして受信機が正しく動いているか、サンプルのデータが正しく送られていることが確認されます。
Account registered successfully!
Your sharing key is: xxxxxxxxxxxxxxx
Your radar code is: T-RJTY44
 すべてうまくいくとこのようにkeyが送られてきます。 radar codeはこのサイトのコールサインのようなもので、最も近い飛行場のコード(METAR)に数字が付加されています。私の場合は横田飛行場(RJTY)の44人目のようです。東京地区はたくさんのかたがADS-Bをやっておられるのですね。
 そしてkeyを使って、つぎのコマンドでフィードを開始します。
$ ./fr24feed_arm-le_242s --fr24key=xxxxxxxxxxxxxxx

とすると、このサイトからのデータがフィードされます。

 つぎに、Flightradar24のWebにアクセスして、フィードのサインアップに使用したメールアドレスで、アカウントを作っておきます。アカウントの作成はフィードのサインアップとは別に行う必要があります。同じメールアドレスを使う必要があります。

 Flightradar24にログインすると、自分のフィードの情報を確認することができます。数時間動作させた後であれば、受信した航空機やメッセージ数、距離や方向などの統計情報を確認することができます。
 フィードが動作しているならFlightradar24のプレミアムサービスが無料で利用可能です。表示時間の制限が無くなり、その他全画面表示や、レーダービューなどを見ることができます。さらにスマホから、FR24Premium が無料で使えるようになります。

 ひととおりうまく設定できたので、本番に移ります。なにより重要なのは、アンテナです。とりあえず付属のアンテナを室内に置いていただけですので、これでは不十分です。
 いろいろな製作例を参考にしながら、簡単で性能の良さそうなグランド・プレーンアンテナを作ります。
アンテナの基礎から応用までによる 固い電力コードの芯線を使いました。
気象観測用のポールの先端に設置。地上高約7m 海抜100m

 グランド・プレーンアンテナは図のように、1/4波長の放射素子に、地面を模したラジアルを配置したもので、無指向アンテナです。ADS-Bは1060MHzですから、放射素子、ラジアルとも、
エレメント長 = 300/1090MHz x 1/4 x 0.95 = 65mm
となり、適当な銅線を切断し、BNCコネクタのセンタと、アース側に4本配置しました。それを水道用の塩ビパイプのふたに穴をあけ取り付け、気象観測用のポールの先端に設置しました。


 つぎにドングルですが、アマゾンで本番用にあたらしい改良版を購入しました。これは チューナLSIに新型のR820T2を実装し、周波数偏差/周波数温度特性とも±10PPM以下の日本製高精度水晶発振子に国内で交換作業したものです。
 予備実験でわかったことですが、主要部品のRTL2832U と R820TのLSIは、運用中に手で触れないほど高温になります。そのため図のようにヒートシンクを用い、かつメタルのケースに熱を逃すようにしました。かなり効果があります。
 ドングルとアンテナの配線長は短い方がよいので、ドングルは金属ケースにいれ、軒下に設置。RaspberryPiとはUSB接続

裏側に大きめのヒートシンクを熱伝導テープで貼り付け
改良版ドングル(上) 赤丸は表面実装水晶発振子


金属ケースにドングルをねじ止め。こちら側にもLSIにヒートシンク
BNCコネクタに変換ケーブルで出力
ドングルは軒下に(ふたをはずしてある)。左は2A、5Vの電源と共にケースに入れたRaspberryPi。雷センサ用の基板がついている。

 Flightradar24ではさまざまなフィードされたデータの中から、選択し、一つの画面を構成しています。自分のPC上では20数機とらえていますが、東京ようにたくさんの情報提供者がいる地域では、なかなか激戦で採用されません。どのようなアルゴリズムで多数の情報から選択しているのか不明ですが、少なくとも受信レベルを報告しているので、これによっているものと思われます。
 下は、当方のデータが使われた例です。 これで皆さんに仲間入りできました。

  
 数週間運用後、Flightradar24の自分のアカウントをみると、下のような統計データが表示されます。西側が開けた地形のため、200ノーチカルマイル(1ノーチカルマイル=1.852km)、名古屋上空まで見えています。1GHzの電波は直進性が強く障害物(山、樹木)を回り込まないため、南東の特に高度の低い航空機はとらえられず、残念ながら羽田や成田の発着は見えません。


参考:Flightradar24における最近の事故例(動画で見えます)
2014/03/08 マレーシア航空370便 クアラルンプール発北京行 行方不明
2014/07/17 マレーシア航空17便 アムステルダム発クアラルンプール行 ウクライナ上空で撃墜
2015/03/24 ジャーマンウィングズ9525便 バルセロナ発デュッセルドルフ行 フランスアルプスに激突
2016/05/12 エジプト航空804便 パリからカイロへ向かっている途中に、レーダーから機影が消えた