ADS-B Exchangeにフィードする

飛行機雲
©いらすとや.

以前、FlightAware および Flightradar24 でデータをフィードする方法についての記事を書きました。これらのフィード方法については、インターネット上に数多くのドキュメントが存在しているため、まったくの初心者でも何とか対応できるでしょう。しかし、注意が必要な点もいくつかあります。特に、Flightradar24のフィーダー用ソフトウェアに関しては、すべてのアーキテクチャ向けにビルドされたバイナリが提供されているわけでは無いにも関わらず、自分でソースコードからビルドするという選択肢もないのです。

具体的には、SBC (シングルボードコンピュータ)向けとしては、armhf(32ビットのARMアーキテクチャ)用のバイナリは提供されているものの、arm64(64ビット版のARM)用のバイナリは提供されていません。この問題に対して、OSがarmhf用のライブラリに対応していれば、64ビットのSBCでも32ビットのソフトウェアを動かすことが可能な場合があります。しかし、OSが対応していない、あるいは部分的にしか対応していない場合、そのソフトウェアは動作しないことが多いのです。この状況に頭を悩ませているユーザーも少なくありません。

例えば、OrangePi Zero2というSBCでは、orangepi.orgが提供しているDebian BusterベースのOSを使用している場合、armhf用のバイナリを動作させることができました。しかし、2021年末から2022年初めにかけての時期にリリースされたArmbianでは、dpkg --add-architecture armhfコマンドを使用し、考えられる限りのarmhf用ライブラリを追加しても、エラーが発生してバイナリが正しく動作しないという問題に直面しました。このように、環境によっては少し頑張った程度では解決しない場合もあります。

2025年1月16日追記:
この記事を書いた後、時期は不明ですがarm64版のバイナリパッケージが提供されるようになっています。Flightradar24が提供しているインストールスクリプトを使用するとフィーダー用のコンピュータのアーキテクチャに応じたバイナリパッケージが適用されるのでarm64系のコンピュータには自動でarm64のパッケージがインストールされます。

このため、2022年になり、OrangePi Zero2のOSをArmbianに移行した際、Flightradar24へのフィードができなくなってしまいました。この問題に対処するため、代替のフィード先を探すことにしました。

今回選んだのは、軍用機などの特定機種をフィルタリングせずに表示し、かつ商用サービスではないことが特徴の「ADS-B Exchange」へのフィードです。このサービスは、フィルタリングされない生のデータを提供する点で、商業サービスとは一線を画しています。

インストールと設定

すでにdump1090-faやpiawareがインストールされている環境であれば、特別な追加パッケージをインストールする必要はほとんどありません。基本的な手順は、ADS-B Exchangeの公式ドキュメントに記載されていますが、一点注意が必要です。ドキュメントでは/tmpディレクトリで実行することが推奨されていますが、SBCの/tmpはRAMディスクとして使用されていることが多く、その容量が限られている場合があります。そのため、今回はホームディレクトリで実行することにしました。
以下の手順を開始する前に、必ずdump1090-faが正常に稼働していることを確認します。これは、dump1090-faによって収集されたデータをADS-B Exchangeにフィードするためです。

$ sudo -s
# wget https://adsbexchange.com/feed.sh
# bash feed.sh

feed.shは、スクリプトの最初に #!/bin/bash が指定されているため、通常は chmod +x feed.sh を実行してスクリプトに実行権限を付与し、その後 ./feed.sh として実行する方法もあります。しかし、システムによっては、bash のPathが /usr/bin/bash やそれ以外の場所にある場合があるため、確実に実行するには bash feed.sh と入力して実行する方が安全です。この方法であれば、スクリプトの編集や実行属性の付与を行う必要がなく、シンプルに操作できます。

幾つか質問されます。

ADS-B Exchangeにフィードする 1
セットアップ中に「セットアップを行いますか?」と尋ねられる場面では、[Tab]キーを使用して「Yes」を選択し、[Enter]キーを押して進めます。この選択肢によって、必要な設定が自動的に行われます。

ADS-B Exchangeにフィードする 2
ADS-B Exchangeでは、特にMode S MLAT (マルチラテレーション)が重要視されています。MLATは複数の受信機からのデータを基に航空機の位置を高精度で特定する技術で、これが有効なフィーダーは、MLATマップ上に表示されます(後述)。セットアップ中には、フィーダーの登録地点やフィーダー名を指定するステップがあり、このフィーダー名を入力する必要があります。名前の付け方は自由で、英数字やハイフンなどを使用できますが、MLATマップは多くの人々が閲覧できる可能性があるため、個人や設置場所が特定されるような名前は避けるのが賢明です。また、「0」を入力すればMLAT機能を無効にすることができます。

