Skip to content

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🤖 Tatu-Bomba

Espressif FreeRTOS Arduino Python RaspberryPi MQTT

Integrantes do Grupo

Nome R.A.
André Solano F. R. Maiolini 19.02012-0
Durval Consorti Soranz de Barros Santos 22.01097-0
Leonardo Roberto Amadio 22.01300-8

Vídeo de Apresentação

https://www.youtube.com/watch?v=4js4HJ5Gtuk

Apresentação do Projeto

Este repositório contém todo o software embarcado para o projeto Tatu-Bomba, um Robô de Reconhecimento Tático (inspirado no TTR - Throwable Tactical Robot da Recon Robotics). O objetivo é desenvolver uma plataforma de vigilância móvel capaz de ser controlada remotamente, transmitindo vídeo em tempo real.

Modelo CAD 3D do chassi do Tatu-Bomba

🏗️ Arquitetura do Sistema

A arquitetura de software é distribuída em dois processadores principais que trabalham em conjunto para alcançar um desacoplamento entre o controle de alto e baixo nível.

  • Raspberry Pi Zero 2 W (CĂ©rebro): Atua como o computador principal de bordo. É responsável pelas tarefas de alta complexidade, como processamento de vĂ­deo, comunicação em rede (Wi-Fi), e a execução da lĂłgica principal do robĂ´.
  • ESP32 (Controlador de Tempo Real): Funciona como um microcontrolador auxiliar dedicado. Ele lida com todas as tarefas de tempo real que exigem precisĂŁo e baixa latĂŞncia, como o controle dos motores e a leitura de sensores de alta frequĂŞncia (encoders e IMU).
  • PC / Dashboard (Estação de Controle): Uma interface de operador que se comunica com o robĂ´ via Wi-Fi atravĂ©s do protocolo MQTT para enviar comandos e receber o stream de vĂ­deo e a telemetria.

A seguir, tem-se o diagrama de blocos dos componentes eletrônicos utilizados para a construção da plataforma do robô:

Diagrama de blocos feito via draw.io

O diagrama abaixo ilustra a interação entre os componentes arquiteturais principais do sistema:

graph TD
    subgraph "PC Command Center"
        A[PyQt Dashboard]
        B(MQTT Broker)
        A -- "localhost" <--> B
    end

    subgraph "Robot Platform"
    
		    subgraph H["Raspberry Pi Zero 2W"]
				C["Robot Client (MQTT)"]
				D["Video Server (MJPEG)"]
		    end

			subgraph E["ESP32S NodeMcu"]
		    
				F["UART Task"]
	        	G["Sensor Motor Task"]
	        
		    end 
        
    end

    B -- "Wi-Fi (MQTT)" <--> C
    A -- "Wi-Fi (HTTPS)" <--> D
    C -- "UART (Serial)" <--> F
Loading

📦 Componentes de Software

Este repositório está organizado nos seguintes diretórios principais:

Software/
|
├── esp32_firmware/            # Código do firmware utilizando PlatformIO
│   ├── .pio
│   ├── platformio.ini
|   ├── ...
│   └── README.md              # Explicação da arquitetura e funcionamento
│
├── pc_command_center/         # Código para rodar no computador (acesso)
│   ├── dashboard/             # Dashboard para controle do robô
│   ├── venv/                  # Ambiente virtual Python
|   ├── ...
│   └── README.md              # Explicação para utilização
|
├── rpi_software/              # Código do software rodando na RPi
│   ├── robot_client/          # Ponte de comunicação 
│   ├── video_server/          # Servidor de streaming de vídeo
|   ├── services/              # Configurações serviços 'systemd'
|   ├── config.py              # Configurações gerais dos serviços
|   ├── ...
│   └── README.md              # Explicação da arquitetura e funcionamento
|
├── ...
├── README.md                  # Explicação geral do projeto
└── .gitignore

đź§  Software da Raspberry Pi

O cérebro do robô, escrito em Python. Suas responsabilidades incluem:

  • Ponte de Comunicação: Traduz mensagens MQTT do dashboard em comandos seriais para o ESP32 e, inversamente, converte os dados de telemetria do ESP32 em publicações MQTT.
  • Streaming de VĂ­deo: Executa um servidor web que captura o feed da câmera e o transmite em formato MJPEG para o dashboard.
  • Gerenciamento de Estado: MantĂ©m o estado de conexĂŁo do robĂ´ utilizando o mecanismo Last Will do MQTT.

➡️ Clique aqui para acessar o README completo do software da RPi

⚙️ Firmware do ESP32

O controlador de tempo real do robĂ´, escrito em C++/Arduino com FreeRTOS. Suas responsabilidades incluem:

  • Controle Preciso dos Motores: Gera sinais PWM para a ponte H a partir dos comandos recebidos.
  • Leitura de Sensores: LĂŞ os encoders de roda e a IMU em uma frequĂŞncia constante e elevada.
  • Envio de Telemetria: Agrupa todos os dados dos sensores em um pacote binário e o envia via UART para a Raspberry Pi.

➡️ Clique aqui para acessar o README completo do firmware do ESP32

🎮 Dashboard de Comando no PC

O dashboard roda na máquina do usuário - com uma interface intuitiva, desenvolvida usando PyQt - permitindo a leitura da telemetria e controle de movimentação (além da visualização do vídeo).

➡️ Clique aqui para acessar o README completo do dashboard

