Rastreamento em tempo real de avioes em Porto Alegre utilizando Raspberry Pi + Radio UHF (SDR RTL2832U)

* This post is in Portuguese.

SDR (Software-Defined Radio)

SDR é uma área de radiocomunicação baseada em uma ideia muito simples: implementar em software o que antes era implementado em hardware (ex: mod/demod, filtros, etc). O fato do SDR estar se tornando uma tendência hoje se dá principalmente pelo baixo custo de alguns receptores como por exemplo o RTL2832U (mais sobre ele depois) que hoje você pode encontrar facilmente por uns U$ 20.00, preço este muito barato se você levar em consideração o intervalo de cobertura das frequências de 22Mhz até 2200Mhz (dependendo do tuner). Neste intervalo dá pra se ter uma ampla cobertura de sinais de rádio AM/FM, rádio da polícia, TV, GSM, GPS, ADSB (este post é sobre o ADSB), comunicação marítma, LTE (ainda em definição no Brasil) e outras aplicações que estão inseridas neste intervalo de frequência.

Um sistema SDR é composto geralmente por: um receptor ligado ao computador ou qualquer outro dispositivo embarcado com um poder de processamento razoável (por meio de placa de captura de áudio, USB, etc) e um software que irá fazer o tratamento do sinal recebido. Neste post eu vou utilizar o Raspberry Pi como dispositivo embarcado para capturar e demodular os dados enviados pelos transponders presentes em aeronaves comerciais e domésticas.

ADS-B (Automatic dependent surveillance-broadcast)

Grande parte dos aviões modernos estão sendo equipados com um dispositivo que tem o objetivo de substituir os radares que existem hoje. Até o ano de 2020 todos os aviões que entrarem no espaço aéreo estadunidense deverão ter como item obrigatório um dispositivo compatível com ADS-B. O dispositivo ADS-B faz com que as aeronaves sejam visíveis aos radares em terra e também para outros aviões através do broadcast de mensagens com sua altura, velocidade, posição e muitas outras informações relevantes. A transmissão destas mensagens se dá através da frequência 1090Mhz, uma frequência dentro do intervalo de captura de maioria dos receptores SDR usando o chipset RTL2832U. A ideia deste post é usar o Raspberry Pi para receber este broadcast enviado diretamente pelo transponder dos aviões, demodular os frames e então utilizar um software para decodificar/interpretar os frames e plotar em um mapa a posição atual dos aviões em Porto Alegre / RS.

Realtek RTL2832U


Alguns receptores de TV digital USB utilizam o chipset da Realtek RTL2832U, como este meu acima. Em 2012 foi descoberto que este chipset permitia o envio de dados brutos do receptor para o host, permitindo assim seu uso para SDR. Existem alguns projetos com drivers para se comunicar com o dispositivo e receber estes dados (Linux e Windows), entre os quais o mais utilizado em Linux é o projeto rtl-sdr, que agrega além do driver alguns utilitários de linha de comando como por exemplo o “rtl_adsb” que utilizarei no Raspberry Pi para demodular o sinal ADS-B enviado pelas aeronaves; outro componente importante nos receptores USB é o tuner, que é responsável pelo ajuste da frequencia do rádio, no caso do meu dongle USB ele é o R820T que tem uma ótima sensibilidade mas tem um intervalo menor de cobertura do espectro quando comparado ao E4000 (da Elonics), veja a tabela no site do projeto para saber o intervalo de cobertura de cada tuner e de outros hardwares suportados pelo rtl-sdr.

Compilando o rtl-sdr no Raspberry Pi

Estou utilizando o Raspberry Pi como host do dongle USB porque ele é um aparelho barato e o consumo de energia é muito baixo, ou seja, você pode deixá-lo ligado capturando o sinal ADS-B por quanto tempo quiser sem se preocupar com um gasto maior que 5 watts no pior caso.

Baixando repositório

1
git clone git://git.osmocom.org/rtl-sdr.git

Dependências: libusb-1.0-0-dev, cmake, compilador (gcc)

 Criando arquivos para compilação e compilando:
1
2
3
4
5
6
7
cd rtl-sdr/
mkdir build
cd build
cmake ../
make
sudo make install
sudo ldconfig
E pronto, já estamos com o rtl-sdr instalado (driver a aplicativos extras).

Recebendo sinal ADS-B

