RTLSDRを使ったdump1090でADS-B受信

ADS-Bとは

 航空機自らが自機の各種情報(緯度・経度・高度・対地速度・進行方向等)を送信するADS-B(Automatic Dependent Surveillance-Broadcast)という情報があります。

 本来は航空機の管制や衝突防止のために用いられる信号ですが、航空機のほぼリアルタイムな位置情報を表示できるアプリ・サイトとして有名なFlightRader24を含め、同様のサービスはADS-B情報をデータソースとしています。

 個人でADS-Bを受信する高価な専用装置も市販されている(た?)ようですが、現在ではSDRを利用して安価なチューナーを用いて受信機を構築する事例が多いようです。
 

受信できるチューナー

 SDRについては以前に下記投稿で触れていますが、ADS-B受信の場合にはUSBインタフェース搭載復調ICとしてRealtek RTL2832Uを採用してさえいればよいわけではありません。
wave.hatenablog.com

 ADS-Bの周波数は1090MHzのため、ワンセグチューナーとして市販されている製品の多くは、搭載するチューナーの周波数レンジ外となり受信することができません。
 例えば手持ちのワンセグチューナーの場合、Fitipower FC0012をチューナーICとして搭載しており、これは周波数レンジが22~948.6MHzのためADS-Bを受信することはできません。
 最近では概ね500円程度からワンセグチューナーが市販されていますが、これらの多くはFitipower製のチューナーICを搭載しているようで、前述のFC0012やFC0013が実装されているようです。FC0013の場合はスペック上22~1100MHzが周波数レンジとなっているようで、ギリギリADS-Bが受信できそうにも思えますが、実際に受信できたという情報は見かけたことがありません。

 故に、日本国内のワンセグテレビ放送の受信を目的として製品化されたUSB接続のチューナーはADS-B受信には使えないと考えた方が良いでしょう。

 逆に、ADS-Bが受信可能なチューナーICはRafael Micro R820T、R820T2となるようです。これは国外のテレビ放送受信用DVB-Tチューナーとして市販されていることが確認されています。但し、製品名にR820Tと書かれていても実際にはFC0012が実装されていたりと、なかなかカオスなよ状況のようですので購入時はレビューなどをよく確認した方が良いと思います。
 私は以下の製品を購入し、ソフトウェア上からも"Rafael Micro R820T tuner"として認識されていることを確認しています*1。また、後述の通りADS-Bが受信できていることも確認しています。

※同様の形状で黒い筐体の製品もありますが、軒並みR820TシリーズではなくFitipower製チューナICに置き換わっている模様。
 

dump1090

 dump1090はRTL-SDRを使用してADS-Bをデコードするソフトウェアです。
 日本語でdump1090の情報を調べると、殆どの人はFlightRader24に情報をFeed(提供)するために導入しているようですが、そのためにしか使わないのは勿体ないです。
 単にADS-Bの生データを数値・文字情報としてデコードしてくれるだけではなく、航空機の位置情報などをリアルタイムにJSON出力できるので、WEBサーバと組み合わせて自家製FlightRaderっぽいものを運用することなども可能です。

 なお、dump1090のオリジナルは以下になりますが、dump1090 mutabilityというfork版の方が高機能です。ざっくりと、デコード可能な情報が多い、内蔵Webサーバを(デフォルトのビルドオプションでは)廃止、付属WEBアプリがGoogleMapベース*2ではなくOpenStreetMapベースに変わっておりきちんと動作するといった違いがありますので、mutability版の方をお勧めします(以降、文中でdump1090と表記した場合には基本的にはmutability版を指します)。
GitHub - antirez/dump1090: Dump1090 is a simple Mode S decoder for RTLSDR devices
GitHub - mutability/dump1090: Dump1090 is a simple Mode S decoder for RTLSDR devices