ADS-B Exchangeにフィードする 3
フィーダーの正確な設置場所を登録するためには、アンテナの位置に対応する座標を入力する必要があります。緯度に関しては、北半球の場合は通常の数字を、小数点以下5桁以上で入力します(例:35.685379)。南半球の場合は負の数を使用します。座標はGoogleマップや国土地理院の地図などで簡単に調べることができます。特に国土地理院の地図では、アンテナを設置したい場所に地図の中央の「+」マークを合わせると、その地点の緯度と経度がURL欄に表示されます。また、地図の左下には標高(海抜)が表示されるので、アンテナの設置高度を足した値を入力します。
正確な座標を入力することは非常に重要です。もし誤って、あるいはわざと不正確な座標を入力した場合、MLATでのデータ整合性に問題が生じ、信頼されないフィーダーとして除外される可能性があります。このため、アンテナの位置を正確に把握し、確実なデータを提供することが求められます。

ADS-B Exchangeにフィードする 4
アンテナ設置場所の経度を入力します。東経の場合はそのまま数字を、西経の場合はマイナスの数字を入力してください。小数点以下の精度は高く、少なくとも5桁以上が必要です。例えば、東京(皇居)の経度を入力する場合は「139.753368」となります。

ADS-B Exchangeにフィードする 5
アンテナの設置高を入力します。この数値はアンテナ設置場所の標高と、地上からのアンテナの高さを足したものです。例えば、国土地理院の地図を使ってアンテナ設置場所の標高を調べ、その標高にアンテナが設置される地面からの高さを足した数値を計算してください。メートル単位で入力する場合、数値の後に「m」を付けます。例えば、標高100メートルの場所に地上から23メートルの位置にアンテナを設置した場合は「123m」と入力します。

ADS-B Exchangeにフィードする 6
自動設定やサービスの有効化に進みます。この時点で、ADS-B Exchangeへのフィード開始の許可を求められます。もしエラーが発生していなければ、常識的には[Tab]キーで「Yes」を選択し、[Enter]キーを押して進めてください。このインストーラーは非常によく作られており、特にDebianやUbuntu系のディストリビューションを使っている場合、エラーが発生することはほとんどないでしょう。これまでの設定が正しく行われていれば、スムーズに進行します。

ADS-B Exchangeにフィードする 7
設定が始まると、黒い画面に文字がズラズラと表示され、インストールが自動的に進みます。この間、dump-1090-faから情報を取得する設定も自動で行われます。設定ファイルを後から変更することも可能なので、細かな調整が必要な場合は後で修正できます。
インストールが正常に完了すると、ADS-B Exchange用のサービスが自動で有効化され、フィードの送信が始まります。この段階でフィードが正常に行われているかを確認するためのウェブURLが表示されます。

このURLは、ADS-B Exchange側がフィードを受信し、データを処理してからでないとアクセスできません。通常、フィードが開始されてから約5分後に確認ページを開くことが推奨されています。フィードが始まってすぐに確認ページを開いても表示されない可能性があるので、少し待ってから確認しましょう。

確認時には、フィーダーとして使用しているPCやSBCと、確認用のブラウザを使用しているPCやスマートフォンが、同じグローバルIPアドレスを持っていることが重要です。もしフィーダーと確認端末が同じ家庭内のLANなどに接続されている場合、特に意識する必要はありません。ただし、スマートフォンで確認する場合は、必ずフィーダーと同じLANにWi-Fi接続されているかを確認してください。スマートフォンがモバイル通信に切り替わっている場合は確認ができないため、注意が必要です。

ADS-B Exchangeにフィードする 8
こちらのリンクにアクセスしました。このページでは、フィードの状態を確認することができます。もしフィードが開始されていなかったり、正常にフィードができていない場合は、画面に(赤色の困り顔アイコン)が表示されます。この表示がある場合は、何らかの原因でフィードが正しく機能していないことを意味しています。

ADS-B Exchangeにフィードする 9
フィードが正常に動作している場合は、(緑色のニコちゃんアイコン)が表示されます。また、MLATを無効にしている場合、たとえばMLATフィーダー名の欄に「0」を入力してMLATを無効化した場合には、MLAT connectionの欄にも赤い困り顔が表示されることになります。このように、アイコンによって現在のフィードの状態を一目で確認することができるのです。

ADS-B Exchangeにフィードする 10
https://adsbx.org/sync を表示しました。Interactive MLAT server mapという小さな世界地図をクリックします。

