Tutorial OpenCV com Microsoft Visual C#

Olá pessoal,

Como parte do processo de desenvolvimento de nosso projeto com robôs aéreos, mais especificamente o segmento relacionado ao processamento de imagens usando visão computacional, o uso da ferramenta livre OpenCV, desenvolvida pela Intel, é indispensável. Originalmente desenvolvido para uso junto às linguagens c/c++, o OpenCV é uma poderosa biblioteca gráfica que permite a realização de inúmeras tarefas envolvendo desde filtragem de imagens/vídeos a reconhecimento de padrões.

Em determinadas circunstâncias, é desejável empregar o processamento de imagens em projetos cujo desenvolvimento se dá nas demais linguagens e IDEs existentes. Uma dessas IDEs é o Visual C#, desenvolvido pela Microsoft como parte do pacote .NET (Dot NET). O Visual C# é uma excelente e poderosa ferramenta para desenvolvimento de aplicações envolvendo GUI (interfaces gráficas) por simplificar a tarefa do programador nesse sentido. Caso você esteja programando sistemas de visão em Visual C++, eu recomendo o tutorial do meu amigo André Carmona, o qual você pode acessar aqui.

Entretanto, como mencionado acima, o OpenCV foi escrito originalmente para integra-se às IDEs com suporte às linguagens c/c++, não sendo possível a sua integração direta ao Microsoft Visual C#. No entanto, há (felizmente!) uma distribuição (também denominadas wrappers) própria para a integração entre OpenCV e C# chamada EMGU CV (http://www.emgu.com/wiki/index.php/Main_Page) .

Neste tutorial, irei ensiná-los a efetuar essa integração de maneira que você possa, com sucesso, desenvolver suas aplicações em Visual C# utilizando-se dos poderosos recursos oferecidos pelo OpenCV.

Integração Entre OpenCV e Visual C#

Considerarei, a partir de agora, que você já possui o pacote OpenCV devidamente instalado em seu PC. Caso não tenha, você pode baixá-lo aqui.

1. Baixe o arquivo contendo o wrapper do EMGU CV (libemgucv-windows-x86-2.3.0.1416) aqui.

2. Para instalar o pacote, selecione o local de sua preferência.

3. Inicie um novo projeto no Visual C# (console ou windows form, não importa).

4. Criado o projeto, dentro do Visual C#, acesse via menu:

PROJECT >> ADD REFERENCE

5. Acesse a aba BROWSE. Busque pela pasta BIN que se encontra no diretório onde o EMGU C Sharp foi instalado.

6. Selecione os seguintes arquivos:

Emgu.CV.dll
Emgu.CV.UI.dll
Emgu.Util.dll

E seguida, clique em OK. Você notará que os arquivos pertinentes à biblioteca surgirão no SOLUTION EXPLORER, ao lado (vide figura abaixo);

7. No cabeçalho da função principal de seu programa, adicione as seguintes bibliotecas:

using Emgu.CV;
using Emgu.Util;
using Emgu.CV.Structure;

8. Agora você deverá inserir as seguintes bibliotecas ao seu projeto, as quais se encontram na pasta BIN da sua distribuição EMGU:

opencv_calib3dXXX.dll
opencv_contribXXX.dll
opencv_coreXXX.dll
opencv_features2dXXX.dll
opencv_highguiXXX.dll
opencv_imgprocXXX.dll
opencv_legacyXXX.dll
opencv_mlXXX.dll
opencv_objectdetectXXX.dll
opencv_videoXXX.dll

Onde o XXX se refere à versão do seu OpenCV (ex: 210 para versão 2.1 e assim por diante).
Para isso, com o botão direito, clique sobre o seu projeto em Solution Explorer:

ADD >> EXISTING ITEM

(OBS): Altere o filtro da pesquisa na janela (TIPO DE OBJETO), de modo que ele leia *.dll, caso os arquivos não se encontrem visíveis.

Você deverá ver as *dll no Solution Explorer:

9. O próximo passo é efetuar o download de um patch de correção da Microsoft aqui, cujo objetivo é solucionar alguns “bugs” de dependências internas do Visual C#.

10. Pronto. Se tudo tiver sido executado como descrito nos passoa acima, você já deverá ser capaz de utilizar o OpenCV no Visual C#. Faça o seguinte teste:

