RaspberryPi
RaspberryPiによるADS-B受信機
 航空機からの、現在位置、高度、速度などの情報を受信するシステム、ADS-B受信機を、SDR(Software Defined Radio)技術を用い実現しました。2015年から運用し、航空機の現在位置をフライト追跡サイトFlightradar24(FR24)に情報提供(フィード)してきました。この間、ADS-Bはすっかり定着し、FR24は一般的になりました。

この度あちこち不具合が出始めたため、全面的にリニューアルを行いました。
アンテナ → USB受信スティック → RasberryPi → デコードソフト → フィーダーソフト
の基本構成は変わりません。
1.手製のグランドプレーンアンテナが、強風で痛んできました。
2.汎用のUSB受信スティック(テレビチューナー用 RTL2832U+R820T)を用いていましたが、ADS-B専用のUSB受信スティックが販売されていますので、試してみたい。
3.デコーダソフトにModesdeco2を使っていましたが、ロシア製だったようで、時々ストールをおこすようになり、また更新されていません。あたらしいオープンソフトが開発されています。
4.フライト追跡サイトはFR24のみでしたが、ADSBexchangeAirNav RadarBoxにもフィードできるようにしたい。

従来版はこちらにあります。

今回、フライト追跡サイトはADSBexchangeをメインとしました。理由は
1.ADSBexchange は、特定の航空機をブロックしない。FR24では軍・政府・その他個人などの航空機は表示されないが、政府専用機や近くの横田基地に飛来する軍用機も監視したい時がある。
2.ADSBexchange は受信状況の統計データがグラフで表示され、またCPU使用率、CPU温度、Disk使用状態、ネットワーク利用率などを詳しく見ることが可能になる
ただし、ADSBexchange は、カバー範囲が広くなく、他のサイトも併用することとします。

一連の改良で、よい結果が得られました。とくに採用したUSB受信スティック RadarBoxのADS-BFlightStickの性能は素晴らしいものです。      (2024/02/28)

全体構成は下のとおりで、アンテナとUSB受信スティックと2台のRasberryPi #1 #2 を用います。

