4
2

More than 3 years have passed since last update.

複数のdump1090-faでアンテナとかSDRとか色々比較できる環境をつくる

Last updated at Posted at 2020-08-05

この記事のゴール

  • 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にもフィードされています。

動作画像

以下のような環境で、実験してみました。実験と言うかこれがやりたかったことでした。
image.png
それぞれの SDRでゲインの調整を済ませたところ、以下のようなマップ表示になりました。
アンテナとLNAが共通なので、結果的には差はあまりありませんでした。実は相互補完みたいな状態を期待していましたが、結局は右側の RTL-SDR.blog が完全に優勢でした。ノイズ対策とかが優れているんでしょうかね?
stick_comp.PNG
最後に、しっかり 2つの dump1090-fa が走ってるキャプチャもつけておきます。
image.png

おわりに

ご質問とかありましたら、Twitterの @dsoで呼びかけてください。

4
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2