Correções Críticas de Concorrência, Otimização de Telemetria e Inclusão de Testes#27
Merged
MuriloBarros304 merged 1 commit intomainfrom Mar 29, 2026
Merged
Correções Críticas de Concorrência, Otimização de Telemetria e Inclusão de Testes#27MuriloBarros304 merged 1 commit intomainfrom
MuriloBarros304 merged 1 commit intomainfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Título do PR: Correções Críticas de Concorrência, Otimização de Telemetria e Inclusão de Testes
Descrição
Este PR resolve problemas graves de concorrência (Race Conditions) na comunicação UDP com o drone, otimiza a leitura de telemetria, corrige loops infinitos potenciais e melhora a arquitetura geral da classe
TelloZunepara facilitar a manutenção e os testes automatizados.Adicionalmente, implementa a primeira suíte de testes unitários com isolamento de rede (mocks) e prepara o repositório para Integração Contínua (CI).
Alterações Realizadas
Correção de Race Condition nos Comandos (Thread-Safety):
cmd_recv_ev), causando cruzamento de pacotes UDP.threading.Lock(self.cmd_lock) no métodosend_cmd_return. Agora a porta 8889 é bloqueada de forma segura até que o comando atual receba sua resposta ou sofra timeout. Foi removido também um envio duplicado que ocorria no_read_queue.Otimização da Leitura de Velocidade (Fim do gargalo de rede):
get_speed()enviava ativamente o comando"speed?"pela porta de comandos, concorrendo com os movimentos do drone e atrasando o script.get_speed()agora faz a leitura passiva dos valoresvgx,vgyevgzdiretamente da memória (self.state_value), que já é populada continuamente a ~10Hz pela thread de estado na porta 8890.Prevenção de Loop Infinito no Pouso (
land):land()ficaria preso para sempre num laçowhile answer != 'ok'.max_trys = 3) e um timeout de 5 segundos por tentativa, garantindo que o script possa falhar graciosamente e continuar a execução/encerramento.Padronização de Imports e Refatoração:
socket,cv2) estavam sendo importadas dentro do método__init__, ferindo a PEP 8 e dificultando a criação de mocks para testes.Correção da Lógica de Pausa em Rotas (
_execute_route):time.sleep()dentro do loop de inserção da rota apenas atrasava o enfileiramento dos comandos, não o tempo de espera do drone no ar, pois a thread_read_queueconsumia a fila instantaneamente.delay X. A rota agora enfileira esse comando, e a thread_read_queueo intercepta, realizando a pausa real do script (e do drone) entre os movimentos.Remoção de Lag na Thread de Estado (
_state_receive):wait(0.1)artificial estava sendo chamado logo após orecvfrom(que já é bloqueante e ditado pelo clock do drone). Isso fazia os pacotes UDP acumularem na fila do SO, gerando leituras atrasadas ao longo do tempo.wait(), permitindo que a thread processe os estados na mesma velocidade em que o Tello os envia, mantendo a lógica deperiodpara evitar sobrecarga de processamento nas formatações.