✨ Funcionalidades Principais

  • âś… Controle Remoto via Wi-Fi: Movimentação confiável atravĂ©s de uma interface de controle.
  • âś… Streaming de VĂ­deo em Tempo Real: TransmissĂŁo de vĂ­deo de baixa latĂŞncia da câmera do robĂ´ para o operador.
  • âś… Telemetria Completa: Envio de dados vitais como tensĂŁo da bateria e dados de odometria (encoders e IMU) para o dashboard.
  • ⏳ Modo Sentinela (Futuro): Utilizar IA para detectar e rastrear alvos de forma autĂ´noma.
  • ⏳ Patrulha por Waypoints (Futuro): Executar rotas prĂ©-definidas de forma autĂ´noma com base na odometria.

Requisitos do Sistema

đź§© Tabela de Requisitos Funcionais

Os requisitos funcionais descrevem o que o sistema deve fazer.

ID Requisito Prioridade Critério de Aceitação
RF01 O sistema deve permitir o controle de movimento do robô (frente, trás, rotação) através da interface no dashboard. Obrigatório O robô responde aos comandos de movimento do joystick virtual com um atraso perceptível inferior a 500 ms.
RF02 O sistema deve transmitir vídeo em tempo real da câmera do robô para o dashboard do operador. Obrigatório O feed de vídeo é exibido no dashboard, cumprindo os critérios de performance definidos em RNF01.
RF03 O robô deve ser ativado e desativado fisicamente através de um pino removível. Opcional Com o pino removido, os motores não respondem a nenhum comando. Ao reinserir o pino, a operação é restaurada.
RF04 O robô deve enviar dados de telemetria (nível da bateria em volts e status da conexão) para o dashboard. Obrigatório Os valores de tensão elétrica e o status “online/offline” são exibidos corretamente no dashboard.
RF05 O sistema deve detectar a presença de ameaças no campo de visão da câmera usando um modelo de visão computacional. Opcional O sistema desenha uma caixa delimitadora (bounding box) em torno da ameaça detectada no feed de vídeo em tempo real.
RF06 O robô deve ser capaz de executar uma sequência de movimentos pré-definida (modo patrulha). Opcional O robô executa com sucesso uma sequência (ex: “frente 1 m, girar 90°, frente 1 m”) carregada de um arquivo de configuração.

⚙️ Tabela de Requisitos Não Funcionais

Os requisitos nĂŁo funcionais descrevem como o sistema deve operar, definindo suas qualidades.

ID Requisito Prioridade
RNF01 O streaming de vídeo deve ter uma taxa de atualização de no mínimo 30 FPS e uma latência ponta-a-ponta inferior a 500 ms. Obrigatório
RNF02 A bateria deve fornecer uma autonomia de operação de no mínimo 30 minutos em condições de uso moderado. Obrigatório
RNF03 A comunicação Wi-Fi deve ser estável em um raio de no mínimo 20 metros em ambiente interno. Obrigatório
RNF04 A interface de controle deve permitir que um novo operador execute tarefas básicas rapidamente. Obrigatório
RNF05 O software deve ser modular, com baixo acoplamento entre os componentes de comunicação, controle e interface. Obrigatório
RNF06 O sistema deve ser tolerante a falhas de comunicação, descartando mensagens corrompidas ou malformadas sem travar. Obrigatório
RNF07 O robô deve entrar em modo de segurança (parar os motores) se a comunicação com o operador for perdida por um tempo pré-determinado. Obrigatório
RNF08 O peso total do robĂ´ montado, incluindo a bateria, deve ser inferior a 1 kg. Opcional

đź’¸ Estimativa de Custo Detalhada do RobĂ´

Categoria Componente Qtd. Preço Unitário (R$) Subtotal (R$)
EletrĂ´nica Principal Raspberry Pi Zero 2W 1 R$ 250,00 R$ 250,00
Pi Camera (CompatĂ­vel 5MP) 1 R$ 47,00 R$ 47,00
Cabo Adaptador Câmera Raspberry Pi 1 R$ 15,00 R$ 15,00
CartĂŁo MicroSD 32GB 1 R$ 35,10 R$ 35,10
ESP32S NodeMCU (ESP-12) 1 R$ 47,90 R$ 47,90
IMU MPU6050 (MĂłdulo) 1 R$ 16,05 R$ 16,05
PotĂŞncia e Atuadores Bateria Li-Ion 3S (11.1V) 1 R$ 0,00 R$ 0,00
Conversor DC-DC Step-down 5V 1 R$ 18,90 R$ 18,90
Ponte H TB6612FNG (MĂłdulo) 1 R$ 30,00 R$ 30,00
Motor DC (150 RPM c/ Eng. Metal) 2 R$ 28,49 R$ 56,98
Distribuidor de Energia (PDB/Bornes) 1 R$ 15,00 R$ 15,00
Sensores Encoder (LM393 - MĂłdulo c/ Disco) 2 R$ 11,00 R$ 22,00
Chassi (Estrutura) 1kg Filamento ABS (Cinza) 1 R$ 110,00 R$ 110,00
Tubo PVC 100mm (40cm) 1 R$ 12,00 R$ 12,00
Tampas PVC 100mm 2 R$ 7,00 R$ 14,00
Mecânica (Miscelânea) Fuso dupla rosca M8 (com castanha)¹ 1 R$ 12,00 R$ 12,00
Rolamentos 608zz 4 R$ 2,50 R$ 10,00
Parafusos, Porcas, Fios (Diversos) 1 R$ 25,00 R$ 25,00
Total Estimado: R$ 736,93

About

💣 Tatu-Bomba é um robô de reconhecimento tático, desenvolvido para explorar ambientes, transmitindo vídeo e telemetria em tempo real. Controlado por um dashboard customizado responsável pela comunicação Wi-Fi via MQTT.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages