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 melhorada e muito mais. Abaixo descrevemos brevemente a nova funcionalidade e as diferenças. Poderá também querer ver a resposta à pergunta de como decidir se deve comprar uma CMUcam1 ou CMUcam2.

Visão Geral do Hardware#

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

A CMUcam2 utiliza o processador SX52 e a CMUcam1 utiliza o processador SX28, ambos da série de processadores SX da Ubicom. Em ambos os casos, o processador funciona a 75 MHz, pelo que não há diferença na velocidade do processador ou na capacidade computacional. As vantagens do processador SX52 são que tem mais RAM (262 vs. 136 bytes), mais ROM (4096 vs. 2048 words) e mais pinos de I/O. Mais RAM e ROM significaram que pudemos escrever código mais complexo, o que nos permitiu incorporar mais funcionalidade na CMUcam2. O maior número de pinos de I/O significou que tínhamos mais pinos sobrantes 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 frame buffer AL422B da AverLogic, enquanto a CMUcam1 não. Isto permite ao hardware da CMUcam2 captar rapidamente um único frame completo e armazená-lo na memória do frame buffer. Isto tem várias vantagens:

  • Processamento Mais Complexo. Na CMUcam1, o processador tinha de processar o fluxo de dados de pixels em tempo real, à medida que era gerado pelo módulo da câmara. Este design ajudou a reduzir a complexidade e o custo do hardware do sistema. No entanto, limitava a complexidade do processamento, porque este tinha de ser efetuado em tempo real entre pixels ou entre linhas da imagem. Como o processador da CMUcam2 acede aos dados de pixels do frame buffer ao seu próprio ritmo, pode efetuar um processamento mais complexo por pixel.

  • Processamento Mais Rápido. O outro lado de não ter de permanecer sincronizado com o fluxo de pixels do módulo da câmara é que o processador não tem de esperar pelo módulo da câmara quando precisa de dados de pixels. Eliminar este tempo de espera significa que o processador da CMUcam2 consegue efetivamente processar um fotograma mais depressa do que a CMUcam1, apesar de o processador não ser mais potente.

  • Múltiplas Operações Por Fotograma. Como a imagem armazenada no frame buffer não muda, a CMUcam2 pode efetuar várias operações num único fotograma. Assim, por exemplo, é possível detetar movimento, calcular estatísticas de regiões e seguir várias cores, tudo num único fotograma.

  • Melhores Frame Dumps. Como a CMUcam1 tinha de sincronizar os dados do frame dump transmitido com o fluxo de dados do módulo da câmara, só podia enviar uma coluna de dados por fotograma da câmara. Isto significava que diferentes partes da imagem eram capturadas em momentos diferentes, pelo que objetos em movimento rápido apareciam esborratados nos frame dumps da CMUcam1. Uma vez que a CMUcam2 transmite a imagem a partir dos dados fixos no frame buffer, isto deixou de ser um problema.

  • Melhor Gestão de Baud Rates Mais Baixos. Ter um frame buffer também significa que a temporização dos dados transmitidos pela CMUcam2 pode ser completamente dissociada da temporização dos dados lidos do módulo da câmara. Isto significa que os dados da CMUcam2 provenientes de frame dumps e de modos de linha bitmap não mudam quando o baud rate das comunicações muda; a CMUcam2 comunicará os mesmos dados de fotograma ou de bitmap ao processador anfitrião, independentemente do baud rate. No entanto, o número de fotogramas processados por segundo pode ainda mudar com baud rates mais baixos, porque continua a precisar de concluir o envio de todos os dados de um fotograma antes de os seguintes poderem ser processados.

  • Melhor Funcionamento do Módulo da Câmara. Para que o processador da CMUcam1 pudesse permanecer sincronizado com o fluxo de dados do módulo da câmara, a taxa de fotogramas do módulo da câmara tinha de ser reduzida para 17 fps. O frame buffer que a CMUcam2 utiliza permite-nos operar o módulo da câmara à velocidade máxima de fotogramas. Uma vantagem disto é que o ajuste automático de exposição e de balanço de brancos da câmara pode funcionar mais rapidamente, porque só pode fazer um único ajuste por fotograma e agora há mais fotogramas por segundo. A segunda vantagem é que a saída de vídeo analógico a preto e branco (que só funciona quando o módulo está a operar à taxa máxima de fotogramas) pode ser utilizada enquanto a CMUcam2 está a processar dados de imagem, o que não acontecia com a CMUcam1.

