1. Home
  2. /
  3. 無線通信
  4. /
  5. 自宅周辺を飛んでいる飛行機の情報をADS-Bで受信する

自宅周辺を飛んでいる飛行機の情報をADS-Bで受信する

自宅周辺を飛んでいる飛行機の情報をADS-Bで受信する

世界の飛んでいる航空機情報を見るサービス、Flightradar24が人気です。

最近では岸田元首相がウクライナに電撃訪問した際に、そのチャーター機の情報がFlightradar24で見られると話題になりました。

このFlightradar24の情報は、ADS-Bという通信を受信し構築されています。ADS-Bは、航空機からの位置情報などを地上局に送信するための通信方式です。従来飛行機の位置情報は空港などにある地上のレーダー設備から位置特定していましたが、必ずしも地上から飛行機の位置を取得できるものではありません。そこで飛行機側からも位置情報を出すことでより完璧な位置情報を取得できるようにしたのがADS-Bです。

このADS-Bは平文で飛行機から出力されているため受信機さえあれば手軽に情報を取得できます。今回は自宅の屋内にアンテナを設置して周辺にいる飛行機の情報を取得してみます。

受信機選定

ADS-Bの受信機はAmazonやAliExpressなどで無数に販売されています。まずLinuxで動作しADS-Bを受信できると報告がある機器を探します。

NESDR Mini 2+ 0.5PPM TCXO RTL-SDRおよびADS-B USBレシーバーセット(アンテナ、吸引マウント、メスSMAアダプター付き)。 RTL2832UおよびR820T2チューナー。 低コストのソフトウェア無線

Amazon

今回は上記機種が動作報告豊富だったため購入しました。

環境

今回はProxmox VM上にセットアップします。

OSはUbuntu 22.04 Serverをインストールしています。ストレージは60GB程度設定していますが恐らく16GBもあれば足ります。メモリは2GBにしましたがカツカツだったため4GBくらいあった方が良いかもしれません。

ADS-Bの受信環境はRaspberry piが一般的でamd64環境、ましてやProxmoxでの構築事例は少ないため少し苦労しました。

セットアップ

Ubuntuインストール

この段階ではまだ受信機を接続していません。

特筆すべき事はないので割愛します。プレーン状態でインストールした状態です。

Dockerインストール

Dockerをインストールしますが今回は特別なスクリプトでインストールします。

GitHub - sdr-enthusiasts/docker-install: Script to help install Docker on Raspberry Pi and similar Debian-based OSes

Script to help install Docker on Raspberry Pi and similar Debian-based OSes - sdr-enthusiasts/docker-install

SDR Enthusiastsさんの各種リポジトリではDockerでADS-Bを扱うさまざまなリポジトリが提供されています。

後ほどADS-Bを受信する環境もDockerコンテナで構築するのですが、その前提となる各種設定やツールのインストールを自動化してくれるスクリプトが公開されています。

arm64でもamd64でも動作するため、Raspberry pi環境でも利用可能です。OSはdebian系が前提です。

