Perguntas Frequentes#

Quais são as diferenças entre a CMUcam1 e a CMUcam2?#

Introdução#

A CMUcam2 inclui toda a funcionalidade da CMUcam1 de forma aprimorada e muito mais. Abaixo, descrevemos brevemente as novas funcionalidades e as diferenças. Você também pode querer ver a resposta à pergunta sobre como decidir se deve comprar uma CMUcam1 ou uma CMUcam2.

Visão Geral do Hardware#

Existem duas diferenças principais de hardware que são importantes: a CMUcam2 usa um processador diferente da CMUcam1 e a CMUcam2 incorpora um chip de buffer de quadros, enquanto a CMUcam1 não.

A CMUcam2 usa o processador SX52 e a CMUcam1 usa o processador SX28, ambos da série de processadores SX da Ubicom. Em ambos os casos, o processador roda a 75 MHz, então não há diferença na velocidade do processador ou no poder computacional. As vantagens do processador SX52 são que ele tem mais RAM (262 vs. 136 bytes), mais ROM (4096 vs. 2048 words) e mais pinos de E/S. Mais RAM e ROM significavam que podíamos escrever código mais complexo, o que nos permitiu incorporar mais funcionalidades na CMUcam2. O maior número de pinos de E/S significava que tínhamos mais pinos sobrando para outras funções – como mais servos, mais jumpers de configuração, etc.

A grande diferença entre os dois sistemas é que a CMUcam2 inclui o chip de buffer de quadros AL422B da AverLogic, enquanto a CMUcam1 não. Isso permite que o hardware da CMUcam2 capture rapidamente um único quadro completo e o armazene na memória do buffer de quadros. Isso tem várias vantagens:

  • Processamento Mais Complexo. Na CMUcam1, o processador tinha que processar o fluxo de dados de pixel em tempo real, à medida que era emitido pelo módulo de câmera. Este projeto ajudava a reduzir a complexidade e o custo do hardware do sistema. No entanto, limitava a complexidade do processamento porque ele tinha que ser realizado em tempo real entre pixels ou entre linhas da imagem. Como o processador da CMUcam2 acessa os dados de pixel do buffer de quadros em seu próprio ritmo, ele pode realizar um processamento mais complexo por pixel.

  • Processamento Mais Rápido. O outro lado de não ter que permanecer sincronizado com o fluxo de pixels do módulo de câmera é que o processador não precisa esperar pelo módulo de câmera quando precisa de dados de pixel. Eliminar esse tempo de espera significa que o processador da CMUcam2 pode, na verdade, processar um quadro mais rápido do que a CMUcam1 consegue, mesmo que o processador não seja mais potente.

  • Múltiplas Operações Por Quadro. Como a imagem armazenada no buffer de quadros não muda, a CMUcam2 pode realizar múltiplas operações em um único quadro. Assim, por exemplo, o movimento poderia ser detectado, as estatísticas de região poderiam ser calculadas e várias cores poderiam ser rastreadas, tudo em um único quadro.

  • Melhores Despejos de Quadro (Frame Dumps). Como a CMUcam1 tinha que sincronizar os dados de despejo de quadro transmitidos com o fluxo de dados do módulo de câmera, ela só podia enviar uma coluna de dados por quadro da câmera. Isso significava que diferentes partes da imagem eram capturadas em momentos diferentes, de modo que objetos em movimento rápido ficavam borrados nos despejos de quadro da CMUcam1. Como a CMUcam2 transmite a imagem a partir dos dados fixos no buffer de quadros, isso não é mais um problema.

  • Melhor Tratamento de Taxas de Baud Mais Baixas. Ter um buffer de quadros também significa que a temporização dos dados transmitidos pela CMUcam2 pode ser completamente desacoplada da temporização dos dados lidos do módulo de câmera. Isso significa que os dados da CMUcam2 provenientes de despejos de quadro e modos de linha de bitmap não mudam quando a taxa de baud das comunicações muda; a CMUcam2 comunicará os mesmos dados de quadro ou bitmap ao processador host, independentemente da taxa de baud. No entanto, o número de quadros processados por segundo ainda pode mudar com taxas de baud mais lentas, porque ela ainda precisa eventualmente concluir o envio de todos os dados de um quadro antes que os seguintes possam ser processados.

  • Melhor Operação do Módulo de Câmera. Para que o processador na CMUcam1 pudesse permanecer sincronizado com o fluxo de dados do módulo de câmera, a taxa de quadros do módulo de câmera tinha que ser reduzida para 17 fps. O buffer de quadros que a CMUcam2 utiliza nos permite operar o módulo de câmera na velocidade total de quadros. Uma vantagem disso é que o ajuste automático de exposição e balanço de branco da câmera pode operar mais rapidamente, porque só pode fazer um único ajuste por quadro e agora há mais quadros por segundo. A segunda vantagem é que a saída de vídeo analógico em preto e branco (que só funciona quando o módulo está operando na taxa total de quadros) pode ser utilizada enquanto a CMUcam2 está processando dados de imagem, o que não era o caso com a CMUcam1.