インストール

 (ARCH LinuxやOpenWRTなど)パッケージマネージャからインストールできる場合*3はそれを使うのが簡単(lighttpdやuhttpdの設定もしてくれます)です。

 gitからソースを入手して自分でmakeする場合も基本的にはgitに書いてある説明の通りですが、dump1090 mutabilityをインストールする場合のコマンド例は以下。

# RTL-SDRを導入
sudo apt-get install rtl-sdr librtlsdr0 librtlsdr-dev

# dump1090 mutabilityをソースからビルド
cd ~
git clone --depth 1 https://github.com/mutability/dump1090.git ./dump1090_mutability
cd ~/dump1090_mutability
make
#ビルトインWEBサーバーを無効化しない場合は以下のようにフラグを指定してmake (非推奨※後述)
#make CFLAGS=-DENABLE_WEBSERVER

 

動作確認

 何もオプション指定せずに起動した場合、以下のようにコンソールの5行目にチューナ名が出力されているはずです。
 ここでRafael Micro R820シリーズではなくFitipower FC00xxシリーズが表示されている場合、前述の通りそのUSBチューナーではADS-Bは受信できませんので買い替えましょう。

$ ./dump1090 | head
Wed Jul 18 10:30:19 2018 JST  dump1090-mutability fb5942d starting up.
Using sample converter: UC8, integer/table path
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001 (currently selected)
Found Rafael Micro R820T tuner
Max available gain is: 49.60 dB
Setting gain to: 49.60 dB
Gain reported by device: 49.60 dB

 

インタラクティブモード

 --interactiveオプションを指定して起動すると、付近の航空機からADS-Bデータが受信できていれば以下のように表示されます。
dump1090 interactive mode example
 左から順に、以下の項目が並んでいます。説明は私の理解で記述していますので、厳密には間違っていたりすることがあるかもしれませんが悪しからず。

Hex
所謂ICAO 24bit codeの16進数表現値。ネットワーク機器で言うMACアドレスや、スマートフォンのIMEI番号のようなものの航空機版と考えると解りやすく、この値が同じ航空機は存在しない。
ちなみに日本の割り当て範囲(上位6ビットが100001)の都合もあってか国交省や日本の航空当局は8進数表現してることが多い(即ち8進数表現で41000000~41777777と表現できるため8進数表現で上位2桁が41なら日本籍機と解りやすい。一方、16進数表現だと840000~87FFFFの範囲となる)。
Mode
ADS-BのみをデコードさせていればMode Sのみ。--modeacオプションを付与して、SSR Mode 3/Aや3/Cもデコードさせれば該当するデータの場合にはそれらの表示が出力される。
Sqwk
スコーク(Squawk)コードの8進数表現値(というか恐らく他の進数では表現しない)。7500でハイジャック、7600で無線機故障、7700で緊急事態を意味することがICAOで規定されている。このような異常時にパイロット側の意思で設定することができるが、平常時は管制から指示された値を設定するのが普通。
Flight
コールサイン。事実上、航空会社が飛ばしている航空機の場合はフライト名(便名)であることがほとんどで、個人所有機の場合はレジ(登録番号)であることがほとんど。
Alt
高度[ft]。25ft刻みで変化する(ADS-Bの高度の分解能は25ftで、生データの単位がft)。
Spd
対地速度[NM/h]--metricオプションを指定するとkm/hに換算される
Hdg
ヘディング(航空機が向いている方向)[度]
Lat
緯度
Long
経度
RSSI
信号強度
Msgs
当該航空機から受信したADS-Bメッセージ数
Ti
当該航空機から最後に受信したメッセージからの経過時間[秒]

 

Web UI

 所謂FlightRaderっぽいものです。--write-jsonオプションで指定したディレクトリに順次リアルタイムな航空機の情報が記録されますので、それを静的なHTML/JSから順次読み込ませることでWeb画面上の(ほぼ)リアルタイム更新を実現しています。
 以下のスクリーンショットのように、画面右側にインタラクティブモードと同等以上の情報と、左側に航空機の緯度経度を地図上にプロットした情報が表示されます。ICAO 24bit codeから割り出した国籍に基づく国旗マークと、機体種別による飛行機アイコンの描き分けが為されている辺りが、コンソールのインタラクティブモードでは得られない情報です*4
dump1090 Web UI example

 なお、外部Webサーバの設定が面倒だからという理由で、CFLAGS=-DENABLE_WEBSERVERを付与して内部Webサーバを有効化してmakeするのはお勧めしません。Google Chromeからアクセスすると、ERR_CONTENT_LENGTH_MISMATCHが発生し、正常に画面ロードされませんでした。内蔵Webサーバがデフォルトで無効化されていることから察するに、恐らくメンテが行き届いていないのだと思われます。公式にも外部Webサーバの利用が推奨されていることから、安定性やセキュリティの観点からも外部Webサーバを使うべきでしょう。
 さくっとuhttpdやlighttpdなど外部のWebサーバを使えばERR_CONTENT_LENGTH_MISMATCHは発生しません。
 

負荷

 受信しているデータ量によっても変化しますが、それ以前にdump1090には多様なデコードオプションがあり、それらによって負荷は変動します。
 貧弱なRaspberryPi ZERO WH(シングルコアARMv6 1GHz)の場合、オプション指定によって概ね以下のような負荷変動が確認できました。

--aggressive --enable-agc
CPU負荷約40%前後
--aggressive --dcfilter
CPU負荷約80%前後
--aggressive --dcfilter --enable-agc
CPU負荷85%前後

 なお、aggressive有り無しを試してみたところ変化が見られないと思ったら、

"warning: --aggressive not supported in this build, option ignored."

 と出力されていましたので、このビルドではaggressiveオプションの指定は無効なようです(パッケージマネージャから導入したバージョンなどではaggressiveが使えることもあると思います)。

 負荷100%付近で張り付くことはありませんでしたので、SDR用にシングルボードコンピュータを選定するなら、現行製品なら何使っても性能不足ということは無さそうですね(データ量が多いことが推測される空港の至近距離などで運用する場合は判りませんが)。
 



以上。

*1:R820TとR820T2はソフトウェア側からは違いを識別できない模様。

*2:件の無償利用API締め出しで動作しなくなっている。

*3:ARCH LinuxとOpenWRTのdump1090はmutability版相当と思われる。

*4:これらは生ADS-Bデータに含まれておらず、ICAO 24bit codeからの情報特定はJavascriptで実装されており、その際参照するデータベースも同梱されています。が、新しい国ができたり消滅したり、航空機の国を跨ぐ所有権移動があったりしても、それらが自動で反映されるわけではありません。

NanoPi NEOを買った

 小型シングルボードコンピュータのNanoPi NEOを購入しました。
 (と言っても、実際には2カ月ほど前に購入し、私の手元では既に1カ月以上の安定運用に入っています。)

 個人的にはシングルボードコンピュータはOrangePi One、RaspberryPi ZERO WHを使ってきましたが、NanoPI NEOはOrangePi Oneと同じくAllwinnerのH3を搭載しています。
 すなわち、所謂Quad CoreなARMプロセッサを搭載しており、シングルコアのRaspberryPi ZERO WHと比較すればかなりパワフルなシングルボードコンピュータです。
 それでいて、安価に国内*1で入手することができます。
 OrangePiシリーズを安価に購入しようとすると海外通販に頼らざるを得ないことを考えると、入手性・費用・性能のバランスが取れたシングルボードコンピュータだと言えると思います。

*1:秋月やaitendoなどで取り扱いがあります。

続きを読む

ビックカメラ.comの当日配送

 久しぶりにビックカメラ.comで買い物をしたところ、ヨドバシ.comと同様に一部地域を対象とした当日配送サービスがいつの間にか展開されていました。
 

