12.10. Conclusão¶
Uma câmara ligada a um cabo USB que transmite fotogramas para um programa anfitrião, aceita atualizações de configuração do anfitrião, e sobrevive a desligar/religar sem perder sincronização – com retransmissões ocultas, múltiplos fluxos lógicos partilhando uma porta, e zero código de enquadramento na aplicação – resulta de cerca de quarenta linhas de código no lado da câmara e uma quantidade semelhante no anfitrião. A biblioteca de protocolo transforma um tubo de bytes numa 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, fiabilidade, canais. Cada camada resolve um problema e ignora tudo o que está acima.
O formato do pacote no fio – 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âmara e o anfitrião executam quando um transporte se liga: PROTO_SYNC, troca de capacidades, descoberta de canais.
A maquinaria de fiabilidade por cima: números de sequência, ACKs, NAKs, retransmissões com backoff exponencial, os dez códigos de estado.
O modelo de canais: até 32 fluxos lógicos com nome num único fio, com
stdin/stdout/stream/profileintegrados e canais de aplicação registados por classe Python.A interface de backend –
size,read,write,poll,lock/unlock,shape,ioctl,flush,is_active– e como a biblioteca de protocolo utiliza os métodos presentes num backend para decidir o que o canal suporta.O lado do anfitrião: 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 ida e voltachannel_size/channel_read/channel_write.Um padrão de transmissão de fotogramas – captura em buffer único,
readpcom bloqueio,send_eventpara notificações de novo fotograma – e um padrão de configuração bidirecional (canal gravável pelo anfitrião, ida e volta JSON) que juntos formam a base de todas as ferramentas de câmara interativas.
12.10.2. Roteiro de referência¶
As páginas de referência da biblioteca são os destinos de consulta quando uma destas funcionalidades surge em código real:
protocol — Canais do Protocolo OpenMV – o módulo
protocol,protocol.init(),protocol.register(),ProtocolChannel, constantes de flags de canal, e a tabela de payload máximo por câmara.O SDK do anfitrião –
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 de protocolo. O diretório tools/ inclui
thermal-overlay-calibration(GUI de alinhamento RGB + térmico),ccm-tuning(sintonizador de matriz de correção de cor),genx320-event-streamingegenx320-overlay-calibration(ferramentas para câmaras de eventos). Cada uma usa os padrões deste capítulo do início ao fim.
12.10.3. Para onde ir a seguir¶
Algumas direções que os projetos de câmara tomam a partir daqui:
Construir uma GUI para o anfitrião. Um canal de fotogramas alimentando um widget de vídeo, um ou dois canais de configuração alimentando controlos deslizantes e botões. Para a camada de GUI em si, DearPyGui é a escolha natural – Python puro, instalável via pip, rápido o suficiente para pré-visualização em tempo real, e o que todas as ferramentas existentes do anfitrião OpenMV usam em primeiro lugar.
Painel de telemetria multicanal. Vários canais de aplicação na mesma câmara (leituras de sensores, contadores, eventos de estado) cada um atualizado no seu próprio callback, e uma GUI do anfitrião que os lê num temporizador e renderiza cada um separadamente. O controlo de fluxo independente da camada de canais significa que uma leitura lenta não bloqueia as outras.
Ajuste remoto por UART. Os mesmos callbacks de canal; a aplicação chama
protocol.initpara mudar de USB para um transporte UART. A câmara continua a funcionar sem interface e um script Python num Raspberry Pi ou portátil comunica com ela por uma linha série para ajuste em campo.
O formato do fio, a camada de fiabilidade e a abstração de canais não mudam. Escolher o transporte adequado à implementação e adicionar um canal para cada coisa que o anfitrião precisa de ver ou definir é todo o trabalho de engenharia daqui para a frente.