Visão Geral da Funcionalidade#

A CMUcam2 implementa toda a funcionalidade da CMUcam1 e adiciona também muita funcionalidade nova. Segue-se um resumo.

  • Seguimento de Cor. A CMUcam2 implementa o seguimento de cor tal como a CMUcam1 fazia. Tal como na CMUcam1, está implementado um modo de linha bitmap opcional que transmite um bitmap dos pixels seguidos. Existem também alguns melhoramentos. Existe um novo modo de linha opcional que fornece estatísticas dos pixels seguidos para cada linha, incluindo as posições média, mínima e máxima dos pixels seguidos. Isto é muito útil para o seguimento de linha. Existe também um novo modo opcional em que a interpretação dos limites de seguimento pode ser invertida. Neste modo, os pixels fora dos limites de seguimento são considerados «bons». Isto é útil para seguir um objeto contra um fundo homogéneo – pense nos efeitos especiais de blue screen. É também útil para detetar arestas quando o pixel differencing (descrito abaixo) está ativado. A opção de filtragem de ruído também foi melhorada para permitir o ajuste da quantidade de filtragem em situações de ruído.

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

  • Deteção de Movimento. Completamente novos na CMUcam2 são os comandos de deteção de movimento (frame differencing). Estes comandos podem ser utilizados para instruir a CMUcam2 a captar uma versão de baixa resolução da imagem atual e a compará-la continuamente com as novas imagens recebidas. Os pacotes da CMUcam2 indicam se alguma parte da imagem muda mais do que uma quantidade especificada, o que poderia indicar movimento. Estes pacotes podem descrever o centroide e a extensão dos blocos de imagem alterados ou fornecer um bitmap dos blocos de imagem que foram alterados. Este modo também pode ser combinado com o pixel differencing (descrito abaixo) para tornar a deteção de movimento mais robusta a alterações de iluminação.

  • Histogramas. Completamente novos na CMUcam2 são os comandos de cálculo de histogramas. Estes comandos podem ser utilizados para captar um histograma unidimensional de um único canal de cor com uma resolução de até 28 bins. Os histogramas fornecem informação útil que resume o aspeto de uma imagem. Com programação adicional no processador anfitrião, esta informação pode ser utilizada para ajudar a detetar 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 tal como a CMUcam1 fazia. Na CMUcam2, esta função é ainda mais útil porque pode ser utilizada para examinar de perto subjanelas de uma única imagem armazenada no frame buffer. Além disso, reduzir o tamanho vertical da janela pode ser utilizado para aumentar bastante os fotogramas processados por segundo, reduzindo bastante o número de pixels que a CMUcam2 precisa de processar.

  • Personalização dos Pacotes de Saída. A CMUcam2 implementa uma personalização de pacotes muito mais flexível do que a CMUcam1. Existem comandos que permitem ao utilizador personalizar cada pacote gerado por cada comando para devolver apenas os valores necessários para uma aplicação específica. Isto pode reduzir bastante a quantidade de dados transmitidos para o processador anfitrião e processados por este em muitas situações.

  • Pixel Differencing. Completamente novo na CMUcam2 é um modo opcional de pixel differencing. No modo de pixel differencing, os pixels são pré-processados antes de serem passados para o resto do código da CMUcam2. Este passo de pré-processamento envia para o resto do código novos valores de pixels que correspondem à diferença entre o valor do pixel atual e o anterior. Basicamente, o que isto faz é filtrar tudo exceto as arestas verticais da imagem. Esta é uma operação muito poderosa e, com programação adicional no processador anfitrião, pode ser utilizada para ajudar na deteção de obstáculos e no seguimento de linha.

  • Down Sampling. Completamente novo na CMUcam2 é um modo opcional de down sampling. No modo de down sampling, o software da CMUcam2 reduz a resolução da imagem da câmara antes de a processar. A vantagem disto é que há muito menos pixels para processar e transmitir. Como é feito em software, o down sampling resulta apenas num aumento muito pequeno da velocidade de processamento. O grande benefício está na redução da quantidade de dados transmitidos. No caso de um fotograma de imagem descarregado (dumped), o down sampling pode reduzir facilmente o tamanho dos dados e, por conseguinte, reduzir o tempo de transmissão por um fator de 2, 4 ou mais. Da mesma forma, quando são utilizados os modos de linha bitmap, o tamanho da imagem bitmap pode ser bastante reduzido, diminuindo a quantidade de dados que um processador anfitrião tem de receber e processar.

  • Controlo de Servos. A CMUcam1 original suportava apenas um único servo e esse servo só funcionava corretamente a baud rates específicos e quando a CMUcam1 estava em modo de streaming. A CMUcam2 suporta até cinco servos. O código do controlador de servos na CMUcam2 está implementado como um processo em segundo plano, pelo que as saídas dos servos permanecem sempre estáveis e pode ser utilizado como qualquer outro controlador de servos. Além disso, a CMUcam2 pode ser configurada para controlar automaticamente servos de pan e tilt. Neste modo, a CMUcam2 atualiza as posições dos servos sempre que é comandada para calcular dados de seguimento de cor.

  • Poupança de Energia. Completamente novos na CMUcam2 são os modos de poupança de energia. Em algumas aplicações, a CMUcam2 não precisa de processar continuamente dados de imagem. Nesses casos, a CMUcam2 pode ser comandada para entrar numa variedade de modos de baixo consumo (ou de suspensão). Nenhum comando de seguimento ou controlo de servo ocorre quando a CMUcam2 está num destes modos. Enviar um simples comando série reativa a câmara em poucos milissegundos.

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

