2014-04-02 Raspberry Piで航空機からの位置情報信号ADS-Bを受信
Raspberry Piで航空機からの位置情報信号ADS-Bを受信してみた
最近ニュースで航空機の捜索が話題になっていましたが、その中でADS-Bという単語が出てきました。
ADS-B(Automatic Dependent Surveillance-Broadcast)は、航空機から1090MHzの周波数で発信されている、識別子、GPSによる現在位置、高度、対気速度などを含む信号で、この情報を地上や航空機間で利用することでより安全に航空機を運用できるようにするもので、近年これに対応したトランスポンダを搭載する航空機が増えてきているそうです。1030MHzで各航空機に問い合わせを送り、各航空機が1090MHzで応答するというプロトコルになっています。
Flightradar24というサイトを見ると、航空機の位置情報をリアルタイムで見ることができますが、これはユーザの受信機から送信されたADB-Sの情報を収集して配信することで、世界中の航空機の位置情報をカバーする仕組みになっています(ADB-Sに対応しない航空機もあるため、FAAの情報(5分遅れ)なども利用して補完しています)。
さて、このADS-Bですが、ソフトウェアラジオ(SDR: Software Defined Radio)用のUSBスティックを使うと非常に安価に受信することができます。
R820Tというチップを使ったUSBドングルが特に簡単に利用できるようです。何とたったの999円で手に入るとか。Amazonでも2000円くらいから売られていました。
DVB-T+DAB+FM USB チューナー RTL2832U+R820T
- 出版社/メーカー: B・S・T・R
- メディア: エレクトロニクス
- この商品を含むブログ (2件) を見る
これをRaspberry Piに接続して、ADS-Bの受信(ついでにFMラジオの再生も)にトライしてみました。
今回使用したのは米国Amazon.comで購入したNoElecのR820T USBドングルです。
Raspberry PiでのADS-B受信は、下記のガイドが参考になります。
ADS-B Sniffing with the Raspberry Pi and the NooElec 820T Dongle |
なお、利用方法はR820Tを使用したドングルであればほぼ変わらないはずです。
WindowsやMacで利用する方法も検索するといろいろと出てきます。
Raspberry Pi上のソフトウェアのセットアップ手順は下記の通り。
rtl-sdrのセットアップ
まず、SDR用のrtl-sdrというパッケージをセットアップします。
参考: Rtl_fm Guide: Updates for rtl_fm overhaul, Raspberry PiとRTL2832Uドングルを受信サーバとして使ってみる - Computer Radio RF Tech
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
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr mkdir build cd build cmake .. make sudo make install sudo ldconfig
sudo rtl_test
してみて、Found 1 device(s): デバイス名 が表示されればOK。
USBスティックの機種によって、rtl2830やrtl2832、dvb_usb_rtl28xxuといったドライバがロードされている場合、rmmodする必要があるようです。私の場合は必要ありませんでした。
試しにFMラジオを再生してみます。106.7MHzにチューニングする場合、
sudo src/rtl_fm -M fm -f 106.7M -s 170k -A fast -r 44100 -l 0 -E deemp | sudo aplay -t raw -r 44100 -c 1 -f S16_LE
とします。これで、ステレオミニジャックからラジオの音声が出力されます。
音量の調整は、sudo alsamixerコマンドで行います。あまりに低くなっていると音が出ないので注意。
Raspberry Pi上で rtl_tcp -a 0.0.0.0 を動かしておき、LinuxもしくはMacからgprxというソフトウェアで"rtl_tcp=<raspiのIPアドレス>:1234"に接続(サンプル数は170k(maxの1桁下)で十分)すると、リモートでラジオを聞いたりFFT波形を見たりできます。
詳しくはこちらが参考になります。MacでSDRするならgqrxがとても簡単 - Computer Radio RF Tech
gprxの接続設定の例。
gprxで1090MHz周辺を見てみたところ。真ん中のピークはフィルタによるノイズですが、右寄りに1090MHz (0.03MHz程の誤差がありますが…)のピークが見えますね。
ADS-Bの受信
様々なソフトがあるようですが、今回はLinuxでの実行がお手軽なdump1090を使います。
ADS-B dump1090
http://www.satsignal.eu/raspberry-pi/dump1090.html
git  clone  git://github.com/MalcolmRobb/dump1090.git cd  dump1090 make
実行するには、
./dump1090 --interactive --net
とします。コンソール上に下記のように受信されたADB-Sの情報が表示されます。
Hex Mode Sqwk Flight Alt Spd Hdg Lat Long Sig Msgs Ti\ ------------------------------------------------------------------------------- a283fa S 2750 24 8 1 a62f85 S 6175 42.091 -71.138 20 6 53 aa435b S 22325 21 160 31 a301f3 S 3417 25900 19 517 11 86d668 S JAL8 2200 153 019 42.248 -71.062 23 186 59 ......
また、WebブラウザでRaspberry piのIPアドレスの8080番ポートに接続すると、下記のように地図上に取得した情報をプロットしてくれます。
なお、下記フィード用等でサーバとして常駐させる場合は ./dump1090 --quiet --net とすれば画面表示を抑制して少し負荷が下げられるかと思います。
Flightradar24.comにデータをフィードする
また、専用のfeederソフトを使って取得したデータをFlightradar24.comに送信して共有することもできます。一定の条件を満たせば、無料でプレミアムアカウントの機能を利用することができます。
Linux単体でも送信自体は可能ですが、最初のアカウントのセットアップは現状Windows版のソフトからしかできないようです。手順は下記。
- Flightradar24.comのプレミアムアカウントにSign up(このとき料金を払う必要はありません)
- Software - Flightradar24.com - Live flight tracker! からWindows用のfeederをダウンロードして実行
- Sign upボタンをクリックし、アカウントのメールアドレス、受信地の緯度経度(Google Map等で調べられます)、およびdump1090の30003ポートに接続できるようIPアドレスを設定
- しばらく待つと、2機以上の位置情報を受信して照合し、正しければkey(16桁の16進数)が付与される。
- Linux feeder software for Flightradar24 からARM LE, statically linkedバージョンのfeederをRaspberry Piにダウンロード(動的リンク版は途中でSEGVして動きませんでした)
- tar xf *.tgz でアーカイブを解凍し、渡されたkeyを指定してfeederを起動
% ./fr24feed_arm-le_241s --fr24key=1cc722d43b9f0314 --bs-ip=127.0.0.1 --bs-port=30003 [i]FR24Feed v241 - built on Feb 20 2014/09:54:09 [i]Downloading configuration...OK [i]Parsing configuration...OK ... [n]connected [n]switching to UDP [n]working [i]Data feed time difference OK abs(12:49:20.430 - 12:49:20.396)=0 [n]pinging the server [i]sent 5 planes in 1 packets ...
プレミアムアカウントを有効にして航空機をクリックすると、データを取得した人のコード(ID)を見ることができます。自分のコードが出てるのを見るとちょっと嬉しいですね。また、自分が送信したポイント数や、距離・方角の分布などもグラフィカルに見ることができます。
やはりアンテナが室内なので方角も偏ってるし距離も全然ですね…。
その他の参考サイト
他の環境用のソフトウェアの情報や、専用アンテナの作り方なども。
RTL-SDR Tutorial: Cheap ADS-B Aircraft RADAR - rtl-sdr.com
- 40 http://t.co/mcKtGhUxDJ
- 6 http://pipes.yahoo.com/pipes/pipe.info?_id=45d5a8c4e92dd6d0ea2937e5cbb455bf
- 6 http://t.co/7ovIPGbdLo
- 4 http://api.twitter.com/1/statuses/show/451196316782034944.json
- 4 http://feedly.com/
- 4 http://www.google.com/url?source=web&url=http://d.hatena.ne.jp/NeoCat/20140402/1396406442
- 2 http://a.hatena.ne.jp/mitsuman/
- 2 http://b.hatena.ne.jp/entrylist
- 2 http://longurl.org
- 2 http://pipes.yahoo.com/pipes/pipe.info?_id=VPw6npu13RGKo15vBRNMsA
- 2014-03-30 驚異のアニヲタ社会復帰への道 3/51 5%