12.10. Conclusão¶
Uma câmera ligada a um cabo USB que transmite quadros para um programa host, aceita atualizações de configuração de volta do host e sobrevive a desconexões/reconexões sem perder a sincronia – com retransmissões ocultas, múltiplos fluxos lógicos compartilhando uma porta e zero código de enquadramento na aplicação – sai de cerca de quarenta linhas de código no lado da câmera e uma quantidade semelhante no host. A biblioteca do protocolo transforma um tubo de bytes em uma superfície de canais programável e mantém tudo abaixo da aplicação invisível.
12.10.1. O que o capítulo construiu¶
Um modelo mental de quatro camadas da pilha: transporte, enquadramento, confiabilidade, canais. Cada camada resolve um problema e ignora tudo que está acima.
O formato de pacote na linha – cabeçalho de 10 bytes com CRC, payload variável, CRC final. Pequeno o suficiente para percorrer byte a byte.
O handshake que a câmera e o host executam quando um transporte conecta: PROTO_SYNC, troca de capacidades, descoberta de canais.
A maquinaria de confiabilidade no topo: números de sequência, ACKs, NAKs, retransmissões com backoff exponencial, os dez códigos de status.
O modelo de canais: até 32 fluxos lógicos nomeados em uma única linha, com
stdin/stdout/stream/profileintegrados e canais de aplicação registrados por classe Python.A interface de backend –
size,read,write,poll,lock/unlock,shape,ioctl,flush,is_active– e como a biblioteca do protocolo usa os métodos presentes em um backend para decidir o que o canal suporta.O lado do host: a classe
Camerado SDK openmv-python, a taxa mágica de921600baud que coloca o USB-CDC em modo de protocolo, e o padrão de round-tripchannel_size/channel_read/channel_write.Um padrão de transmissão de quadros – captura em buffer único,
readpcom uma trava,send_eventpara notificações de novo quadro – e um padrão de configuração bidirecional (canal gravável pelo host, round-trip de JSON) que juntos formam a base de toda ferramenta de câmera interativa.
12.10.2. Roteiro de referência¶
As páginas de referência da biblioteca são os destinos de consulta quando um desses recursos surge em código real:
protocol — Canais do Protocolo OpenMV – o módulo
protocol,protocol.init(),protocol.register(),ProtocolChannel, as constantes de flag de canal e a tabela de payload máximo por câmera.O SDK do host –
pip install openmv,openmv.camera.Camera. Métodos abordados neste capítulo:update_channels(),has_channel(),channel_size(),channel_read(),channel_write(),poll_events(),read_frame(),exec()estop().O repositório openmv-projects – ferramentas reais construídas sobre a biblioteca do protocolo. O diretório tools/ inclui
thermal-overlay-calibration(interface de alinhamento RGB + térmico),ccm-tuning(ajustador de matriz de correção de cor),genx320-event-streamingegenx320-overlay-calibration(ferramentas para câmera de eventos). Cada uma usa os padrões deste capítulo de ponta a ponta.
12.10.3. Para onde levar a partir daqui¶
Algumas direções para onde os projetos de câmera seguem a partir daqui:
Construindo uma interface gráfica de host. Um canal de quadros alimentando um widget de vídeo, um ou dois canais de configuração alimentando sliders e botões. Para a própria camada de interface gráfica, o DearPyGui é a escolha natural – puro Python, instalável via pip, rápido o suficiente para visualização ao vivo, e aquilo que toda ferramenta de host OpenMV existente busca primeiro.
Painel de telemetria multicanal. Vários canais de aplicação na mesma câmera (leituras de sensor, contadores, eventos de status), cada um atualizado em seu próprio callback, e uma interface gráfica de host que os lê em um timer e renderiza cada um separadamente. O controle de fluxo independente da camada de canais significa que uma leitura lenta não trava as outras.
Ajuste remoto por UART. Os mesmos callbacks de canal; a aplicação chama
protocol.initpara trocar de USB para um transporte UART. A câmera continua rodando sem cabeça e um script Python em um Raspberry Pi ou laptop conversa com ela por uma linha serial para ajuste em campo.
O formato na linha, a camada de confiabilidade e a abstração de canais não mudam. Escolher o transporte que se encaixa na implantação e adicionar um canal para cada coisa que o host precisa ver ou definir é todo o trabalho de engenharia daqui em diante.