Introdução#

Em termos de capacidades, o sensor OV7620 é um sensor de maior resolução (664x492 localizações de sensor raw) do que o sensor OV6620 (356x292 localizações de sensor raw). Mas este facto tem muito pouco a ver com as questões que surgem ao considerar qual destes sensores melhor se adequa à sua aplicação da CMUcam2. Segue-se uma lista de considerações.

Resolução#

Embora seja verdade que o sensor OV7620 é um sensor de maior resolução do que o OV6620, devido ao tamanho fixo de memória do frame buffer da CMUcam2, a CMUcam2 só suporta 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, utilizando o OV6620 em modo de alta resolução, é possível alcançar efetivamente um funcionamento de maior resolução do que o modo de resolução única disponível para o sensor OV7620.

Taxa de Fotogramas#

Outra questão relacionada com a resolução é a taxa máxima de fotogramas ao processar continuamente um fluxo de imagens. Quanto mais baixa a resolução, menos pixels precisam de ser processados e maior a taxa de fotogramas alcançável. Embora se possa conseguir um aumento da taxa de fotogramas alterando a taxa de down sampling e o tamanho da janela virtual, o número real de pixels produzido pelo sensor tem um efeito muito maior. Por causa disto, a CMUcam2 pode alcançar uma taxa de fotogramas muito mais elevada quando o OV6620 é operado no seu modo de baixa resolução do que no 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 produz saída em formato PAL analógico e o sensor OV7620 produz saída em formato NTSC analógico. Em ambos os casos, a saída é a preto e branco.

É importante notar que na maioria das utilizações da CMUcam2 a saída analógica não será utilizada. Numa aplicação típica, os resultados do processamento da imagem ou os pixels raw são transmitidos digitalmente através da porta série para o computador anfitrião ou microcontrolador, pelo que isto não é um problema. No entanto, se o vídeo a preto e branco em tempo real for importante, poderá querer ter em conta o formato da saída de vídeo analógico.

Resumo#

A nossa recomendação é que o módulo OV6620 é a melhor escolha para quase todas as aplicações, especialmente tendo em conta o seu custo mais baixo e o tempo de processamento mais rápido conseguido com este módulo. Nas raras aplicações em que é necessária saída de vídeo analógico monocromático NTSC, poderá querer considerar o OV7620.

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

Sim. Na versão 1.00, o comando «RM» (Raw Mode) não funcionava corretamente. A versão 1.01 corrige esse problema.

O firmware da CMUcam2 é atualizável, mas é necessário um programador SX-Key (ou compatível) para o fazer. Os ficheiros «hex» para as imagens ROM estão disponíveis na página Transferências.