-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Mateus Pincho de Oliveira edited this page Jul 1, 2025
·
3 revisions
Bem-vindos a Wiki do projeto Minidrones-RAS! Este espaço é reservado para que os integrantes do projeto tenham acesso a documentos importantes do andamento do projeto, referências para estudo e registrarem o progresso obtido durante o desenvolvimento das atividades. O projeto está dividido em fases, buscando em cada uma que os voluntários estejam se especializando e se capacitando nas diversas habilidades necessárias para modelar, simular e controlar Minidrones.
Controle
- O sistema deverá ser capaz de executar manobras de voo básicas (decolagem, pouso, translação e rotação em todos os eixos) através de comandos de API.
- O sistema deverá ser capaz de manter uma posição estável no ar (hovering) com um desvio horizontal máximo de 10 cm e vertical de 5 cm por um período de 30 segundos em ambiente interno sem correntes de ar, usando apenas seus sensores internos.
- O sistema deverá ser capaz de executar uma descida vertical com velocidade controlada, mantendo a estabilidade horizontal, para fins de pouso de precisão.
- O sistema deverá continuamente consultar e expor os dados brutos dos sensores da aeronave, incluindo, mas não se limitando a: altitude do sensor de tempo de voo (ToF), estado da bateria e dados da unidade de medição inercial (IMU).
Navegação
- O sistema deverá ser capaz de detectar e decodificar marcadores fiduciais (padrão ArUco) a partir do stream de vídeo da aeronave.
- A partir de um marcador fiducial detectado, o sistema deverá calcular a pose 6D (posição x,y,z e orientação roll, pitch, yaw) da câmera em relação ao marcador.
- O sistema deverá implementar uma máquina de estados finitos para gerenciar a sequência de tarefas de uma missão (ex: DECOLAR -> PROCURAR_ALVO -> CENTRALIZAR -> EXECUTAR_TAREFA -> POUSAR).
- O sistema deverá ser capaz de processar o fluxo de vídeo da câmera através de um algoritmo de SLAM Visual (Visual Simultaneous Localization and Mapping) para estimar a trajetória da aeronave.
- O sistema deverá fornecer a pose 6D da aeronave em tempo real, calculada pelo algoritmo de SLAM, para ser consumida por outros módulos
Comunicação
- O sistema na estação de controle deverá estabelecer e manter uma conexão Wi-Fi estável com a aeronave Tello para envio de comandos e recebimento de dados.
- Toda a lógica de controle e navegação deverá ser encapsulada como um ou mais nós dentro do framework ROS (Robot Operating System).
- O nó ROS da aeronave deverá publicar toda a telemetria relevante (pose, velocidade, status da bateria) e o stream de vídeo em tópicos ROS padronizados.
- O sistema deverá permitir que o nó ROS de um drone subscreva aos tópicos de estado de um segundo drone, permitindo a implementação de comportamentos coordenados.
Simulação
- Um ambiente de simulação 3D (ex: CoppeliaSim) deverá ser configurado com pelo menos um cenário representativo do laboratório físico.
- Deverá ser criado um modelo de simulação da aeronave Tello, incluindo sua dinâmica de voo simplificada e sensores (câmera e sensor de altitude).
- A câmera simulada deverá ser capaz de renderizar objetos, incluindo marcadores ArUco e linhas no chão, que possam ser processados pelos algoritmos de visão computacional.
- O modelo simulado deverá se expor ao ecossistema ROS através da mesma interface de tópicos (publicando estado e subscrevendo a comandos) que o drone real.
- O código de alto nível de Controle e Navegação deverá operar de forma idêntica, seja conectado ao drone real ou ao drone simulado, sem a necessidade de alterações no código-fonte.
| US | Descrição | Requisito | Esforço |
|---|---|---|---|
| US01 | Como um script de missão, eu quero chamar funções de API para executar manobras de voo atômicas (ex: takeoff(height), move_forward(distance)), para que eu possa construir sequências de voo programadas. | CT1 | 1 |
| US02 | Como um módulo de monitoramento, eu quero acessar os dados de telemetria do drone (bateria, altitude, tempo de voo) a cada segundo, para que eu possa registrar o estado do sistema e acionar alertas de segurança (ex: bateria baixa). | CT4 | 2 |
| US03 | Como o módulo de controle, eu quero receber um vetor de erro de posição (dx, dy) e convertê-lo em comandos de velocidade de roll e pitch, para que eu possa corrigir a posição do drone com base no feedback visual. | CT2, CT3 | 5 |
| US04 | Como o módulo de visão, eu quero processar um frame de vídeo e retornar uma lista de IDs e as coordenadas dos cantos de todos os marcadores ArUco visíveis, para que o sistema sabe quais pontos de referência estão ao seu alcance. | NA1 | 5 |
| US05 | Como o módulo de localização, eu quero usar os dados de um marcador detectado e os parâmetros de calibração da câmera para calcular a pose 6D do drone em relação ao marcador, para que eu possa ter uma medição precisa de posição e orientação. | NA1, NA2 | 8 |
| US06 | Como o módulo de visão, eu quero aplicar uma máscara de cor e contornar uma linha no chão, para que o módulo de navegação tenha uma referência de caminho para seguir. | NA1 | 3 |
| US07 | Como o planejador de missão, eu quero implementar uma máquina de estados que transite entre PROCURANDO_MARCADOR, CENTRALIZANDO e POUSANDO, para que o drone possa executar a missão de pouso de precisão de forma autônoma e robusta. | NA3 | 5 |
| US08 | Como o sistema de localização, eu quero alimentar o stream de vídeo ao vivo do drone em uma biblioteca V-SLAM (ORB-SLAM3), para que o algoritmo possa inicializar e começar a rastrear pontos de interesse no ambiente. | NA4 | 3 |
| US09 | Como desenvolvedor, eu quero visualizar o mapa de pontos 3D gerado pelo SLAM em uma janela de visualização, para que eu possa inspecionar a qualidade e a densidade do mapa que está sendo construído. | NA4, NA5 | 3 |
| US10 | Como o módulo de navegação, eu quero receber a pose 6D estimada pelo SLAM, para que eu possa usar essa informação como a fonte primária de localização do drone em missões de navegação sem marcadores. | NA5 | 5 |
| US11 | Como desenvolvedor, eu quero executar um script que estabeleça a conexão inicial com o drone e mostre seu vídeo em uma janela, para que eu possa validar a comunicação básica e a integrity do vídeo. | CM1 | 1 |
| US12 | Como um desenvolvedor, eu quero criar um nó ROS que traduza mensagens do tópico /cmd_vel para comandos do SDK do Tello, para que o drone possa ser pilotado utilizando ROS | CM2 | 3 |
| US13 | Como o nó ROS do Tello, eu quero publicar a telemetria do drone (altitude, IMU, bateria) em seus respectivos tópicos ROS, para que ferramentas como rqt_plot possam monitorar a saúde e o estado da aeronave. | CM3 | 3 |
| US14 | Como o nó ROS do Tello, eu quero publicar os frames de vídeo da câmera no tópico /camera/image_raw, para que outros nós ROS (ex: nó de detecção de marcadores, nó de SLAM) possam processar as imagens. | CM3 | 5 |
| US15 | Como desenvolvedor, eu quero lançar uma cena de simulação que contenha um modelo do drone Tello e um chão com marcadores ArUco e linhas desenhadas, para que eu tenha um ambiente de teste virtual e repetível. | SM1,SM2, SM3, SM4 | 13 |
| US16 | Como um desenvolvedor, eu quero executar minha aplicação de "seguidor de linha" sem nenhuma modificação, e ver o drone simulado seguir a linha, para que eu possa validar a lógica completa do meu algoritmo de forma segura e rápida. | SM5 | 5 |