- Na função principal de seu programa, digite a seguinte linha de código (vide figura abaixo):

CvInvoke.cvNamedWindow(“Test de Integração C# + OpenCV”);

- Clique na tecla F5 e veja o seguinte resultado:

O comando CvInvoke é responsável por efetuar o direcionamento para o acesso às bibliotecas do OpenCV. Nesse sentido, cvNamedWindow(“Test de Integração C# + OpenCV”) é um método presente nas classes do OpenCV e, no nosso exemplo, efetua a criação de uma tela (formulário) com o título da nova janela como parâmetro principal. As demais funcionalidades do OpenCV como optical flow, reconhecimento de padrões e demais filtros pode (e devem) ser efetuados a partir deste simples exemplo.

Espero que tenham gostado do tutorial e que tenham sucesso nas suas aplicações.

Um abraço e até a próxima!

Publicado em C#, Mecatrônica, Microsof Visual C#, OpenCV, Programação, Quadricópteros, Robôs Aéreos, Simuladores de Voo, Sistemas de Controle, Teoria de Controle, Visão Computacional | 6 Comentários

Parte I: Visão Geral do Motor DC BOSCH FPGA 0130821678

Motores DC ainda oferecem muitas vantagens sobre outros tipos de motores elétricos, tais como baixo custo, boa controlabilidade e, o mais importante, baixo nível de manutenção. São amplamente empregados em aplicações mecatrônicas, sendo usados como atuadores em manipuladores robóticos (com caixas de redução), em esteiras em processos de automação e principamente em robótica móvel como sistema de propulsão em rodas para robôs terrestres e em propulsores para robótica aérea.

A modelagem do motor DC envolve a caracterização de seus parâmetros eletromecânicos. Isso significa que a dinâmica dos motores elétricos baseia-sa no comportamento mecanico dos corpos envolvidos em sua estrutura, e também no seu comportamento elétrico. Portanto, a priori, se pode dividir os seus parâmetros em elétricos e mecânicos. Essa divisão se faz importante quando da montagem da função de transferência que representa a velocidade angular do seu eixo em funçõa da tensão/corrente aplicadas aos seus terminais.

Os parâmetros mecânicos do motor DC são:

- J – Momento de inércia do corpo rotativo, ou seja, do conjunto rotor, que representa a distribuição de massa em torno do seu eixo. Tal massa é composta pela armadura e pelo enrolamento que forma a bobina.

- B- Coeficiente de atrito viscoso, que quantifica as perdas por atrito devidas à massa em rotação (momento de inércia)

- F – Coeficiente de atrito estático, que quantifica o atrito ocasionado pelo contato entre o eixo em sí e o seu suporte, principalmente quando da partida do motor. Usualmente, utiliza-se o mesmo coeficiente tanto para o corpo rotativo em repouso quanto para o mesmo em movimento.

Os parâmetros elétricos do motor DC são:

- Ra – Resistência de armadura, que quantifica a resistência elétrica do conjunto armadura-enrolamento;

- La – Indutância de armadura, que quantifica a indutância do enrolamento;

Para modelagem deste tutorial, será utilizado um motor BOSCH modelo FPGA 0130821678/679, muitoutilizados em veículos, como atuador do limpador de pára-brisas ou mesmo em vidros elétricos. O datasheet do referido moto encontra-se disponível aqui. A Fig. 1-(a) mostra o motor BOSCH modelado para este exemplo. A Fig. 1-(b) exibe um par de motores aplicados ao sistema de tração elétrica da Plataforma HELVIS

Figura 1 – Aspecto do motor DC BOSCH FPGA 0130821678 (a) e sua aplicação na Plataforma HELVIS.

Publicado em Carros Elétricos, Carros Híbridos, Controle, LabRoM, Modelagem, Motor DC, PID, Sistemas de Controle, Teoria de Controle, Uncategorized | 4 Comentários

Controlador PID Analógico para Controle de Velocidade de Motores DC

Olá pessoal,

Iniciarei, na sequência, um tutorial completo que irá envolver projetos de um sistemas de controle PID, mais conhecidos como sistemas de controle Proporcional-Integral-Derivativo.

O curso consistirá de uma introdução sobre controladores PID, dividindo-se em controladores de natureza analógica e também digital.

INTRODUÇÃO

Controladores PID são motivo de amor e ódio e divide opiniões entre engenheiros e pesquisadores. Há quem os ame e creia que qualquer aplicação seja passível de ser controlada por controladores PID e há também aqueles que apontam uma série de limitações inerentes a sua implementação e, principalmente, desempenho. Na minha condição de engenheiro de sistemas de controle, posso afirmar que ambos os lados têm suas razões. Controladores PID podem, desde que bem modelados, ser úteis em diversas tarefas mas também podem ser desastrosos dependendo de uma série de fatores pertinentes à sua aplicação. A verdade é que os muitos livros de teoria de controle clássico trazem alguns métodos de modelagem e sintonia de controladores PID (Ziegler-Nichols) e tais métodos são uma grande aproximação teórica do que deveria ser feito para se sintonizar adequadamente as parcelas P, I e D de um controlador. Na prática, não é bem assim.

Ferramentas computacionais e gráficas são bastante úteis, como é o caso do toolbox sisotool do Matlab. Entretanto, aplicações práticas estão sujeitas a inúmeras variáveis que influenciam diretamente o desempenho do sistema de controle, como inserção de ruídos, incertezas de modelagem e muitas outras.

Retornando ao cerne das aplicabilidades de um controlador PID, tive o prazer de conhecer pessoalmente e de conversar por longas horas com amigo e Eng. Peter Grauber, engenheiro responsável da divisão de sistemas de controle dos túneis de vento de testes dos ônibus espaciais da NASA, do Ames Research Center em San Francisco, Califórnia. Peter, na sua simplicidade e humildade me surpreendeu grandemente ao, dentre um café e outro, afirmar que um controlador PI é responsável efetuar os ajustes das válvulas, relés e circuitos de potência para controle dos imensos motores que “tocam” os enormes ventiladores que simulam o atrito entre a base dos ônibus espaciais e a atmosfera na reentrada. Na minha curiosidade, perguntei imediatamente: “Qual o método de sintonia que você utiliza para os ganhos P e I”. Esperando como resposta “2º. Método de Ziegler Nichols” ouvi, pronta e serenamente a seguinte resposta: “É tudo empírico, meu amigo! Não há método de sintonia que seja 100% satisfatório neste caso”.

Eu, Kleber Andrade, Naná (minha filha), Lica (minha filha), André Carmona e o Peter Grauber (NASA) em papo descontraído sobre churrasco brasileiro e controladores PID.

Pensei, “para onde foi o método de Ziegler-Nichols?”.

Portanto, meus amigos, embora a teoria de controle seja importante para o bom entendimento dos fenômenos intrínsecos à toda aplicação prática, nada como um bom experimento para se tomar a real noção das particularidades de cada uma delas.

E, como toda aplicação requer cuidado (e, acreditem, não é tão simples assim), seguirei este tutorial pela formulação do problema do sistema de controle de velocidade de um motor DC de pequeno porte.

Motores DC são sistemas dinâmicos extremante empregados em sistemas robóticos, como em juntas de garras robóticas, sistemas de tração de robôs móveis e também em sistemas de propulsão de veículos elétricos/híbridos e em robôs aéreos.

Assim, este tutorial é destinado a entusiastas, técnicos, estudantes e engenheiros. Espero que sirva como mola propulsora para muitos TCCs.

Parte I: Visão Geral do Motor DC BOSCH FPGA 0130821678

Publicado em Circuitos Analógicos, Circuitos Digitais, PID, Sistemas de Controle, Teoria de Controle | 10 Comentários

Oportunidade de Estágio/Iniciação Científica

O grupo de Robôs Aéreos do Laboratório de Robótica Móvel da USP/EESC, do qual sou líder, está oferecendo a oportunidade de estágio ou iniciação científica a alunos regularmente matriculados em cursos de engenharia ou áreas correlatas para fazerem parte da nossa equipe de visão computacional, estabilização e controle de aeronaves quadrorotoras autônomas.

Os candidatos devem possuir um bom conhecimento da linguagen c++, preferencialmente com conhecimento de interfaces gráficas (C++ Builder ou semelhante para a confecção de interfaces gráficas para o usuário). Deseja-se, adicionalmente, que o candidato já tenha trabalhado com Matlab/Simulink.

Os interessados deverão enviar seus currículos para um dos seguintes e-mails:

rafaelcoronel@gmail.com

rafaelc@sc.usp.br

 

Publicado em Uncategorized | Deixe um comentário

Mini Plataforma HELVIS e Quadrotor em Washington DC em Agosto!

Dois trabalhos técnicos, um relacinoado à plataforma HELVIS e outro ao Quadrotor, foram selecionados para publicação e apresentação no 7th International ASME/IEEE Conference on Mechatronics & Embedded Systems & Applications em Agosto próximo na cidade de Washington, DC, USA . O trabalho relacionado à plataforma HELVIS, intitulado “Parametric Vehicular Simulator in the Evaluation of HELVIS mini-HEV EDS Control” enfoca o desenvolvimento de um simulador veicular paramétrico para análise da plataforma HELVIS. Desenvolvidopara MATLAB/Simulink™, o HELVIS-SIM emula o comportamento do sistema diferencial eletrônico do veículo HELVIS, e permite o controle da tração traseira do veículo através de controladores PID clássicos, baseados em inteligência artificail tipo Neuro-Fuzzy, e também através de um controlador robusto H∞ ótimo. Já o relacionado ao Quadrotor é focado na síntese de um controlador robusto H∞ ótimo multi-variável (MIMO) na estabilização da aeronave em 2 graus de liberdade, baseado no modelo dinâmico da mesma.

 

Publicado em Carros Elétricos, Carros Híbridos, HELVIS, IA, Inteligência Artificial, LabRoM, Lógica Fuzzy, Lógica Nebulosa, Matlab, Mecatrônica, Redes Neurais, Sistemas de Controle, Teoria de Controle, Veículos Elétricos, Veículos Híbridos | Deixe um comentário

Trabalhos Relacionados a Plataforma HELVIS Selecionados para Publicação e Apresentação no VPPC 2011 em Chicago, USA em Setembro!

Olá pessoal,

Três de nossos trabalhos científicos, relacionados às nossas pesquisas com a plataforma HELVIS, foram selecionados para serem apresentados e publicados no VPPC 2011 (Vehicular Power & Propulsion Conference), a se relizar em setembro próximo na cidade de Chicago, Estados Unidos.

Um dos trabalhos relaciona-se a um simulador veicular desenvolvido pela equipe do projeto HELVIS no Lab. Robótica Móvel. O segundo apresenta a plataforma HELVIS, enfocando nas suas principais características e salientando a importância de uma plataforma em escala reduzida no ambiente acadêmico, em especial, para estudantes de graduação. O terceiro trabalho, e mais importante, apresenta uma nova proposta de arquitetura de controle para veículos híbridos, e também a síntese de um controlador H-Infinito ótimo para o controle das rodas elétricas do protótipo.

Gostaria de parabenizar os Professores Marcelo Becker e Adriano Siqueira, e os amigos, o aluno de mestrado André Carmona e Gabriel Serrano, e o alunos de iniciação científica Vinicius Fernandes pela sinergia e esforço na concretização de todos os trabalhos.

Em breve, abrirei tópicos relacionados a eles.

Um grande abraço e até a próxima!

Publicado em Uncategorized | 2 Comentários

Trabalho Publicado em 2009, Relacionado ao Des. de Sist. Aviônicos com MSFS é Publicado em Livro da ABCM!

Olá pessoal,

Tenho o prazer de comunicar que tive um trabalho selecionado para compor o
ABCM Symposium Series in Mechatronics Vol. 4, livro que visa compilar os melhores trabalhos científicos publicados em eventos da Associação Brasileira de Ciências Mecânicas.

Meu artigo, intitulado “MECHATRONIC SERVO SYSTEM APPLIED TO A SIMULATED-BASED AUTOTHROTTLE MODULE”, escrito em parceria com meu orientador, o Prof. Dr. Marcelo Becker, enfoca o design  de sistemas aviônicos baseados em simulação de voo, e foi publicado pela primeira vez no COBEM 2009.

Para os interessados, segue link para download, direto do site da ABCM:
MECHATRONIC SERVO SYSTEM APPLIED TO A SIMULATED-BASED
AUTOTHROTTLE MODULE

Tenho alguns trabalhos relacionados em andamento. Espero tê-los, em breve, publicados em outros simpósios e conferências, para que eu possa compartilhá-los com vocês.
Um abraço a todos!

Publicado em Uncategorized | Deixe um comentário