配送業者?

 当日配送を紹介するページには配送業者について何も明記されていません。
ビックカメラ | 当社指定地域「当日・翌日配送」承ります!

 なお、東京23区内の場合に指定可能な配達時間帯は以下のようにかなり幅広く、深夜帯にも受け取ることができるようです。日常的に残業しているような方にはかなり便利なのではないでしょうか。

  • 8時~12時
  • 12時~14時
  • 14時~16時
  • 16時~18時
  • 18時~20時
  • 20時~22時
  • 22時~24時

 一方で、ヤマト運輸や佐川急便のような大手配送業者はこのような時間帯に宅配は行っていませんので、中小企業が配送を受託しているのではないかと察せられます。

 なお、配送方法一般について紹介するページには以下の記載があり佐川や日本郵政といった具体名が出てきますが、当日配送の場合についての言及は特にはありません。

配送会社(委託配送会社)
『佐川急便』にて配送いたします。お届け先・ご注文状況によっては、他の業者の場合もあります。
配送業者指定、及び配達店留めのご注文は承っておりません。お客様よりご注文時にご指定いただきましたご住所(配達店を除く)へお届けします。
宅配便でお届けのため、事前連絡はしておりません。
一部の商品について、日本郵政ゆうパケットにてお届けします。なお、「ゆうパケットでの配送指定、お届け日指定」は承っておりません。
大型商品(冷蔵庫・洗濯機・40型以上のテレビ・マッサージチェア)や工事・設置・リサイクルを含む商品お届けの場合、専門業者がお届けします。
ご注文が30万円(税込)以上の場合、宅配業者の荷札へ金額の記載をすることがあります。

ビックカメラ | 配送料金/日数/配送会社・お届け予日時の指定
 

実際に届けに来た業者

 ヤマトや佐川のドライバーさんが自社名を名乗るのとは異なり、インターホン越しに「ビックカメラの宅配便です!」と名乗っていました。
 Amazon.co.jpのデリバリープロバイダが「Amazonのお届けです!」と言うのに似ており、知らない業者名を名乗られるよりは個人的には判りやすくていいと思います。

 なお、貼付票には「(株)ハートプランニングEC当日配送」と印字されている一方、お届先控えには「ECハート当日」と、表記揺れがあるため正確な業者名が判りませんが、ざっくりと「ハートプランニング」という業者のようです。
 検索してみると恐らくは以下の業者だと思われます。
HEART PLANNING ハートmini 単身引越しならハートミニ
 

貼付票

 ごく普通の箱に貼ってある配送伝票です。
ビックカメラ.com貼付票
 品名には購入した商品のJANコードの末尾4桁が印字されています*1
 

お届先控え

 貼り付けるタイプの配送伝票が普及する以前の複写式伝票の頃は、フォーマットは違えどよく見かけましたが、普通の紙にわざわざプリントアウトされたもの(を、わざわざカットしたもの)をドライバーさんから手渡されました。
ビックカメラ.comお届先控え
 上記のように商品名・メーカー名・型番・色規格・数量といった購入商品の内訳が全て印字されています。
 配達員に何を買ったか知られるのが嫌だとか、同居する家族に何を買ったか知られるのが嫌な人にとっては最悪でしょうね。

 エアコンなど設置工事が必要で、配送・設置業者も製品名に間違いないか確認する必要があるような場合には購入商品の内訳が明記されている必要性が有ると思いますが、単なる宅配で、ここまでの情報が必要なのか疑問です。
 

まとめ

 以上より、ビックカメラ.comの当日配送については以下の事が言えると思います(2018年7月現在)。

メリット
23区内なら深夜帯にも配送してもらえる
デメリット
伝票には購入商品が明記されるため、何を買ったか他人に知られる可能性が有る

 



以上。

*1:今回購入したのは無線LANアダプタなのですが、PC周辺機器とかOA機器とかそういった一般名詞では記載されないようです。