Safe On Orbit · Setor espacial · 2025–2026

COSMOS

Uma plataforma que avisa quando um satélite corre risco de colisão e ajuda a planejar o desvio.

Status
No ar
Contexto
Produto da Safe On Orbit
Meu papel
Desenvolvedor único da plataforma atual: frontend em Next.js, backend em Django e infraestrutura no Google Cloud, com CI/CD.
Tecnologias
  • Next.js
  • TypeScript
  • Django
  • PostgreSQL
  • Google Cloud Run
  • Cloud Run Jobs
  • Cloud SQL
  • Three.js
  • Orekit
  • SGP4
  • Redis
  • Docker
  • Terraform
  • GitHub Actions
Dashboard escuro do COSMOS com contadores de satélites, cartões da frota e painel de risco de colisão.
Dashboard com a frota, os eventos ativos e a distribuição de risco. Em todas as capturas, os dados são fictícios.

Visão geral

O COSMOS (Collision Safety Management Orbital System) é o principal produto da Safe On Orbit, empresa do setor espacial, e foi feito para donos e operadores de satélites. Todos os dias, ele cruza os dados orbitais da frota do operador com o catálogo público de objetos em órbita, separa as aproximações relevantes e calcula a distância mínima e a probabilidade de colisão de cada uma.

Fui o desenvolvedor único da plataforma atual. Troquei a interface antiga, feita com templates do Django, por um frontend em Next.js, desenvolvi a maior parte do backend e coloquei tudo em produção no Google Cloud. Os métodos de cálculo orbital foram definidos pela empresa; o código que os executa na plataforma é meu.

Problema

Quem opera satélites precisa saber, com dias de antecedência, quando outro objeto — um satélite, um corpo de foguete ou um detrito — vai passar perto demais de um satélite da frota, para decidir se faz ou não uma manobra de desvio.

O catálogo público tem dezenas de milhares de objetos. Comparar todos com todos de forma precisa custa caro, e os dados orbitais mudam o tempo todo, então os eventos já encontrados precisam ser recalculados.

Abordagem

O cálculo funciona como um funil: um filtro rápido descarta a maioria dos pares e só os candidatos passam pela análise precisa. Cada par de objetos tem um único evento, que ganha uma nova avaliação a cada recálculo — assim dá para ver como o risco evolui e perceber quando um satélite manobrou.

O processamento pesado roda em jobs agendados, fora da API; a API e a interface só leem os resultados. A interface foi pensada para a operação: risco por cores, linha do tempo da frota e o encontro em 3D.

Como funciona

  1. Dados orbitais

    O backend baixa os elementos orbitais (TLE) do catálogo público Space-Track e aceita efemérides enviadas pelo próprio operador, que são mais precisas.

  2. Triagem

    Um pré-filtro com SGP4, o modelo padrão de propagação de órbitas, seleciona os pares de objetos que podem se aproximar. Ele roda em paralelo, em vários processos.

  3. Análise refinada

    Para cada candidato, o sistema encontra o instante de maior aproximação (TCA) e calcula a distância mínima e a probabilidade de colisão, com propagação de alta fidelidade via Orekit.

  4. Recálculo

    Eventos ativos são recalculados com os dados mais recentes, até 14 dias à frente. O evento passa a “resolvido” quando o risco some e a “concluído” quando o TCA passa.

  5. Operação e manobra

    O operador acompanha os eventos no dashboard e na simulação 3D, recebe alertas em tempo real e pode simular uma manobra de desvio ou pedir ao sistema a manobra ótima.

  6. Google Cloud

    Backend e frontend rodam no Cloud Run; o processamento em lote roda em Cloud Run Jobs, disparados pelo Cloud Scheduler. O deploy sai do GitHub Actions, que acessa o Google Cloud sem chave fixa (Workload Identity Federation).

O caminho de uma conjunção
  • Dados
  • Código
  • Pessoa
  • Resultado
  1. Catálogo e efemérides (Dados)TLEs públicos e arquivos do operador
  2. Job diário (Código)Agendado, fora da API
  3. Triagem com SGP4 (Código)Filtro rápido, em paralelo
  4. Análise com Orekit (Código)TCA, distância e probabilidade
  5. Otimização de manobra (Código)Algoritmo genético
  6. Decisão do operador (Pessoa)Dashboard e simulação 3D
  7. Evento encerrado (Resultado)Resolvido ou concluído, com histórico

O cálculo pesado roda em jobs em lote; a API e a interface só leem os resultados.

Decisões principais

  • Jobs agendados no lugar de workers

    O projeto começou com Celery e passou o processamento agendado para Cloud Run Jobs. Ficou mais eficiente: o cálculo pesado só roda quando é disparado e escala separado da API.

  • Um evento por par de objetos

    Cada recálculo adiciona uma avaliação ao mesmo evento, em vez de criar outro registro. Isso evita duplicação, guarda o histórico completo e permite perceber quando um satélite manobrou.

  • Filtro barato antes do cálculo preciso

    A propagação de alta fidelidade é cara demais para o catálogo inteiro. Por isso o SGP4 faz a triagem, e o Orekit só entra nos candidatos.

Resultado

O COSMOS está no ar, em produção no Google Cloud, com deploy automatizado e pipelines de CI que rodam lint, testes, varredura de segurança e build das imagens.

Além do pipeline de conjunções, entreguei o módulo de manobras com otimização por algoritmo genético distribuído, uma API pública versionada com chave de acesso e documentação OpenAPI, a simulação orbital 3D no navegador e testes automatizados no backend e no frontend.

O que eu levei disso

Comece pelo mais simples, principalmente na nuvem. E faça o que o cliente pede, não o que você acha que agrega.

Capturas