今まで手作りの グランド・プレーンアンテナを使っていました。簡単な割には悪くありませんでしたが、強風や太陽光で大分傷んできました。今回は垂直ダイポール用のPCB基板が安価に手に入りましたので、あらたに作成しました。(アンテナの基礎から応用まで参考
グランド・プレーンアンテナ 2024/01/30まで 気象観測用のポールの先端に設置。

    
垂直ダイポールアンテナ 2024/01/31より 
地上高約7m 海抜101m


垂直ダイポールアンテナは2つの1/4波長の放射素子の間が給電点で、自作は少々難しい。1090MHz用のアンテナPCB基板(中華製)がAmazonなどで安価に売られています。なにかの製品の保守用部品のようです。米国のフォーラムでも話題になっていますので、試してみることにしました。
むき出しというわけにいかず、塩ビパイプに入れます。VP20塩ビ管の内径が20mmですので、何の支えもなく丁度おさまり、簡単に自作することができます。コネクター部分のハンダが不十分との書き込みがありましたので、必ずワットの大きなコテでハンダ強化しておきます。
50ΩのSMAコネクター付きの同軸ケーブルで、軒下のUSB受信スティックに引き込みます。

ADS-B アンテナ1090Mhz 基板
周波数帯:1090 MHz
サイズ:20mm×170mm
インピーダンス:50Ω
コネクタ:SMAメス

Amazon 840円
水道用塩ビ管 VP20 外径26mm 内径20mm 
モノタロウ  0.25M パイプ 199円 TSキャップ 20 31円

以前は広帯域のUSBドングル(テレビチューナー用に開発されたもの RTL2832U+R820T)を用いていましたが、ADS-B専用のUSB受信スティックを今回使用します。 ADS-Bは1090Mhzで、他のバンドは不要でノイズとなります。他のバンドをカットし、増幅するADS-B SAWフィルタプリアンプが販売されています。給電がめんどうなので、これと同じものを内蔵したUSB受信スティックが見つかりましたので、使ってみました。RadarBoxのADS-BFlightStickです。日本のアマゾンでも購入できますが、RadarBoxの直販サイトから購入しました。

プラスチックのケースは簡単に開きます。SAWフィルターとLNAアンプが追加されているのがわかります。
コネクタはSMAメス 50Ω
RadarBoxの直販サイト
送料込み 7100円

@ SAWフィルター 1.09Ghz
A LNA 504
B Rafael R820T2
C REALTEK RTL2832U
裏側には放熱用の穴

回路が立派な割にケースが貧弱で、BとCのLSIの発熱に対する放熱が心配です。アルミのケースにいれ放熱に対処します。
USB受信スティックの裏側にヒートシンクを貼り付けます。
USB受信スティックをアルミケースににいれます。その際、上のヒートシンクをアルミケースにヒートシンクサーマルテープで貼り付けます。
アンテナ側のSMAコネクタはSMA-01L L型変換ケーブルで、ケースの外に取り出します。
千石電商 390円
軒先に取り付けます。左はRaspberryPiに伸びるUSBケーブル。右はアンテナへの同軸ケーブル。
SMAオスコネクター付きRG58A 3m 千石電商 1750円
ここにカバーをかぶせます

adsbexchange-feedをインストール
今回はADSBexchangeをメインとし、他へのフィードはここからのポート出力を用います。
ADS-B受信のためのソフトは、adsbexchange-feed で、複数の開発者によるオープンソフトを組み合わせて構成します。たとえば、readsb (Mode-S/ADS-B/TIS デコーダー)、tar1090 ( Web インターフェイス)、Grafana (データベースの分析および監視)、mlat-client (マルチラテレーションによって送信機の位置計算)、adsbexchange-stats (フィーダー データの追跡)、zero-tier-one (ピアツーピア ネットワーク)などです。
これらのソフトを個別にダウンロード、インストールする方法はとても我々には無理で、組み合わされた完成した、OS込みのカスタムイメージファイルが準備されています。インストール方法の原文は、こちらにあります。

#1のRasberryPiにインストールすることとしました。

1.RasberryPiは
Raspberry Pi 3
Raspberry Pi 4
Raspberry Pi Zero 2 W
のいずれかを準備します。Wifiが内蔵されたモデルでないといけません。Raspberry Pi 2 に外付けWiFiを付けてやってみましたが、うまくいきませんでした。手元にあったRaspberry Pi 3モデルA+を使いました。

2.8GBのSDカードをフォーマットする。

3.WindowsマシンでRaspberry Pi Imagerを使えるように準備する。

4.adsbexchange-feed のイメージファイルをWindowsマシンにダウンロード
(最新のイメージファイルはこちら

5.zipファイルをWindowsマシンで解凍

6.Windowsマシン上で、Raspberry Pi ImagerでSDカードに書き込み
Raspberry Pi Imagerを起動し下にスクロールすると図のように最も下段の Use custom とういうのがあります。これをつかいます。解凍したimgファイルを指定します。

Raspberry Pi Imagerの画面
7.イメージファイルの入ったSD カードをRaspberry Pi に挿入し、起動できるようにします。最初の起動時に、イメージファイルファイルが SD カード全体に拡張されます。SD カードのサイズによっては、これに最大 5 分かかる場合があります。このプロセスを中断しないでください。

8.これから先はポイントポイント通信という、少々特殊なことを行います。この状態ではRsapberrPiはまだWiFiネットワークには接続されていませんが、WiFiのアクセスポイントになっています。有線LANのデスクトップではだめで、WiFiが使えるラップトップコンピュータあるいはスマホを用意します(以下ラップトップと表記)。
ラップトップのWiFiネットワーク設定で ADSBx-config という 名称のWiFi ネットワークが表示されるはずです。これがRasberryPiです。ADSBx-config は、セキュリティ上の理由から、起動後 15 分間のみ存在します。その後もネットワーク接続がない場合は、シャットダウンされます。(RsapberrPi の電源を入れ直すと再アクティブ化されます。)

9.ラップトップから ADSBx-config という名前のワイヤレス ネットワークに接続したら、Web ブラウザを使用して http://www.adsbexchange.local を開きます。下のような設定ページが開きます。
ここで Configure WiFi をクリックし、正規のネットワークを選択し、WiFiパスワードを入力します。ラップトップの利用はここまで。
RasberryPiを再起動し、設定された 本来のWi-Fi に接続します。

10.設定が正しいと、RasberryPi は WiFi に接続します。
Windowsマシンから http://www.adsbexchange.local にアクセスして、先ほどと同じ設定ページが開きますのでそのほかの設定を行います。

Cobfigure Receiver/Location を選択して、GPS 位置およびその他のフィーダー パラメータを設定します。設定項目は次のとおりです。
緯度経度、海抜、フィーダー名、MLATやるか、1090やるか、ゲイン設定、自動ゲイン調整をやるか、978やるか、ADSBexchangeのスタッフのリモートアクセスを許可するか
グラフを使うかなどです。
:緯度/経度座標と平均海面 高度を確認するには、設定ページにリンクされているサイト https://www.freemaptools.com/elevation-finder.htm を使用できます。Save & restart services をクリックします。

Assign SDRs to service SDRが1台の時は設定不要

Change password / Update / Reboot このサイトのパスワードを変更 初期値はadsb123 。RasberryPiのPiアカウントのパスワードにも適用

System Info  Feeder Name Local IPアドレス WiFi Status 各種ログファイルなどが表示されます

1090 map (default) 現在の自分中心の地図が表示されます

978 map (if enabled, US only) 米国では1090Mhz以外に978Mhzも使われており、日本では無関係

8 hours of tracks 過去 8 時間のトレースを表示し、カバレッジ/範囲を視覚的にわかりやすく表示します

graphs1090 フィーダの状況が最小2時間から最大10年までグラフで詳しく表示されます。CPU使用率、CPU温度、Disk使用状態、ネットワーク利用率なども表示されます

ADSBexchange Status フィードが正しく行われているか表示されます

Change Timezone 日本標準時を指定

ここでMLATについて、ご注意。
ADS-Bをサポートしていない航空機に対して、マルチラテレーション (MLAT) と呼ばれる方法で航空機の位置を推定します。これは、1 つの航空機のモード S 情報を多数の受信機が受信した場合、これらの受信機が同期したクロックを備えていれば、三角測量によって航空機の位置を推定するものです。個々の受信機は、航空機からメッセージを受信した時刻と受信機の正確な位置が前提となります。FR24の場合、旅客機がほとんどADS-Bを備えているのに対し、ADSBexchangeでは、軍用機、小型機も表示するため、MLATを重要視しています。ほかの方へ迷惑がかかるため、設定は正しく行われなければなりません。

コマンドラインによる設定の続き

インストール時に SSH が有効になった状態でになっていますので、WindowsマシンからSSHクライアントソフトPuttyなどで、コマンドラインによる設定を続けます。
ログインするには、アカウント名「pi」と上記変更されたパスワードを使用します 。
OSののバージョンを 
$ cat /etc/debian_version
 で確認します。
11.4
でした。

IPアドレスの固定
自動でIPアドレスが割り振られていますが、ほかのコンピュータから参照するために、固定にしておいた方がいい。
$ sudo nano /etc/dhcpcd.conf
により、dhcpcd.conf ファイルを編集し固定IPアドレスにします。
設定ファイルの末尾に、以下を追加します
interface wlan0
static ip_address=192.168.1.xx/24
static routers=192.168.1.x
static domain_name_servers=192.168.1.x


コマンドラインから adsbxfeeder コマンドを使い詳細設定ができますが、設定ページで十分で使ったことがありません。ヘルプだけ示します。
$ adsbxfeeder --help

いよいよ始動します。アンテナをつないだUSB受信スティックをUSBに接続し、RasberryPiを始動します。自動で起動し、フィードが開始されます。
1 時間データを送信した後、設定ページの1090 map (default) をクリックすると、下のように地図上にこちらからフィードした航空機が表示されるはずです。

またADSBexchange Statusをクリックすると正しくフィードが行われていることが確認できます。
Thanks for feeding! Please enjoy an Ad-free version of the ADS-B Exchange global map
ADS-B Exchange のマップにPremium 会員として無料で広告なしでアクセスできるようになりました。



新たに導入した、アンテナ、USB受信スティックの能力はどうでしょうか。上に述べたように ADSBexchange では、graphs1090により、各種統計データがグラフ表示されます。


新しく導入したUSB受信スティックや、アンテナの効果をgraphs1090により、前後比較します。かなり性能が改善されたことがわかります。
@ 2024.1.27 にRadarBoxのSDRスティックに交換   A 2024.1.31に垂直ダイポールアンテナに交換

捉えた航空機の数
最も遠い航空機
単位 nautical mile = 1852 m



上記、adsbexchange-feed からネットワークに出力されるBEASTデータをもちい、RadaBoxにフィードします。BEASTバイナリ形式は、ネットワーク上でADS-B データを送信するための事実上の標準の一つで、ほとんどのフィーダーアプリケーションが使用する形式です。通常TCP サーバーのポート 30005 で出力します。
ここではLAN接続された#2のRaspberryPi(アドレスは192.168.1.yy)に、RadaBoxにフィードするプログラム rbfeeder をインストールすることとします。原文はこちらにあります。

RaspberryPiのPuttyにより、コマンドラインでつぎのとおり操作します。
1.まず、rbfeederをインストールする必要があります。
$ sudo bash -c "$(wget -O - http://apt.rb24.com/inst_rbfeeder.sh)"
何も操作しなくともインストールが進みますが、最後に「dump978-rb をインストールするか」と聞かれますので、と答えます。

2.シェアリングキー発行
$ sudo systemctl restart rbfeeder で仮に動かします。RadaBoxのサイトに接続され、シェアリングキーが発行されます。

3. シェアリングキー発確認
$ sudo rbfeeder --showkey シェアリングキーが表示されます。

4.次に設定ファイルを編集します。
$ sudo nano /etc/rbfeeder.ini
[client]
network_mode=true #データをネットワークから受信するので true
log_file=/var/log/rbfeeder.log
key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx #32桁のシェアリングキーが表示されます。

sn=EXTRPIxxxxxx #シリアルナンバーが表示されます。

[network]
mode=beast
external_port=30005
external_host=192.168.1.xx #adsbexchange-feedが動いているRaspberryPiのアドレス

[mlat]
autostart_mlat=true #MLATに参加します
#mlat_cmd=/usr/bin/python3.9 /usr/bin/mlat-client

[dump978]
#dump978_enabled=true #こちらは使わない

ここでシェリングキーをコピーしておきます。

5.つぎに、ブラウザから
https://www.radarbox.com/raspberry-pi/claim

にアクセスし、シェリングキーをペーストし、CLAIM! ボタンをクリック。
うまくいくと
*Success. Raspberry Pi already associated with this account. See your station at
https://www.radarbox.com/stations/EXTRPIxxxxxx

と表示されます。これをクリックします。

6.自分のページが開かれます。左上に
Click here to edit your location
があるはずですので、クリックします。位置を入力する小ウインドが開かれますので、正確に入力します。
PREVIEW ボタンをクリックすると、Google地図があらわれ、修正することができます。
標高、アンテナ高も、MLATのために重要です。

7.コマンドラインから、再度
$ sudo nano /etc/rbfeeder.ini
により、緯度経度、標高がが正しく入力されたかどうか、確認します。

$ sudo systemctl restart rbfeeder
により、フィードが開始されます。
https://www.radarbox.com/stations/EXTRPIxxxxxx
で確認します。

下に示すように、カラフルな表示が得られます。

よく使うコマンド
$ sudo systemctl start rbfeeder フィード開始
$ sudo systemctl stop rbfeeder フィード停止
$ sudo systemctl restart rbfeeder フィード再開
$ sudo systemctl status rbfeeder フィード状況を調べる
$ sudo nano /etc/rbfeeder.ini 設定ファイル編集

 最も有名なFlightradar24へフィードします。
#2のRaspberryPiからつぎのコマンドを実行し、fr24feedをインストールします。
$ sudo bash -c "$(wget -O - https://repo-feed.flightradar24.com/install_fr24_rpi.sh)"

このコンピュータですでに fr24feed が動いているならば、停止しておく
$ sudo systemctl stop fr24feed

次のコマンドで設定していく
$ fr24feed --signup
(一部省略 すでにシェアリングキーを持っている場合の例)


Welcome to the FR24 Decoder/Feeder sign up wizard!

Before you continue please make sure that:

1 - Your ADS-B receiver is connected to this computer or is accessible over network
2 - You know your antenna's latitude/longitude up to 4 decimal points and the altitude in feet
3 - You have a working email address that will be used to contact you
4 - fr24feed service is stopped. If not, please run: sudo systemctl stop fr24feed

To terminate - press Ctrl+C at any point ( Ctrl+C で途中放棄できる)


Step 1.1 - Enter your email address (username@domain.tld)
$username@domain.tld (自分のアドレス)

Step 1.2 - If you used to feed FR24 with ADS-B data before enter your sharing key.
If you don't remember your sharing key, pelase use the retrival form:
https://feed.flightradar24.com/forgotten_key.php

Otherwise leave this field empty and continue.
$:シェアリングキー (すでにシェアリングキーを持っている場合)

Verifying sharing key...OK



Step 1.3 - Would you like to participate in MLAT calculations? (yes/no)$:yes

IMPORTANT: For MLAT calculations the antenna's location should be entered very precise!

Step 3.A - Enter antenna's latitude (DD.DDDD)
$:北緯

Step 3.B - Enter antenna's longitude (DDD.DDDD)
$:東経

Step 3.C - Enter antenna's altitude above the sea level (in feet)
$:海抜

Using latitude: DD.DDDD, longitude: DDD.DDDD, altitude: xxxft above sea level

Step 4.1 - Receiver selection (in order to run MLAT please use DVB-T stick with dump1090 utility bundled with fr24feed):

1 - DVBT Stick (USB)
-----------------------------------------------------
2 - SBS1/SBS1er (USB/Network)
3 - SBS3 (USB/Network)
4 - ModeS Beast (USB/Network) (今回はこれ
5 - AVR Compatible (DVBT over network, etc)
6 - microADSB (USB/Network)
7 - SBSx via Basestation (localhost:30006)


Enter your receiver type (1-7)$:4

Step 4.2 - Please select connection type:

1 - Network connection
2 - USB directly to this computer

Enter your connection type (1-2)$:1

Step 4.3A - Please enter your receiver's IP address/hostname
$:192.168.1.xx (#1RasberryPiのアドレス)

Step 4.3B - Please enter your receiver's data port number
$:30005 (Beastのポート番号)

Step 5.1 - Would you like to enable RAW data feed on port 30334 (yes/no)$:no

Step 5.2 - Would you like to enable Basestation data feed on port 30003 (yes/no)$:no

Step 6A - Please select desired logfile mode:
0 - Disabled
1 - 48 hour, 24h rotation
2 - 72 hour, 24h rotation
Select logfile mode (0-2)$:1

Step 6B - Please enter desired logfile path (/var/log/fr24feed):
$:

Submitting form data...OK

Congratulations! You are now registered and ready to share ADS-D data with Flightradar24.
+ Your radar id is T-RJTY44, please include it in all email communication with us.
+ Please make sure to start sharing data within one month from now as otherwise your ID/KEY will be deleted.

Thank you for supporting Flightradar24! We hope that you will enjoy our Premium services that will be available to you when you become an active feeder.

To start sending data now please execute:
sudo systemctl start fr24feed

Saving settings to /etc/fr24feed.ini...OK
Settings saved, please run "sudo systemctl restart fr24feed" to use new configuration.

adsbexchange-feed のBeast出力を、fr24feedに食わせるため、Step4では「4 - ModeS Beast 」 を選択し、adsbexchange-feed の動いているRaspberryPiのIPアドレス192.168.1.xx、ポート番号30005を入力しています。

フィードを開始するには
$ sudo systemctl start fr24feed

RaspberryPiをスタートさせると、常にfr24feedは動いています。
$ sudo service fr24feed status
により、Active: active (running)が表示されれば、正常にフィードされています。
さらに
$ fr24feed --status で動作状態を表示できます。

また、LAN接続されたほかのPCのブラウザからは次のアドレスで、状態を見ることができます。
http://192.168.1.yy:8754

設定ファイルは/etc/fr24feed.iniにあります。

fr24feedを停止させる場合は
sudo systemctl stop fr24feed


そのほかのよく使うコマンド
fr24feed --help ヘルプ
fr24feed --fr24key=0123456789ABCDEF 手動でフィード開始
fr24feed --signup サインアップと構成
fr24feed --reconfigure
構成変更
fr24feed --version version 番号



top