📡

Raspberry Piで航空機のADS-Bを受信する

2023/04/25に公開

こんにちは、IoTチームに業務委託で参画している山口(@volcaos)です。
本Tech Blogでは、前回前々回に続き3度目の投稿になります。よろしくお願いいたします。

LUUPの車両は内蔵のIoTモジュールから、車両の位置情報や動作状況などのデータを送信していますが、航空機の管制システムにも、これと似たADS-B[1]という仕組みがあります。

本記事では、ご家庭で余りがちな古めのRaspberry Piを活用した、ASD-B受信機の構築例をご紹介します。

ADS-Bシステムと航空管制

ADS-Bシステムを搭載した航空機は、衛星測位で計測した機体の位置情報や飛行状況などのデータを定期送信しており、地上側でこの信号を受信することで、航空機の運行状況をリアルタイムで確認できるようになります。

ADS-Bを使った航空管制は、従来のレーダー管制よりも利点が多く、航空管制の精度向上や航空機の安全性向上が期待されることから、航空機へのADS–Bの搭載の義務化が各国で進められています。

Flightradar24と自家製ADS-Bフィーダー

ADS-Bで捕捉できる航空機の範囲は、電波が届く場所に限られますが、インターネット上には世界各地の有志が受信したADS-B信号を共有するサービスがあります。

Flightrader24で表示した羽田空港の様子
Flightrader24で表示した羽田空港の様子

Flightradar24は、世界中の航空機の運行状況をリアルタイムで閲覧できるサービスです。全ての機能を利用するには、Business Plan(年額499.9ドル)への加入が必要になるのですが、自分が受信したADS-B信号をFlightradar24にフィードしているユーザには、Business Planのサブスクリプションが無料で付与されます。

安価なUSBドングル型の受信機を使えば、誰でもADS-Bのデータを取り込むことができます。
フィード用ADS-B受信機の構築方法は、公式サイトに詳しい説明があるほか、ネット上の作例記事も豊富です。ここではRaspberry Pi Zero Wを使った構築例を簡単に紹介します。

用意するもの

  • Raspberry Pi Zero W
    WiFiが使えるFRISKサイズのラズパイです。発売当時は価格が10ドルでした。
  • Nooelec NESDR Nano 3
    Nooelec社のSDR(ソフトウェア無線)チューナーです。動作時にかなり発熱するので、付属のヒートシンクを貼って放熱します。
  • 1090MHz受信用アンテナ
    SDRチューナーに付属していた簡易的なアンテナです。底面が磁石になっています。
  • その他
    SDカードや電源用USBケーブル、microUSB変換アダプタを使います。

RasPiにSDRチューナとアンテナを繋げたところ
RasPiにSDRチューナとアンテナを繋げたところ

受信機の準備から登録までの流れ

  • 事前にFlightradar24のアカウントを作成しておく。
  • Pi24というRasPi用のOSイメージをSDカードに書き込み、wpa_supplicant.confにWiFiの接続情報を上書きして、RasPiにセットする。
  • アンテナを繋いだSDRチューナーをRasPiに接続し、電源を投入すると受信データのフィードが開始される。
  • 設定用ページを開くと、接続中のフィーダーが表示されるので、Activateする。
  • フィーダーのActivateが完了すると、アカウントがBusiness Planに切り替わる。

ADS-Bの受信状況を確認する

Pi24で構築したADS-B受信機にはHTTPサーバ機能があるので、LANを経由してWebブラウザから動作設定や受信データの確認が可能です。

ここでは、MacBook ProにNooelec社のNESDR SMArt v5というSDRチューナーを繋げて、受信の様子をさらに詳しく見てみます。調査にはADS-Bデコーダーソフトのdump1090と、ソフトウェア無線用アプリのCubicSDRを使いました。

以下は、外出先の駐車場でアンテナを立てたときの受信状況です。150km先の航空機の信号が受信できているのがわかります。

dump1090のWebインターフェース画面。受信した航空機の位置が地図上にプロットされる。
dump1090のWebインターフェース画面。受信した航空機の位置が地図上にプロットされる。

ADS-Bの信号は、1090MHzの周波数でパルス位置変調(PPM: Pulse Position Modulation)された電波で送信されています。

CubicSDRを使うと、SDRチューナーが受信している信号スペクトル(周波数ごとの信号強度)を見たり、ウォータフォールグラフで信号の頻度や強度が確認できます。

CubicSDRの操作画面。1090MHz付近で信号を受信している様子がわかる。
CubicSDRの操作画面。1090MHz付近で信号を受信している様子がわかる。

コマンドライン上で、dump1090に—interactiveオプションをつけて起動すると、受信中の航空機の情報が一覧で表示されます。スコークコード[2]や、便名、高度、速度、機首方向、緯度経度などが取得できていることがわかります。

dump1090のinteractiveモードの出力例
dump1090のinteractiveモードの出力例

さらに受信範囲を広げるには

ADS-Bは窓際にアンテナを設置すれば室内でも受信は可能ですが、受信状況が改善すると、より遠くの信号を拾うようになります。

  • アンテナの設置位置を変える
    建造物などの障害物を避け、高い位置に設置するとより効果的です。
  • アンテナを改良する
    アンテナには様々な種類があり、利得や指向性に違いがあります。身近な材料を使ったアンテナの自作も可能です。
  • フィルタやアンプを繋げてみる
    フィルタで不要な信号を除去したり、アンプで必要な信号を増幅することで、信号を拾いやすくなります。
  • ノイズの影響を取り除く
    フェライトコアやノイズ特性に優れたUSBケーブルを使用すると、SN比が向上します。

おわりに

近年、スマートフォンやIoTデバイスなどの普及により、無線技術はますます身近な存在となっています。例えば、ADS-Bトランスポンダーはサンタクロースのソリにも搭載されていて、彼の安全な航行をサポートしていることが知られています[3]

グリーンランド領空でJAL機の近くを飛ぶサンタクロース。R3DN053 → REDNOSE
グリーンランド領空でJAL機の近くを飛ぶサンタクロース。R3DN053 → REDNOSE

ADS-B受信機の構築は手軽な上に、無線技術に触れるよい機会となりそうです。ただし、熱中しすぎると高価なアンテナアナライザや電波塔が欲しくなったりしますので、ご注意ください。

脚注
  1. ADS-B: Automatic Dependent Surveillance–Broadcast、放送型自動従属監視 ↩︎

  2. Squawk code: 8進法4桁(0000-7777)で表現されるコード。航空機の識別のほか、緊急事態の通知などにも使用される。 ↩︎

  3. https://www.flightradar24.com/blog/tracking-santas-flight-with-flightradar24/ ↩︎

Luup Developers Blog

Discussion