この記事のゴール
- RPi 一個で、実験比較用に複数の RTL-SDRやアンテナを接続できるようにします。
- 複数のドングルと、複数の dump1090-faが動くようにします。
- 追加した dump1090-faの結果はフィードされず、何処にもつながりません、dump1090-fa に付属の Web画面で比較できるところまでが、この記事の範囲です。
キッカケ
最近ではいくつかの正規品から、お値段はお得なちょっと怪しい品まで、多数の SDRが出回っています。アンテナも自作したりして既にいくつかお持ちかと。
飛行機の位置は、絶対同じ場所や状態を再現できないので、色んな設定を変えても比較がむずかしいですね。
これを解決するには、同じ環境かつ同時刻での比較というのが正解だとおもってます。
全てのセットを2個準備すればいいんですよ。
RPiも必要数分を買い込んで・・で準備すれば、ハイもちろんそれは正解です。
しかし、そこそこ高価なものですし、テストが終わったら稼働しなくなってしまいます。ADSBで使われている RPiは稼働率が高くてみんな幸せです。不幸な RPiを増やさないようにしたいです。
RTL-SDRを複数挿す
RTL-SDR(USBドングル) の複数挿しには少し工夫が必要です。フィーダーのセットでは、1個が原則なので、複数挿しは考慮されていません。
rtl_test コマンドで、SDRがどのように見えているか確認します。
一番左の数字が Device Indexです。一番右側の 8桁が Serial Number。
$ rtl_test
Found 3 device(s):
0: Realtek, RTL2832U, SN: 00001000
1: Realtek, RTL2832U, SN: 00001001
2: Realtek, RTL2838UHIDIR, SN: 00000001
dump1090-faの設定ファイルでは、RTL-SDRを指名できます。--device-index を探す炉初期値が0 になっています。これを上述のコマンドで確認した Device Indexに変更するのが基本です。
$ sudo nano /etc/default/dump1090-fa
:
RECEIVER_OPTIONS="... --device-index 0 ..."
:
しかしこの方法だと USBの挿す位置を変えたりすると順番がかわります。また OSはこの順番を保証しないと明言しています。別の指定方法は Serial Numberを使うものです。なんと、--device-index に 8桁の数字を指定した場合、それは Serial Numberという意味となる不思議な仕様です。
$ sudo nano /etc/default/dump1090-fa
:
RECEIVER_OPTIONS="... --device-index 00000001 ..."
:
ところで、Serial Number と言っても、実はユニークな番号になっているわけではなく Serial Number (SN) の初期値はこうなっています。
SDR | Serial Number |
---|---|
FA (blue) | 00001090 |
FA (orange) | 00001000 |
RTL-SDR.blog v3 | 00000001 |
RadarBox 978 | 00000001 |
お気づきとは思いますが、同じ種類のドングルは同じ番号になってしまうので、結局区別ができません。 | |
rtl_eeprom というコマンドでドングルの Serial Numberを書き換えることができます。ドングルの中身を書き換えるので慎重に行ってください。一つだけ挿した状態で行うのをお勧めします。 |
$ rtl_eeprom -s 00000002
途中で本当に書き換えるのか確認が入ります。実行後に 抜き差ししないと rtl_test の結果には反映されないみたいです。私自身も少し困惑しましたが、指示通り抜き差しすると確かに書き換わっていました。
RPi一個で複数の dump1090を動かす
dump1090 は最も高性能と言われる dump1090-faを使います。dump1090-faは、一番メンテされているコードで、かつソースも公開されていますので、まだまだこれから進化するでしょう。これは使わないとダメですね。
複数動かす場合、それらを同じ設定で動かすのは意味がありません。複数の系統のそれぞれで最高の設定を追求したいものです。ということで
- SN:00001090 と SN:00000001 のドングルをつかう
- 設定ファイルは分けたい
- Web表示も別々に見たい
という要求になります。
それでは、まず既存の設定(/etc/default/dump1090-fa)をコピーします。そして、3000x というポートアドレスを、別の数字に変更します。私は 3000x を 3300x としました。--device-indexもドングルのSNに合わせておきます。
$ sudo cp /etc/default/dump1090-fa /etc/default/dump1090-fa2
$ sudo nano /etc/default/dump1090-fa2
:
NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1300 --net-ro-interval 0.2 --net-ri-port 0 --net-ro-port 33002 --net-sbs-port 33003 --net-bi-port 33004,33104 --net-bo-port 33005"
:
RECEIVER_OPTIONS=".... --device-index 00000001 ...."
:
$ sudo nano /etc/default/dump1090-fa
:
RECEIVER_OPTIONS=".... --device-index 00001090 ...."
:
つぎに、起動スクリプトを複製します。/etc/default/dump1090-fa という記述が3か所あるので、全て /etc/default/dump1090-fa2 に書き換えます。
$ sudo cp -p /usr/share/dump1090-fa/start-dump1090-fa /usr/share/dump1090-fa/start-dump1090-fa2
$ sudo nano /usr/share/dump1090-fa/start-dump1090-fa2
:
if [ -f /etc/default/dump1090-fa2 ]
then
. /etc/default/dump1090-fa2
fi
:
つぎに、systemdの設定を複製します。起動スクリプトと JSON、Syslog の3か所を dump1090-fa2に変更します。
$ sudo cp /lib/systemd/system/dump1090-fa.service /lib/systemd/system/dump1090-fa2.service
$ sudo nano /lib/systemd/system/dump1090-fa2.service
:
xecStart=/usr/share/dump1090-fa/start-dump1090-fa2 --write-json %t/dump1090-fa2 --quiet
SyslogIdentifier=dump1090-fa2
:
最後に、webページの設定をします。/usr/share/dump1090-fa 以外の dump1090-fa を -fa2 に書き換えます。また、8080 も 8081などに書き換えておきましょう。
$ sudo cp /etc/lighttpd/conf-available/89-dump1090-fa.conf /etc/lighttpd/conf-available/89-dump1090-fa2.conf
$ sudo nano /etc/lighttpd/conf-available/89-dump1090-fa2.conf
:
alias.url += (
"/dump1090-fa2/data/" => "/run/dump1090-fa2/",
"/dump1090-fa2/" => "/usr/share/dump1090-fa/html/"
)
# redirect the slash-less URL
url.redirect += (
"^/dump1090-fa2$" => "/dump1090-fa2/"
)
# Listen on port 8081 and serve the map there, too.
$SERVER["socket"] == ":8081" {
alias.url += (
"/data/" => "/run/dump1090-fa2/",
"/" => "/usr/share/dump1090-fa/html/"
)
}
# Add CORS header
server.modules += ( "mod_setenv" )
$HTTP["url"] =~ "^/dump1090-fa2/data/.*\.json$" {
:
設定は全ておわりました。次にサーバーの起動関連です。
最初に、dump1090-fa (2) をサービスとして起動します。
$ sudo systemctl daemon-reload
$ sudo systemctl enable dump1090-fa2
$ sudo systemctl start dump1090-fa2
Webも有効にします。
$ sudo lighty-enable-mod dump1090-fa2
$ sudo service lighttpd force-reload
しばらく経てば、http://piaware:8081 (piawareは、RPiのホスト名またはIPアドレス) に飛行機が飛ぶのが見えるようになっているはずです。http://piaware:8080 には既存の SDRが見えていて、FAにもフィードされています。
動作画像
以下のような環境で、実験してみました。実験と言うかこれがやりたかったことでした。
それぞれの SDRでゲインの調整を済ませたところ、以下のようなマップ表示になりました。
アンテナとLNAが共通なので、結果的には差はあまりありませんでした。実は相互補完みたいな状態を期待していましたが、結局は右側の RTL-SDR.blog が完全に優勢でした。ノイズ対策とかが優れているんでしょうかね?
最後に、しっかり 2つの dump1090-fa が走ってるキャプチャもつけておきます。
おわりに
ご質問とかありましたら、Twitterの @dsoで呼びかけてください。