Antes de mais nada, um pequeno teste para verificar se o rtl-sdr está encontrando corretamente o dongle USB:

1
2
3
4
5
6
7
8
9
10
11
pi@raspberrypi ~ $ rtl_test -t
Found 1 device(s):
 0: ezcap USB 2.0 DVB-T/DAB/FM dongle</pre>
<pre>Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7
8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0
29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9
44.5 48.0 49.6
No E4000 tuner found, aborting.
pi@raspberrypi ~ $

Note que o meu dongle é um RTL2832U com o tuner R820T, ao executar o “rtl_test -t” é também exibida uma lista com os ganhos suportados pelo dongle.

Como a frequência utilizada pelo ADS-B é de 1090MHz, uma antena boa seria uma discone ou uma dipolo confeccionada com as dimensões corretas para esta frequência. Como ainda não tenho os plugs adequados tive que utiliar a antena que veio junto com o dongle, que mesmo sendo de baixa qualidade e não relacionada com a frequência do ADS-B ainda consegue receber os sinais (de fato, mesmo desconectando a antena eu consigo receber os frames das aeronaves), mesmo com o dongle em um ambiente fechado (minha casa fica há uns 6-10km do aeroporto de Porto Alegre / RS).

Para receber e demodular os frames eu utilizei o utilitário “rtl_adsb” (ele vem junto com o pacote do rtl-sdr). Ao ser executado, ele ajustará o tuner para a frequência do transponder das aeronaves em 1090MHz e logo após fará a demodulação dos frames para o formato hexadecimal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pi@raspberrypi ~ $ rtl_adsb
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000013

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 1090000000 Hz.
Sampling at 2000000 Hz.
Exact sample rate is: 2000000.052982 Hz
*825566cf477b3124c64b17e74b15;
*e6c7d7fdb34c855db6972204ea14;
*d1e27bb95df2454ca547c87718a2;
*906bc5a59b5c5053226fb94f3460;
*a6f51dc76353efeeabfbfe6946cb;
*e78ed3aaf547fcd87e8e4f41cea3;
*d26a5ecacdb7051f2ebe18efc613;

Cada frame inicia sempre com um asterisco na frente e cada um destes frames foi enviado diretamente por um transponder de um avião ou é uma requisição terra->ar de alguma base em terra. O que precisamos agora é fazer a decodificação destes frames para poder extrair o tipo do frame, latitude, longitude, callsign, origem e destino do avião, etc. Não existem hoje muitas alternativas open-source para fazer o plot dos aviões em um mapa, o melhor que eu encontrei foi o Virtual Radar Server que é open-source e roda também em Linux, além de ter uma interface web bem amigável e plotar as aeronaves usando o Google Maps.
Para fazer com que o Virtual Radar Server conecte no Raspberry Pi, primeiramente precisamos fazer o streaming via TCP dos frames que o “rtl_adsb” está recebendo no Raspberry Pi, o que dá para resolver utilizando o “netcat” mesmo:

1
rtl_adsb | netcat -lp 8080

Neste caso ele irá escutar na porta 8080 e enviar os frames ADS-B para o cliente que conectar nele. Logo após é só especificar o IP/porta do Raspberry Pi no Virtual Radar Server e se tudo der certo e você conseguir receber algum frame de algum transponder, você verá uma tela parecida com esta mostrada abaixo com o rastreamento dos aviões em tempo real:

No screenshot você pode ver um avião da GOL (GOL1446) se dirigindo ao aeroporto (logo a frente onde diz São João) a uma velocidade de 250km/h e descendo a uma velocidade de 195 metros por minuto. Geralmente os aviões enviam o broadcast da mensagem com a posição a cada segundo, tudo vai depender da sua antena, receptor e condições de difusão. Com a minha antena pequena e no meio de prédios eu consegui capturar o broadcast de aviõe em até uns 80km de distância, espero melhorar isto com uma outra antena, só preciso achar o material agora =)

- Christian S. Perone

