コグノスケ


link 未来から過去へ表示(*)  link 過去から未来へ表示

link もっと前
2026年7月13日 >>> 2026年6月30日
link もっと後

2026年7月3日

ADS-Bを受信して飛行機の位置を見よう

目次: 自宅サーバー

空を飛ぶ飛行機は離陸直後や着陸寸前でもない限り飛んでいる姿は見えませんが、現代の飛行機は大抵ADS-B(Automatic Dependent Surveilance-Broadcast)対応していて、どの飛行機がどこに居るか教えてくれます。地上局などが受信側で飛行機が送信側となり、送信側は1秒に1回くらいの間隔で自己位置を送っているそうです。

ADS-Bが使用する周波数帯は地上波テレビ(400MHz〜700MHzくらい)に近い1090MHzのUHF帯です。なので地デジ受信ができるSDR(Software Defined Radio)を使い、受信ソフトを実装すれば受信&復調できます。情報に暗号化や秘匿処理はないため誰でも受信して中身を見ることができる、割とおおらかなシステムです。

ビルド

HWは復調RTL2838U、チューナーR820T搭載のUSBドングル(Nooelec NESDR Mini)にしました。Amazonで7,000円くらい。同じ復調ICが載っていればたぶん何でも良いです。母艦はROCK 5Bを使用します。

飛行機からの電波を受信するので、ドングル付属のアンテナは空が見える窓際などに置くと良いでしょう。

受信ソフトはいくつかあるっぽいですが、今回はreadsb(GitHubのソースコードリポジトリ)を使います。最初apt-getでreadsbをインストールしたら、RTL2838Uに対応していなくてエラーでした。ヘルプにrtlsdrを指定せよと書いてあるのに、指定するとエラーになります。なんだこりゃ?

Debian Trixieのreadsbはrtlsdrに対応してなかった
$ readsb --device-type rtlsdr
SDR type 'rtlsdr' not recognized; supported SDR types are:
  modesbeast
  gnshulc
  ifile
  none
ERROR: Unknown device type:rtlsdr
Error parsing the given command line parameters, check readsb --usage and readsb --help for valid parameters.
invoked by: ./readsb --device-type rtlsdr

仕方ないのでソースコードからビルドして動作確認します。

ビルドと動作確認
$ git clone https://github.com/wiedehopf/readsb

$ cd readsb
$ make clean
$ RTLSDR=yes make -j8

$ sudo ./readsb --device-type rtlsdr

invoked by: ./readsb --device-type rtlsdr
[2026-07-01 15:02:52.418 UTC] readsb starting up.
readsb version: 3.16.14 wiedehopf git: v3.16-81-gb80c737 (committed: Mon May 4 20:10:25 2026 0000)
autogain enabled, silent mode, suppressing gain changing messages
lowestGain:  0.0 noiseLowThreshold:  34 noiseHighThreshold:  36 loudThreshold: 243
rtlsdr: using device #0: Generic RTL2832U OEM (Realtek, RTL2838UHIDIR, SN 00000001)
Found Rafael Micro R820T tuner
Allocating 16 zero-copy buffers

$ sudo cp readsb /usr/bin/readsb

Debianのパッケージに含まれるバイナリ以外の便利なファイルたち(systemdやデーモンの設定/etc/default/readsb)はありがたく流用させてもらって、動かないバイナリだけ上書きしちゃいました。こういう雑なことをすると、将来的にapt upgradeしたタイミングで上書きされて動かなくなる可能性が高いので、ご注意ください。

受信機が置いてある座標を指定する必要があるみたいなので、/etc/default/readsbのDECODER_OPTIONSの先頭に--lat 35.xxxxx --lon 139.xxxxxを書き加えます。

DECODER_OPTIONS設定例
DECODER_OPTIONS="--lat 35.xxxxx --lon 139.xxxxx --max-range 450 --write-json-every 1"

緯度と経度はGoogle Mapで自分の家をクリックするとURLに数字が出るので、その数字を使うといいでしょう。スマホのGPSアプリで調べるのも簡単で良いですね。

便利設定

USBデバイスにアクセスできなくて怒られるときはudevの設定を足します。

udevルールの追加、反映
# vim /etc/udev/rules.d/rtlsdr.rules
 
# udevadm trigger
/etc/udev/rules.d/rtlsdr.rules

# RTL2832U OEM vid/pid, e.g. ezcap EzTV668 (E4000), Newsky TV28T (E4000/R820T) etc.
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2838", ENV{ID_SOFTWARE_RADIO}="1", MODE="0660", GROUP="plugdev"

元にした情報はreadsbと同じ作者が公開している便利スクリプト(GitHubのリポジトリ)にあります。ファイル名はosmocom-rtl-sdr.rulesです。

ADS-Bを表示

設定出来たらreadsbサービスを再起動しましょう。systemctl statusで見てエラーになっていなければOKです。

readsb再起動
$ sudo systemctl restart readsb

ADS-Bを表示するにはviewadsbを使います。下記のような情報が一覧で表示されるはずです。表示例は別の日に計測した結果なので7/3の情報じゃないかもですが、こんな雰囲気ってことで。

viewadsb表示例
 Hex    Mode  Sqwk  Flight   Alt    Spd  Hdg    Lat      Long   RSSI  Msgs  Ti |
────────────────────────────────────────────────────────────────────────────────
 861B8E S     3735  JAL35     9350  299  232   35.483  139.888 -13.2   134  0

今住んでいる場所が羽田空港の近くなこともあり、飛行機のラッシュ時(夕方とか)に起動したら大量の飛行機が表示されて驚きました。羽田空港って大変ですね……。

編集者:すずき(2026/07/08 00:42)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



2026年7月1日

GPSは世界一正確な時計、その3 - ntpsecとgpsd

目次: 自宅サーバー

以前(2015年5月8日の日記参照)、GPSモジュールからの時刻情報を使ってNTPサーバの時刻を合わせました。最近はntpdがntpsecであることが多く、設定方法が違うのでメモしておきます。

NTPサーバの設定方法

設定はとても簡単で、下記を/etc/ntpsec/ntp.confに書き加えてsudo systemctl restart ntpd.serviceでデーモンを再起動させるだけです。当然ですがgpsdも起動している必要があります。

/etc/ntpsec/ntp.confの設定

refclock shm unit 0 maxpoll 4 time1 0.232 refid GPS

設定の意味は公式ドキュメント(Shared Memory Driver - ntpsecのドキュメント参照)にある通りです。

両方のデーモン(ntpsec, gpsd)の設定がうまくいっていれば、ntpq -pを実行した際に下記のようにrefidがGPSになっている行が出現するはずです。

ntpq -pで確認
     remote           refid      st t when poll reach   delay   offset   jitter
===============================================================================
+SHM(0)          .GPS.            0 l    5   16  377   0.0000   8.7846  14.7606

私の環境だとjitterがかなり大きな値となり、インターネット越しのStratum 2のサーバーに負けてしまいました。悲しい。より正確な時刻合わせを行うならPPSを受信する方法もあるみたいですが、ROCK 5BでGPIO使うのは大変そうなのでPPSは諦め気味です。今使っているケースが金属製の密閉型のため、ROCK 5Bのボード上ピンヘッダにアクセスするのは容易ではないのです……。

編集者:すずき(2026/07/04 02:37)

コメント一覧

  • コメントはありません。
open/close この記事にコメントする



link もっと前
2026年7月13日 >>> 2026年6月30日
link もっと後

管理用メニュー

link 記事を新規作成

<2026>
<<<07>>>
---1234
567891011
12131415161718
19202122232425
262728293031-

最近のコメント5件

  • link 26年1月23日
    すずきさん (01/29 09:48)
    「おおー、そんな昔からなんですね。歴史感じ...」
  • link 26年1月23日
    hdkさん (01/27 19:53)
    「#! はUNIX v8からだったってWi...」
  • link 24年12月9日
    すずきさん (01/18 15:45)
    「Thank you for your i...」
  • link 24年12月9日
    Up2Uさん (01/15 12:57)
    「Hi I also find the p...」
  • link 25年12月18日
    すずきさん (12/23 23:51)
    「良く見たらksys_read()でfil...」

最近の記事3件

  • link 24年2月7日
    すずき (07/11 13:05)
    「[複数の音声ファイルのラウドネスを統一したい] 目次: PythonPCやデジタル音楽プレーヤーで音楽を聞いていると、曲によっ...」
  • link 23年5月15日
    すずき (07/08 01:45)
    「[車 - まとめリンク] 目次: 車三菱 FTO GPX '95の話。群馬県へのドライブ1群馬県へのドライブ2将来車を買い替え...」
  • link 26年6月27日
    すずき (07/08 01:45)
    「[ジャガーさんのバンパー修理] 目次: 車以前(2025年11月21日の日記参照)、ジャガーさんの左前をぶつけてバンパーをガリ...」
link もっとみる

こんてんつ

open/close wiki
open/close Linux JM
open/close Java API

過去の日記

open/close 2002年
open/close 2003年
open/close 2004年
open/close 2005年
open/close 2006年
open/close 2007年
open/close 2008年
open/close 2009年
open/close 2010年
open/close 2011年
open/close 2012年
open/close 2013年
open/close 2014年
open/close 2015年
open/close 2016年
open/close 2017年
open/close 2018年
open/close 2019年
open/close 2020年
open/close 2021年
open/close 2022年
open/close 2023年
open/close 2024年
open/close 2025年
open/close 2026年
open/close 過去日記について

その他の情報

open/close アクセス統計
open/close サーバ一覧
open/close サイトの情報

合計:  counter total
本日:  counter today

link About www2.katsuster.net
RDFファイル RSS 1.0

最終更新: 07/11 13:05