bash <(wget -q -O - https://raw.githubusercontent.com/sdr-enthusiasts/docker-install/main/docker-install.sh)

上記コマンド実行します。

Do you want to prepare the system for use with any of the RTL-SDR / ADS-B containers?
Examples of these include the collection of containers maintained by SDR-Enthusiasts group:
Ultrafeeder, Tar1090, Readsb-ProtoBuf, Acarshub, PlaneFence, PiAware, RadarVirtuel, FR24, other feeders, etc.
It's safe to say YES to this question and continue unless you are using a DVB-T stick to watch digital television.

途中上記質問が出るのでYを選択します。

スクリプト実行後は再起動して’docker’コマンドが打てるか確認します。

問題無くDockerコマンドが打てたらVMをシャットダウンします。

Proxmox側の設定

先ほどのDokcerインストールスクリプトの中にカーネルモジュールへの設定が含まれています。

受信機のデバイスがカーネルから読み込まれないようにする処理です。念のためProxmoxホスト側でも同じ設定を通しておきます。


sudo tee /etc/modprobe.d/blacklist-rtlsdr.conf <<TEXT1
# Blacklist host from loading modules for RTL-SDRs to ensure they
# are left available for the Docker guest.

blacklist dvb_core
blacklist dvb_usb_rtl2832u
blacklist dvb_usb_rtl28xxu
blacklist dvb_usb_v2
blacklist r820t
blacklist rtl2830
blacklist rtl2832
blacklist rtl2832_sdr
blacklist rtl2838
blacklist rtl8192cu
blacklist rtl8xxxu

# This alone will not prevent a module being loaded if it is a
# required or an optional dependency of another module. Some kernel
# modules will attempt to load optional modules on demand, which we
# mitigate here by causing /bin/false to be run instead of the module.
#
# The next time the loading of the module is attempted, the /bin/false
# will be executed instead. This will prevent the module from being
# loaded on-demand. Source: https://access.redhat.com/solutions/41278

install dvb_core /bin/false
install dvb_usb_rtl2832u /bin/false
install dvb_usb_rtl28xxu /bin/false
install dvb_usb_v2 /bin/false
install r820t /bin/false
install rtl2830 /bin/false
install rtl2832 /bin/false
install rtl2832_sdr /bin/false
install rtl2838 /bin/false
install rtl8192cu /bin/false
install rtl8xxxu /bin/false

TEXT1
sudo modprobe -r rtl2832_sdr
sudo modprobe -r dvb_usb_rtl2832u
sudo modprobe -r dvb_usb_rtl28xxu
sudo modprobe -r dvb_usb_v2
sudo modprobe -r r820t
sudo modprobe -r rtl2830
sudo modprobe -r rtl2832
sudo modprobe -r rtl2838
sudo modprobe -r rtl8192cu
sudo modprobe -r rtl8xxxu
sudo modprobe -r dvb_core
sudo update-initramfs -u

ここまで作業が終わったら受信機をUSBポートに接続します。接続後はVMのHardware設定からUSBデバイスを追加します。

現在のProxmoxホストはMINISFORUMのミニPCなのですが、背面の刺すとVMへ接続後にデバイスを触った瞬間ゾンビになる問題がありました。もしかすると電力不足なのかもしれません。

今回はフロント側に接続することで動作しました。

docker-readsb-protobuf

VM側に戻ってADS-Bを受信するためのコンテナを設定します。

GitHub - sdr-enthusiasts/docker-readsb-protobuf: Multi-architecture readsb-protobuf container with support for RTLSDR, bladeRF and plutoSDR (x86_64, arm32v7, arm64v8)

Multi-architecture readsb-protobuf container with support for RTLSDR, bladeRF and plutoSDR (x86_64, arm32v7, arm64v8) - sdr-enthusiasts/docker-readsb-protobuf

先ほどのDockerインストールスクリプトと同じチームが出しているdocker-readsb-protobufを利用します。


volumes:
  readsbpb_rrd:
  readsbpb_autogain:

services:
  readsb:
    image: ghcr.io/sdr-enthusiasts/docker-readsb-protobuf:latest
    tty: true
    container_name: readsb
    hostname: readsb
    restart: always
    devices:
      - /dev/bus/usb:/dev/bus/usb
    ports:
      - 8080:8080
      - 30005:30005
    environment:
      - TZ=Asia/Tokyo
      - READSB_DCFILTER=true
      - READSB_DEVICE_TYPE=rtlsdr
      - READSB_FIX=true
      - READSB_GAIN=autogain
      - READSB_LAT={緯度}
      - READSB_LON={経度}
      - READSB_MODEAC=true
      - READSB_RX_LOCATION_ACCURACY=2
      - READSB_STATS_RANGE=true
      - READSB_NET_ENABLE=true
    volumes:
      - readsbpb_rrd:/run/collectd
      - readsbpb_autogain:/run/autogain
      - /proc/diskstats:/proc/diskstats:ro
    tmpfs:
      - /run/readsb:size=64M
      - /var/log:size=32M

緯度経度はアンテナ設置場所の緯度経度を小数5桁くらいで入力します。Google Mapsで緯度経度を見たい地点を右クリックすると表示されるのでオススメです。

docker-compose up -dでコンテナを起動します。

起動したらdocker exec -it readsb viewadsbで受信状況が確認できます。

航空機は取得でいているが緯度経度を取得できてない場合は受信感度が悪いかもしれません。アンテナの調整等が必要になります。(単純に飛行機の位置が受信限界ギリギリの可能性もあるのである程度見守って判断するのが良いかと)

注意:夜中にテストするとそもそも飛行機が飛んでいないので受信できません。Flightradar24で家の近くに飛行機が飛んでいるか確認してください。

http://<IPアドレス>:8080/にアクセスすると受信した飛行機の情報が地図上で確認できます。

受信感度

屋内に素朴に付属アンテナを建ててみました。

これでも半径60km程度のADS-Bを受信できました。屋根などにしっかりとしたアンテナを設置すれば400km程度の範囲を受信できるそうです。

ADS-Bは1090Mhz帯を利用していますが、上空から送出すると案外遠くまで受信できるものなんだと関心しました。

以上で受信機さえあればお手軽に自宅周辺の飛行機情報を取得できました。ただこれだとデータを眺めて終わりになってしまうので次回はこれをFlightradar24へ送信してみようと思います。

続き

受信したADS-BのデータをFlightradar24に共有する

受信したADS-BのデータをFlightradar24に共有する

前回、ProxmoxのVM上でADS-Bのデータを受信することができました。 今回は、そのデータをFlightradar24に共有する方法を紹介します。 Flightradar24にデータを共有する目的 Flightradar24は、全世界の航空機の位置情報を提供するサービスです。 基本的には無料で利用できますが長時間の確認、過去のデータ、細かい機体情報などは有料プランが必要です。 そして有料プランが最上位Businessプランで年額499ドルします…… その499ドルがADS-Bのデータと共有することで無料!!!!受信機の代金なんて1ヶ月で元が取れます!!

参考サイト

Ubuntu+DockerでFlightradar24とFlightAwareとRadarboxにADS-B情報を配信する

サイト内の商品リンクは一部アフィリエイトリンクとなっています

関連記事

受信したADS-BのデータをFlightradar24に共有する

受信したADS-BのデータをFlightradar24に共有する

前回、ProxmoxのVM上でADS-Bのデータを受信することができました。 今回は、そのデータをFlightradar24に共有する方法を紹介します。 Flightradar24にデータを共有する目的 Flightradar24は、全世界の航空機の位置情報を提供するサービスです。 基本的には無料で利用できますが長時間の確認、過去のデータ、細かい機体情報などは有料プランが必要です。 そして有料プランが最上位Businessプランで年額499ドルします…… その499ドルがADS-Bのデータと共有することで無料!!!!受信機の代金なんて1ヶ月で元が取れます!!
Ubuntu 22.04にタグVLANを設定する(1NIC 1VLAN)

Ubuntu 22.04にタグVLANを設定する(1NIC 1VLAN)

自宅のネットワークをVLANで分割したいときに、単純な1NIC 1VLANの構成が単純すぎて逆に情報がなかったためメモ代わりに記載します。 環境 Ubuntu 22.04 1NICのみ 物理実機 対向はトランクポート設定済み(正確にはトランクポートに下にぶら下がってるアンマネージドハブの配下) IPv6は考えない i3第2世代のかなり古いミニPCでNICが1つしかありません。また割り当てるVLANも一つでこのサーバーからの通信はすべて単一のVLANタグで通信します。