ADS-B Exchangeにフィードする 11
最初に表示される画面はおそらく世界地図が広がっている状態でしょう。この地図の表示位置を日本に移動し、拡大して自分のフィーダーの設置場所付近を表示します。フィーダーのマークにポインタを合わせると、MLATフィーダー名が表示されるため、自身のフィーダーを探が表示されることを確認します。
ただし、初めてこれを見たときに「自分のフィーダーの位置がバレてしまうのでは?」と不安に思うかもしれません。しかし、実際にはフィーダーの座標は小数点2桁に丸められており、地図上の表示も現実の設置場所から数キロメートルずれている場合がほとんどです。したがって、プライバシーの観点からも安心してよいでしょう。ただし、座標がキリの良い数値に近い場合は、町村単位で位置が判別されることもあるかもしれません。また、自宅が周囲にほとんど建物のない場所にある場合(つまり、ポツンと一軒家の場合)、多少の位置バレのリスクを考慮する必要があります。

自身のフィーダーをクリックすると、画面の左側にフィーダーの詳細情報が表示されます。さらに、MLATが有効になっている場合、他のフィーダーと緑色の線で繋がる様子が見られます。この線は、MLATで連携しているフィーダー同士がどのように協力しているかを視覚的に示しており、一定の距離を置いたフィーダー同士が三角形の形で繋がるのが一般的です。場合によっては、2つ以上のフィーダーと連携し、より複雑なネットワークを形成することもあります。ただし、フィーダーに入力した座標や標高が不正確であったり、フィーダーの時刻がずれている場合、MLATの連携がうまくいかないことがあります。このような場合、MLATを有効にしていても、他のフィーダーと線が繋がらず、MLATの実績がほとんど増えない、あるいはゼロのままであることが考えられます。MLATを正確に動作させるためには、NTPの設定が非常に重要です。可能であればGPSモジュールを使用して、数ミリ秒単位以下の精度を持つNTPサーバーと時刻同期して運用することが推奨されます。

ADS-B Exchangeにフィードする 12
左側に表示されているフィーダー情報の中には「Sync stats」というリンクもあります。このリンクをクリックすると、MLATで連携している他のフィーダーとの同期カウントやエラー状況を確認できる画面が表示されます。この画面は短い時間間隔で自動的に更新され、同期中のピア(他のフィーダー)の情報が変わる様子をリアルタイムで見ることができます。特に、空港でタクシー中、離発着中、あるいは飛行中の航空機が少ない時間帯やMLATの設定がうまくいっていない場合、ピアの数が0だったり、非常に少ないこともあるでしょう。また、MLATを有効にしても、自身のフィーダーの近く(半径数百km以内)にMLAT対応のフィーダーが少ないと、うまく連携できないことがあります。この点も考慮に入れて設定を確認する必要があります。

ADS-B Exchangeは、FlightAwareやFlightradar24と異なり、公式サイトでのアカウント取得やログインが不要です。これは、フィーダーとしては手軽であることを示しています。
その他のツールや機能については、GitHubのADSBexchange.comリポジトリにいくつかのプロジェクトが公開されているようです。興味のある方はチェックしてみてください。(まだ試していませんが、興味深いツールが揃っています。)

関連記事:

AndroidスマートフォンでADS-B受信

管制
©いらすとや.

ADS-B受信機については、「PCにRTL-SDRドングルを接続する」「SBC(シングルボードコンピュータ)にRTL-SDRドングルを接続する」ということは既に行っていますが、「スマートフォンにRTL-SDRドングルを接続する」という方法はまだ試していませんでした。そこで今回は、AndroidスマートフォンにRTL-SDRドングルを接続して、どのようにADS-B信号を受信できるかを実験してみました。iPhoneについては、所有していないことや、USB端子が無いことからRTL-SDRレシーバーを接続できないため、今回はAndroidデバイスに限定して実施しています。

Android用のRTL-SDR関連アプリはいくつか存在するようですが、今回はAndroid用の「dump1090」というアプリを試してみました。dump1090はADS-B信号をデコードする人気のツールで、多くの利用者がいます。ただし、Android版のdump1090は単体では動作しないため、別途「SDR Driver」というアプリもインストールする必要がありました。これはRTL-SDRドングルの制御をスマートフォン上で可能にするためのアプリです。

AndroidスマホでADS-B受信 1
https://play.google.com/store/apps/details?id=marto.rtl_tcp_andro
SDR driver

AndroidスマホでADS-B受信 2
https://play.google.com/store/apps/details?id=eu.ebctech.dump1090
Dump1090

AndroidスマホでADS-B受信 3
スマートフォンのUSB端子にRTL-SDRドングル型レシーバーを接続しました。この時、スマートフォンのUSB-C端子とRTL-SDRドングルのUSB-A端子を変換するために、USB-CとUSB-Aの変換アダプタを使用しています。ドングルには以前購入した「粗悪なRTL-SDRレシーバー」に付属していたロッドアンテナを接続しました。このアンテナは手元にあったので使いましたが、ADS-B信号の受信には専用のアンテナを使用する方がより良い結果が得られるかもしれません。

短いロッドアンテナとはいえ金属製なので重量はあります。ドングル自体もメタルケースに収められていて少々重いので、スマートフォンを持ち上げて動かすとUSB端子部分にかなりの負荷がかかります。長期間の使用や頻繁な接続・取り外しを繰り返す場合は、USBポートが壊れないように注意が必要です。

AndroidスマホでADS-B受信 3a
ロッドアンテナの長さは伸縮可能で、使用する周波数に合わせて調整が可能です。今回は、ADS-B信号の1090MHzに合わせてアンテナを調整しました。具体的には、ロッドアンテナの2段目を最大限に伸ばし、それ以外の部分を完全に縮めることで、ちょうど1090MHzに最適な長さになりました。使うたびに微妙な長さ調整が必要ないため、この点は非常に便利です。このアンテナの長さは、最も短い状態で約110mm、2段目を最大に伸ばした状態で約185mmです。1090MHzの波長(λ)は275mmなので、185mmのアンテナはおよそ2/3λの長さとなります。

AndroidスマホでADS-B受信 3b
しかし、アンテナの長さが1090MHzに合っているとはいえ、SWR(スタンディングウェーブ比)は1.57程度であり、理想的とは言えません。スミスチャートの表示では、中央から大きく外れた場所にプロットされており、50Ωや75Ωといった理想的なインピーダンスには届かず、30〜40Ω程度の値となっています。

AndroidスマホでADS-B受信 4
以前に購入したAliExpressで購入したPCBパイプ入りのアンテナを試してみました。

AndroidスマホでADS-B受信 4
このアンテナはよりコンパクトで、特性としては良好です。ただし、PCBアンテナを手で持つ状態で使用したため、最適な性能を発揮できていません。それでも、SWRの谷の中央は1090MHzに一致しており、SWR値も1.22と、先ほどのロッドアンテナよりも良い結果が得られました。なお、NanoVNA-QTの表示にはバグがあり、左下に「1425MHz」と表示されていますが、実際には1090MHz付近を示しています。

AndroidスマホでADS-B受信 5
RTL-SDRドングルをスマートフォンに接続すると、SDRドライバーが自動的に起動します。この時、アクセス許可が求められるので、「〜を接続したら常にRtl-sdr driverを起動する」にチェックを入れてから、OKを押します。これにより、次回以降の接続時にドライバーが自動で起動し、手動操作の手間が省けます。

AndroidスマホでADS-B受信 6
SDR driveアプリを開き、「ENABLE ADVANCED MODE (FOR DEBUG & STREAM TO PC)」をタップすると、いくつかの詳細設定が表示されます。この画面は主にデバッグやストリーミングに関する設定が含まれていますが、通常の使用では特に気にする必要はありません。

AndroidスマホでADS-B受信 7
Dump1090アプリを起動し、ADS-B信号の受信を開始します。アプリが信号をキャッチすると、航空機の情報がリストに表示されます。リストには、飛行中の航空機の高度や速度、位置などのデータがリアルタイムで表示されます。

AndroidスマホでADS-B受信 8
「がとらぼ」の人の実家は、「風の谷」のような場所にあります。そのため、付属のロッドアンテナを使用すると、航空機からのADS-B信号をある程度受信できるものの、信号が弱く、情報が完全には揃いませんでした。その結果、地図上に航空機の位置が表示されることはありませんでした。手持ちのPCBアンテナを使って10分ほど試してみたところ、最大で2機の航空機が表示されましたが、期待していたよりも結果は芳しくありませんでした。このような谷間や障害物が多い場所では、やはり屋根の上や少しでも高い場所にアンテナを設置する必要があると感じました。
現在FlightAwareのフィーダーで運用しているアンテナを接続すると結果は大きく異なるでしょうが、これはフィード中なので今回は試すことができませんでした。

AndroidスマホでADS-B受信 9
Dump1090にはPC版と同様にネットワークエクスポート機能が搭載されています。これにより、受信したADS-Bデータをネットワーク経由で他のデバイスに送信したり、複数のPCやSBC(シングルボードコンピュータ)からデータを参照することができます。例えば、古いスマートフォンでDump1090を動かし、PCやSBCでフィーダーを構築することも可能です。これにより、手軽にADS-B信号を受信し、データを共有できる環境を作ることができます。

関連記事:
Up