20 thoughts on “Rastreamento em tempo real de avioes em Porto Alegre utilizando Raspberry Pi + Radio UHF (SDR RTL2832U)

  1. Muito legal. Parabéns. Não sabia que os módulos de TV digital (baseados no chip da realtek) poderiam ser utilizados para isso. Abraço.

  2. Hello, congratulations for your page, and for Pyevolve. I wanted to make a question about this one (I didn’t find anywhere in Pyevolve pages):
    Is there any way of selecting different bounds for the different elements in the list of the objective function (thus, different bounds for each free parameter)?
    Thanks.
    Jesus.

  3. Uma maneira de aumentar a sensibilidade é diminuindo o nível de ruído injetado no receptor. Para isso, conecte o dongle ao RP via um cabo USB com filtro (aqueles com uma “batata” no meio). Com isso, o receptor pode conseguir “ler” sinais mais fracos.

  4. Bom dia Christian.

    Legal o teu post. Temos que difundir essa ideia pelo Brasil afora.
    Hoje eu tenho 2 estações ADSB no RS e mais um Radarbox ativo.
    No FR24 sou o T-SBPA2, ativo 24×7. A outra estação esta na serra e é o T-SBCX1, na casa de um amigo.

    abraço
    Guto.

  5. Sou radioamador e capitão amador marítimo . Gostaria de usar um sistema AIS para embarcações, similar ao aéreo e tambem monitorar as comunicações em HF(SSB) e VHS(FM) nas faixas maritimas e de radioamador. O seu projetopderia ser adaptado para esta finalidade? Agradeceria um contato via email. (liegemelo@gmail.com)
    Parabens pelo belo trabalho.
    Sds
    Liège

  6. Este dongle que você utilizou, é aquele “genérico” que vendem no mercado livre entre R$ 40-60? No Reddit eles também chamam ele de “genérico” e dizem que não podem confirmar o chipset. Pode me confirmar isto, pois daí vou comprar no ML. Quero fazer uma rádio escuta VHF aviação.

    1. Esse é um comprei no ML, não é o “genérico”, ele tem o RTL2832U e o tuner RT820, esse cara que eu comprei do ML já encerrou as vendas deste modelo, o que é uma pena pois esse tuner RT820 é extramemente sensível. Mas tem também o Elonics que é muito bom, te aconselho a ver no DX.com que tem uns preços bem melhores e também tem o Elonics e talvez o RT820, mas maioria dos vendedores nunca sabem que tuner é e se realmente tem o RTL2832U.

  7. Bom dia amigo!
    Poderia me informar se com este receptor posso usar como SDR no windows e qual software daria certo?

    Obrigado

  8. Comprei um dispositivo desse nos EUA, loja Nooelec.com.
    Paguei 17 dólares e chegou em 20 dias.Estou apanhando bastante, pois nunca mexi com rádios.Funciona bem em windows 7. Pelo que pesquisei, as possibilidades são fantásticas.

  9. Olá!
    Há dias, venho buscando algum dispositivo USB com o chipset da Realtek… Procurei principalmente no MercadoLivre, onde há vários receptores para TV digital, porém os anunciantes não sabiam dizer se funcionavam com o Realtek ou não…
    Quando vi as fotos no post acima, lembrei que havia visto esse mesmo dispositivo em vários anúncios. Não comprei por não ter certeza.
    Por acaso poderia me dizer se o dispositivo do anúncio que se encontra no link abaixo é igual ao seu? Porque se for, meu caro, ainda hoje eu compro :D
    Já agradeço!
    Link: http://produto.mercadolivre.com.br/MLB-527196056-receptor-de-tv-digital-usb-pc-notebook-controleantenacd-_JM

    1. Olá, o produto do link que você enviou é externamente igual ao meu, não posso garantir que seja o mesmo chipset porque todos são bem parecidos, mas há grandes chances de ser o rtl.

  10. Christian boa tarde estou fazendo o radar como esta no tutorial mais o virtual radar esta travando nao abre a janela de options da um erro no mono

  11. Christian estou ao abrir a janela option ele da um monte de erro que acaba encerando o mono gostaria de saber como vc instalou o virtual radar eu segui os passo do site dele mais nao tive resultado …. tentei ate com versao antiga teria como te passar um email com print da tela ……

  12. Christian ele nao abre a janela de options quando ele abre da um monte de erro ……
    ja tentei por versao do mono mais antiga e do virtual tambem da o mesmos erro ele aborta se possivel teria como vc explicar como vc instalou o mono e o virtual pois e nesta parte que ta me dificultando vou mostra isso num seminario de ciencia da computacao se eu tirar print da tela teria como te mandar por email

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>