Visão Geral da Funcionalidade#

A CMUcam2 implementa toda a funcionalidade da CMUcam1 e também adiciona muitas novas funcionalidades. A seguir, um resumo.

  • Rastreamento de Cor. A CMUcam2 implementa o rastreamento de cor exatamente como a CMUcam1 fazia. Como na CMUcam1, é implementado um modo de linha de bitmap opcional que transmite um bitmap dos pixels rastreados. Há também alguns aprimoramentos. Existe um novo modo de linha opcional que fornece estatísticas dos pixels rastreados para cada linha, incluindo a posição média, mínima e máxima dos pixels rastreados. Isso é muito útil para o seguimento de linhas. Há também um novo modo opcional no qual a interpretação dos limites de rastreamento pode ser invertida. Neste modo, os pixels fora dos limites de rastreamento são considerados “bons”. Isso é útil para rastrear um objeto contra um fundo homogêneo – pense em efeitos especiais de tela azul. Também é útil para detectar bordas quando a diferenciação de pixels (descrita abaixo) está habilitada. A opção de filtragem de ruído também foi aprimorada para permitir o ajuste da quantidade de filtragem em situações ruidosas.

  • Estatísticas de Imagem. A CMUcam2 implementa o cálculo das estatísticas de média e variação de regiões da imagem exatamente como a CMUcam1 fazia. Como na CMUcam1, é implementado um modo de linha opcional que transmite a média de cada linha da imagem. Há também um novo modo de linha aprimorado que opcionalmente inclui informações de variação linha a linha.

  • Detecção de Movimento. Completamente novos na CMUcam2 são os comandos de detecção de movimento (diferenciação de quadros). Esses comandos podem ser usados para instruir a CMUcam2 a capturar uma versão de baixa resolução da imagem atual e compará-la continuamente com novas imagens recebidas. Os pacotes da CMUcam2 relatam se alguma parte da imagem muda mais do que uma quantidade especificada, o que poderia potencialmente indicar movimento. Esses pacotes podem descrever o centroide e a extensão dos blocos de imagem alterados ou fornecer um bitmap indicando quais blocos de imagem foram alterados. Este modo também pode ser combinado com a diferenciação de pixels (descrita abaixo) para tornar a detecção de movimento mais robusta a mudanças de iluminação.

  • Histogramação. Completamente novos na CMUcam2 são os comandos de computação de histograma. Esses comandos podem ser usados para capturar um histograma unidimensional de um único canal de cor com uma resolução de até 28 bins. Os histogramas fornecem informações úteis que resumem a aparência de uma imagem. Com programação adicional no processador host, essas informações podem ser usadas para ajudar na detecção de obstáculos, objetos específicos ou localizações.

  • Janelamento de Imagem. A CMUcam2 implementa a capacidade de restringir o processamento a uma pequena região (subjanela) da imagem completa exatamente como a CMUcam1 fazia. Na CMUcam2, esta função é ainda mais útil porque pode ser usada para examinar de perto subjanelas de uma única imagem armazenada no buffer de quadros. Além disso, reduzir o tamanho vertical da janela pode ser usado para aumentar bastante os quadros processados por segundo, reduzindo enormemente o número de pixels que precisam ser processados pela CMUcam2.

  • Personalização de Pacotes de Saída. A CMUcam2 implementa uma personalização de pacotes muito mais flexível do que a CMUcam1. Há comandos que permitem ao usuário personalizar cada pacote gerado por cada comando para retornar apenas os valores necessários para uma aplicação específica. Isso pode diminuir bastante a quantidade de dados transmitidos e processados pelo processador host em muitas situações.

  • Diferenciação de Pixels. Completamente novo na CMUcam2 é um modo opcional de diferenciação de pixels. No modo de diferenciação de pixels, os pixels são pré-processados antes de serem passados para o restante do código da CMUcam2. Esta etapa de pré-processamento envia novos valores de pixel para o restante do código, que são a diferença entre o valor do pixel atual e o anterior. Basicamente, o que isso faz é filtrar tudo, exceto as bordas verticais na imagem. Esta é uma operação muito poderosa e, com programação adicional no processador host, pode ser usada para auxiliar na detecção de obstáculos e no seguimento de linhas.

  • Redução de Amostragem (Down Sampling). Completamente novo na CMUcam2 é um modo opcional de redução de amostragem. No modo de redução de amostragem, o software da CMUcam2 reduz a resolução da imagem da câmera antes de processá-la. A vantagem disso é que há muito menos pixels para processar e transmitir. Como é feito por software, a redução de amostragem resulta em apenas um aumento muito pequeno na velocidade de processamento. O grande benefício está na redução da quantidade de dados transmitidos. No caso de um quadro de imagem despejado, a redução de amostragem pode facilmente reduzir o tamanho dos dados e, portanto, reduzir o tempo de transmissão por um fator de 2 ou 4 ou mais. Da mesma forma, quando os modos de linha de bitmap são usados, o tamanho da imagem de bitmap pode ser bastante reduzido, diminuindo a quantidade de dados que um processador host tem que receber e processar.

  • Controle de Servo. A CMUcam1 original suportava apenas um único servo, e esse servo só operava corretamente em taxas de baud específicas e quando a CMUcam1 estava no modo de streaming. A CMUcam2 suporta até cinco servos. O código do controlador de servo na CMUcam2 é implementado como um processo em segundo plano, de modo que as saídas dos servos sempre permanecem estáveis e ele pode ser usado como qualquer outro controlador de servo seria usado. Além disso, a CMUcam2 pode ser configurada para controlar automaticamente os servos de pan e tilt. Neste modo, a CMUcam2 atualizará as posições dos servos cada vez que for comandada a calcular dados de rastreamento de cor.

  • Economia de Energia. Completamente novos na CMUcam2 são os modos de economia de energia. Em algumas aplicações, a CMUcam2 não é necessária para processar dados de imagem continuamente. Nesses casos, a CMUcam2 pode ser comandada para entrar em uma variedade de modos de desligamento (ou hibernação). Nenhum comando de rastreamento ou controle de servo acontecerá quando a CMUcam2 estiver em um desses modos. Enviar um simples comando serial acorda a câmera novamente em alguns milissegundos.

