BeagleBone Greenを使ったADS-Bのフィード先を増やしてみた。

坪井です。

前回、Flightradar24にBeagleBone Greenを使ったADS-B受信機で受信した情報を提供するということをしてみました。このとき、ふと思い出したのはFlightAwareです。FlightAwareもFlightradar24と同様に、Webやスマートフォンのアプリを提供しているサービスです。僕はスマートフォンのアプリの使用感がFlightradar24のほうが好みなので、こちらを最初に思い出したのですが、たまにFlightAwareも使わせてもらっているのでした。

f:id:ytsuboi:20200309165735p:plain

そこで、どうせ受信したデータなのだからFlightAwareにもfeedしてみようと思い立ちました。ADS-Bの受信にはRTL-SDR(USB接続のチューナーで使われているRTL2832Uを使ったSDR(Software-defined radio、ソフトウェア無線)の略と思われます)用モードSデコーダであるdump1090が使われています。fr24feedもdump1090で復調をする仕組みになっています。USB接続のチューナーを二つのアプリケーションから同時に使うようにするのは難しそうですが、dump1090の出力を複数のソフトウェアで利用することはそんなに難しく無さそうです。

調べてみると、FlightAwareにfeedするにはPiAwareを使うようです。そしてPiAwareもdump1090を使う仕組みです。いけそうですので、PiAwareのインストール方法を参照してインストールを試みてみました。が、パッケージの依存関係が原因でFlightradar24のfr24feedのようにすんなりとインストールできません。困ったなぁとPiAwareのソースコードを探していると、GithubでPiAwareのレポジトリを見つけました。ビルド方法もreadmeに書いてあります。piaware_builderを使ってDebianのパッケージが作れるようです。さっそくやってみましょう。

PiAwareをBeagleBone Greenにインストール

私がBeagleBone Greenで実行しているDebianは、

$ cat /etc/debian_version 
9.9

で、Debian 9、つまりstretchです。コードネームはググって調べました。余談ですが、ソフトウェアのコードネームを多用するのは普段それを気にしていない人からすると面倒ですよね。私が普段使っているmacOSもCatalinaとかSierraとか、いちいちググらなければいけなくて不便極まりないです。

さて、なぜコードネームを調べたかというと、./sensible-build.sh stretchといった具合にオプションに付けるからです。下記の手順でビルドに必要なパッケージをインストールして、ビルドができました。TclとかPythonとか忙しいですね…

$ git clone https://github.com/flightaware/piaware_builder.git
$ cd piaware_builder/
$ sudo apt-get install build-essential debhelper tcl8.6-dev autoconf python3-dev python3-venv dh-systemd libz-dev
$ sudo apt-get install devscripts
$ ./sensible-build.sh stretch
$ cd package-stretch
$ sudo apt-get install libboost-system-dev libboost-program-options-dev libboost-regex-dev libboost-filesystem-dev
$ dpkg-buildpackage -b
$ cd ..

ビルドを終えると、パッケージ(私が実行した時点では、piaware_3.8.0~bpo9+1_armhf.deb)ができあがっているはずなので、

$ sudo apt-get install tclx8.4 tcllib tcl-tls itcl3
$ sudo dpkg -i piaware_3.8.0~bpo9+1_armhf.deb

としてインストールを行いました。実行に必要なパッケージがまだありました(笑)

インストールを終えた時点で起動まで行われていました。FlightAwareにアカウントを作ってログインをし、PiAwareのページにあったFlightAware.comでPiAwareクライアントを申し込むにアクセスしたところ、BeagleBone Greenと私のマシンが同じグローバルIPアドレスだったからか、PiAwareクライアントを自分のFlightAwareのアカウントとリンクされました。

これでFlightAwareにもフィードできるようになりました。そういえば、lighthttpdを使ってport 8080でPiAwareの受信状況を見たりすることもできるみたいですが、FlightAwareやFlightradar24、fr24feedなどで見ることができるので私は試みていません。

dump1090

さて、今使っているdump1090は、fe24feedをインストールしたときに一緒にインストールされたdump1090-mutabilityというバージョンです。レポジトリのREADME.mdを見ると「メンテしていないので、新規インストール非推奨。」としてdump1090-faが紹介されています。dump1090-faは、FlightAwareがPiAwareプロジェクト用にカスタマイズしているみたいです。せっかくなので、dump1090-mutabilityをdump1090-faに入れ替えてしまいましょう。

$ git clone https://github.com/flightaware/dump1090.git
$ sudo apt-get install build-essential debhelper librtlsdr-dev pkg-config dh-systemd libncurses5-dev libbladerf-dev
$ cd dump1090
$ dpkg-buildpackage -b

これでパッケージ、dump1090-fa_3.8.0_armhf.debができあがっているので、dump1090-mutabilityをアンインストールして、これをインストールします。

$ cd ..
$ sudo systemctl stop piaware
$ sudo systemctl stop fr24feed
$ sudo systemctl stop dump1090-mutability
$ sudo apt-get purge dump1090-mutability
$ sudo dpkg -i dump1090-fa_3.8.0_armhf.deb
$ sudo systemctl status dump1090-fa

すると、dump1090-faがactive (running)になっていることが確認できます。では、PiAwareを起動しましょう。

sudo systemctl enable dump1090-fa
sudo systemctl enable piaware
sudo systemctl start piaware

次に、fr24feedの設定を修正します。vi /etc/fr24feed.iniして、設定内容を下記のように書き換えます。受信機の種類と、ホストのポート番号の設定が異なります。ついでに、不要なフィードをしたりログを残すのもやめました。fr24keyはご自分のもののまま書き換えないでくださいね。

receiver="beast-tcp"
fr24key="xxxxxxxxxxxxxxxx"
host="127.0.0.1:30005"
bs="no"
raw="no"
logmode="0"
logpath="/var/log/fr24feed"
mlat="yes"
mlat-without-gps="yes"

設定を書き換えたら、sudo systemctl start fr24feedとしてfr24feedを起動します。

ロードアベレージとかメモリとか

そうそう、BeagleBone Greenは、Cortex-A8ですしメモリも512MBとあまりパワフルとは言えません。ボードのリソースの使用具合が気になったので、topを実行してみました。 f:id:ytsuboi:20200309174105p:plain やはりソフトウェアで復調をしているので、dump1090はそれなりにCPUを使っている様です。とはいえ、使っているCPUは60%くらいみたいですし、メモリにもまだ余裕があります。BeagleBone Greenで実行し続けていて特に問題はなさそうです。

変更履歴

日付 変更者 変更内容
2020/3/9 ytsuboi 作成