Qual é a diferença entre usar o módulo OV6620 e o OV7620 com a CMUcam2?#

Introdução#

Em termos de capacidades, o sensor OV7620 é um sensor de resolução mais alta (664x492 localizações brutas do sensor) do que o sensor OV6620 (356x292 localizações brutas do sensor). Mas esse fato tem muito pouco a ver com as questões que surgem ao considerar qual desses sensores melhor se adequa à sua aplicação da CMUcam2. A seguir, uma lista de considerações.

Resolução#

Embora seja verdade que o sensor OV7620 seja um sensor de resolução mais alta do que o OV6620, devido ao tamanho fixo de memória do buffer de quadros da CMUcam2, a CMUcam2 suporta apenas uma única resolução de 160x239 para o sensor OV7620. A CMUcam2 suporta um modo de baixa resolução de 88x143 e um modo de alta resolução de 176x255 para o sensor OV6620. Assim, usando o OV6620 no modo de alta resolução, é possível, na verdade, alcançar uma operação de resolução mais alta do que o modo de resolução única disponível para o sensor OV7620.

Taxa de Quadros#

Outra questão relacionada à resolução é a taxa máxima de quadros ao processar continuamente um fluxo de imagens. Quanto menor a resolução, menos pixels precisam ser processados e maior a taxa de quadros alcançável. Embora um aumento na taxa de quadros possa ser obtido alterando a taxa de redução de amostragem e o tamanho da janela virtual, o número real de pixels emitidos pelo sensor tem um efeito muito maior. Por causa disso, a CMUcam2 pode alcançar uma taxa de quadros muito mais alta quando o OV6620 é operado em seu modo de baixa resolução do que o modo de resolução única disponível para o OV7620.

Saída de Vídeo Analógico#

Outra diferença entre os dois sensores é o formato da saída de vídeo analógico dos dois sensores. O sensor OV6620 emite no formato analógico PAL e o sensor OV7620 emite no formato analógico NTSC. Em ambos os casos, a saída é em preto e branco.

É importante observar que na maioria dos usos da CMUcam2 a saída analógica não será utilizada. Em uma aplicação típica, os resultados do processamento da imagem ou os pixels brutos são transmitidos digitalmente pela porta serial ao computador host ou microcontrolador, então isso não é um problema. No entanto, se o vídeo ao vivo em preto e branco for importante, então você pode querer levar em conta o formato da saída de vídeo analógico.

Resumo#

Nossa recomendação é que o módulo OV6620 é a melhor escolha para quase todas as aplicações, especialmente considerando seu menor custo e o tempo de processamento mais rápido alcançável com este módulo. Nas raras aplicações em que é necessária a saída de vídeo analógico monocromático NTSC, você pode querer considerar o OV7620.

Existem problemas conhecidos com as versões atuais do firmware da CMUcam2?#

Sim. No lançamento 1.00, o comando “RM” (Raw Mode) não funcionava corretamente. O lançamento 1.01 corrige esse problema.

O firmware na CMUcam2 é atualizável, mas um programador SX-Key (ou compatível) é necessário para fazê-lo. Os arquivos “hex” das imagens de ROM estão disponíveis na página de Downloads.