Escolar Documentos
Profissional Documentos
Cultura Documentos
1
MATHIAS NEGRÃO KUX
RAFAEL DE MELLO VILLATORE
2
Kux, Mathias Negrão
Interface de controle robótico de alto nível associado a
FPGA/Mathias Negrão Kux, Rafael de Mello Villatore, Wânderson de
Oliveira Assis – São Caetano do Sul, SP : IMT-CEUN, 2014.
59p.
1. Controle Robótico 2. FPGA 3. Servomotor 4. BeagleBone Black
5. DE0-Nano I. Kux, Mathias Negrão. II. Villatore, Rafael de Mello.
III. Assis, Wânderson de Oliveira. IV. Instituto Mauá de Tecnologia.
Centro Universitário. V. Interface de controle robótico de alto nível
associado a FPGA.
3
LISTA DE FIGURAS
4
FIGURA 35 – CONFIGURAÇÃO BEM SUCEDIDA DE UM DEBBUGER ...................................................................... 58
FIGURA 36 – CONFIGURAÇÃO FINAL DO QT ......................................................................................................... 59
5
SUMÁRIO
5 HARDWARE ............................................................................................................................................16
6 SOFTWARE..............................................................................................................................................19
7 FPGA .......................................................................................................................................................21
6
7.4.1 Bloco Esquemático .................................................................................................................... 25
7
10.1 VISÃO GERAL ............................................................................................................................................ 47
10.2 SISTEMA OPERACIONAL .............................................................................................................................. 47
10.3 COMPILAÇÃO CRUZADA .............................................................................................................................. 48
10.4 QT E QT CREATOR ..................................................................................................................................... 48
10.5 CONFIGURAÇÃO ........................................................................................................................................ 48
8
1 RESUMO
9
2 ABSTRACT
10
3 INTRODUÇÃO
11
3.1 OBJETIVO
3.2 MOTIVAÇÃO
12
A figura 1 mostra o kit ROBONOVA-1 montado conforme o manual de fábrica:
13
4 APRESENTAÇÃO DOS COMPONENTES
celulares
computadores
roteadores
14
calculadoras
televisores
15
5 HARDWARE
O processador é o responsável por decidir qual será a próxima ação a ser tomada pelo
sistema com base nos dados que ele recebe por intermédio do FPGA e dos sensores, então
envia de volta ao FPGA uma mensagem dizendo qual ação será feita a seguir.
No FPGA é feita a parte principal do controle. O comando recebido é interpretado
pelo FPGA e é dividido em instruções para cada atuador que implementará aquela ação. Além
disso, essas instruções são traduzidas para o protocolo utilizado para ser feita a comunicação
com cada atuador. O uso de um FPGA é, na prática, a única saída, pois não há outra forma de
se atingir os requisitos de desempenho necessários para o funcionamento do sistema. Pode-se
cogitar pelo uso de um processador de altíssima velocidade, mas essa solução seria muito
menos acessível, além de consumir muito mais energia, características que inviabilizam o uso
desse tipo de abordagem, uma vez que o objetivo deste projeto é construir uma plataforma
barata e será alimentada por uma bateria.
A figura 2 ilustra a placa DE0 – Nano, que apresenta tecnologia FPGA, utilizada no
projeto:
16
Figura 2 – Imagem da placa com tecnologia FPGA (DE0-Nano)
Se, por exemplo, o robô estiver caído de costas no chão, um sensor como o
acelerômetro fará a medição da aceleração e enviará essa informação ao FPGA. Nesse
dispositivo há um tratamento dessa informação e ela será então, enviada ao processador. O
processador, de posse da leitura, já tratada, do acelerômetro, chegará à conclusão que o robô
está caído de costas e que a próxima ação a ser tomada é “levantar”. O processador envia essa
informação ao FPGA, que por sua vez decodifica essa mensagem e envia para os servos dos
braços e pernas do robô, a sequência de instruções a ser seguida para que o robô fique
novamente em pé. Um novo ciclo de aquisição de dados do acelerômetro permitirá confirmar
se a ação foi executada com sucesso e qual a próxima ação a ser executada.
A figura 3 ilustra a placa processadora utilizada no projeto, a BeagleBone Black:
17
Figura 3 – Imagem da placa processadora (BeagleBone Black)
No diagrama de blocos da figura 4 apresenta-se uma visão geral de como o sistema irá
trabalhar. Primeiramente, no processador há a programação de alto nível, que é a sequência de
ações que os atuadores devem realizar. Essas ações são divididas em comandos, que são
enviados, por meio de uma comunicação serial, ao FPGA que repassa essas informações aos
atuadores, que executam essa ação. Enquanto isso, no FPGA são lidas e tratadas as
informações dos sensores para, então, serem enviadas ao processador onde o ciclo se reinicia.
Além disso, observa-se que os dispositivos que estão à direita (atuador mecânico e
sensores) trabalham em tempo real, enquanto que o processador trabalha com “tempo não-
real”.
Fonte: Os Autores
18
6 SOFTWARE
Esta sessão tem como objetivo apresentar os softwares desenvolvidos para este
trabalho, sem descrevê-los, o que será feito detalhadamente em sessões posteriores.
Foram desenvolvidos três softwares para a manutenção e operação do sistema, cada
um deles visando uma parte fundamental do sistema e realizando uma tarefa diferente:
19
O detalhamento do funcionamento do processador e do seu código-fonte, em C++,
está apresentado na sessão 6.
20
7 FPGA
Abaixo está uma lista com os itens mais relevantes para a utilização da placa DE0-
Nano neste projeto:
21
acelerômetro de 3 eixos de alta resolução (13 bits) – ADI ADXL345;
oscilador de 50 MHz on-board;
alimentação através de dois pinos de 5 V do GPIO ou por 2 pinos externos
(3,6-5,7V);
tamanho 49 mm por 75,2 mm
As características mais importantes dessa placa, que foram decisivas em sua escolha
são:
tamanho compacto;
preço acessível;
baixo consumo de energia;
22
7.2 ARQUITETURA IMPLEMENTADA
No FPGA, foi montado um sistema que realiza todo o controle dos atuadores (neste
caso, os servomotores) e sensores (sendo o acelerômetro), além de permitir que sejam
instalados mais dispositivos no futuro (a câmera), funcionando como driver de todos os
dispositivos de hardware, podendo ser modificado conforme a necessidade.
Devido à existência de várias unidades de servomotores controlados por sinais em
PWM, é necessário o trabalho com processamento paralelo para conseguir enviar todos os
sinais de controle de forma independente, ao mesmo tempo em que se faz a leitura dos
sensores e que é feita a comunicação com o processador.
A figura 7 mostra o diagrama de blocos da arquitetura do sistema implementado no
FPGA:
Fonte: Os Autores
7.3.1 Descrição
23
frequência: 400 Hz
amplitude: 5 V
largura de pulso: Variável (controlável) entre 550 e 2450 microssegundos;
Fonte: Os Autores
pwm_clock: entrada de 1 bit que servirá de clock para o PWM, necessário para
marcar o “passo” dele;
pwm_val: entrada de 12 bits que define qual o valor do de largura do PWM no
instante atual;
pwm_enable: entrada de 1 bit que habilita ou desabilita a saída do módulo;
pwm_out: saída de 1 bit, na qual estará presente o sinal modulado em PWM
que controla o servomotor com as descritas acima;
24
Figura 9 – Código Fonte do Módulo PWM
Fonte: Os Autores
Uma vez que foram utilizados 16 módulos PWM, um para cada servomotor do robô,
foi criado um módulo que encapsula todos os módulos individuais, servindo para gerencia-los
de forma mais geral.
25
Figura 10 – Módulo do Grupo de PWM
Fonte: Os Autores
7.5.1 Descrição
26
Figura 11 – Bloco Esquemático do Módulo Interpretador
Fonte: Os Autores
27
Figura 12 – Código Fonte do Módulo Interpretador
Fonte: Os Autores
7.6 UART
28
Figura 13 – Carta de Tempos do protocolo UART
Fonte: Os Autores
São os bits que carregam a informação e cada bit tem a duração de 1 período de clock.
É um bit de verificação de dados e pode ser configurado para modo par ou modo
ímpar. A verificação é feita por meio da soma dos bits enviados e em seguida é atribuído o
valor do bit de paridade, podendo ser 1 caso a paridade dos dados seja a mesma que o modo
selecionado ou 0, caso não seja.
É um bit em nível lógico 1, com duração de 1, 1.5 ou 2 ciclos de clock e tem como
função, a sinalização do fim do envio do pacote.
29
7.6.1.5 Baudrate
Fonte: Os Autores
30
7.6.3 Código verilog
O código em verilog do módulo RX da UART está na figura 15. Por ser muito extenso,
foi apenas reproduzido uma parte do código:
Fonte: Os Autores
31
7.7 ACELERÔMETRO
7.7.1 Descrição
Este módulo foi utilizado neste projeto para saber se o robô está de pé, caído “de
frente” ou caído “de costas” e tomar as devidas ações para ele levantar da forma correta.
Embora não seja possível visualizar isso em tempo de execução, é possível verificar os
valores medidos pelo acelerômetro através de uma interface no computador, conforme mostra
a figura 17.
32
Figura 17 – Valores medidos pelo acelerômetro
7.8 AMOSTRADOR
7.8.1 Descrição
Este módulo tem como função filtrar o ruído dos dispositivos de medição. Uma vez
que os atrasos devem ser minimizados ao máximo, foi utilizado um algoritmo simples para
sua implementação. A entrada do módulo é o valor medido pelo sensor, a saída é a média
aritmética dos 8 (oito) últimos valores recebidos pelo amostrador.
33
7.8.2 Bloco Esquemático
Fonte: Os Autores
Para implementar essa lógica, o módulo foi construído com duas entradas e duas
saídas:
34
Figura 19 – Código Fonte do Módulo Amostrador
Fonte: Os Autores
7.9 PLL
Foi utilizada uma PLL (Phase-Locked Loops) para gerar os clocks dos diferentes
módulos a partir de um clock base da placa. Esse bloco não possui código fonte, uma vez que
é configurado diretamente em uma interface própria.
35
Figura 20 – Bloco Esquemático da PLL
Fonte: Os Autores
36
8 PROCESSADOR
Abaixo está uma lista com as principais especificações técnicas da placa BeagleBone
Black:
37
aceleração gráfica 3D
aceleração para ponto-flutuante NEON
2 PRU (micro controladores de 32 bits)
USB Client
USH Host
ethernet
HDMI
2x 46 pinos para expansão
38
8.4 CÓDIGO FONTE DESENVOLVIDO
baudrate: 11500;
porta: tty04;
quantidade de bits: 8;
stop bits: 1;
controlde de fluxo: nenhum;
paridade: nenhuma;
Nos demais métodos, a porta configurada é utilizada para enviar dados, sendo o
processo de envio inicializado pela abertura da porta e finalizado pelo fechamento da porta.
A figura 22 mostra o código fonte em C++ do método que configura a comunicação
UART entre a BeagleBone Black e a DE0-Nano:
Fonte: Os Autores
39
8.4.2 Método de Controle do Servomotor
40
Figura 23 – Método para o controle de um motor
Fonte: Os Autores
41
Figura 24 – Atribuição da posição do grupo de servomotores
Fonte: Os Autores
42
9 SERVOMOTORES
Fonte: Os Autores
43
Como ilustrado na Figura 30, o RoboNova-I possui em sua estrutura 16 servomotores
digitais, modelo HSR-8498 projetados exclusivamente para operações robóticas. De acordo
com HITEC ROBOTICS (2007) os servomotores possuem as seguintes características:
44
Como o servomotor fica constantemente mudando de posição, serão necessários
sucessivos pulsos enviados a intervalos regulares, o que define um PWM cujo ciclo de
trabalho (duty-cicle) define a posição do servomotor. Embora não seja utilizada para o
controle do servomotor, a posição pode ser dada em função do ciclo de trabalho do PWM pela
expressão:
Na figura 28, é possível conferir a forma de onda dos possíveis valores do sinal de
controle:
Fonte: Os Autores
O servomotor também permite a leitura de sua posição, informação essa que é muito
útil caso haja a necessidade de se fechar a malha de controle. Essa leitura é feita utilizando-se
o seguinte procedimento:
45
ao terminar o pulso, o controlador muda o sinal para nível lógico baixo e o
mantém assim por um intervalo de tempo que pode variar de 2 a 20
microssegundos (Ponto B). Na sequência, o controlador deve mudar o sinal para
alta impedância (tri-state), uma vez que será lido o valor da posição;
depois de reconhecido o vale do controlador (Ponto B), o servomotor envia um
sinal de nível lógico baixo por 125 microssegundos (Ponto C), mostrando que
reconheceu o pedido de leitura;
após esse tempo, o servomotor enviará um pulso em nível lógico alto, cuja
largura é função da posição, variando 550 à 2450 microssegundos (Ponto D), os
mesmos tempos utilizados para o controle da posição;
na sequência, o servomotor envia nível lógico baixo por 250 microssegundos
(Ponto E) e o controlador também muda para nível lógico baixo (Ponto F);
Uma vez que a largura do pulso possui o mesmo formato, seja na leitura ou no
controle, é possível usar a mesma equação para obter a posição do motor:
46
10 MÁQUINA VIRTUAL
Optou-se pela segunda opção, uma vez que a compilação é mais rápida e existem
diversas ferramentas que podem ser utilizadas, além do uso de ambientes de desenvolvimento
com interface gráfica.
Esse ambiente de desenvolvimento deverá rodar em uma versão de Linux. Então, para
criar um ambiente mais familiar para o usuário, optou-se pelo uso de uma máquina virtual ao
invés da instalação direta, tendo em vista que a grande maioria dos usuários tem prática
apenas com sistema operacional Windows.
Dessa forma, não é necessário o usuário ter dois sistemas operacionais distintos no
mesmo computador e também não existe a necessidade de reiniciar o computador para trocar
de sistema operacional, o que pode agilizar qualquer processo que o usuário venha a
necessitar.
Foi escolhido o sistema operacional Ubuntu 14.04 LTS, por ser um sistema
operacional de código aberto, de simples utilização, com uma grande quantidade de usuários e
uma comunidade ativa. Assim, sempre que um usuário encontrar um problema, poderá buscar
respostas nas diversas comunidades e fóruns dedicados ao sistema operacional Ubuntu.
Neste sistema operacional, serão instaladas bibliotecas para compilar programas para a
arquitetura ARM (a arquitetura utilizada na construção da BeagleBone Black) e uma
47
ferramenta de programação com interface gráfica, para não existir a necessidade do uso
constante do terminal.
Como compilador, será usado o toolchain Linaro que apresenta uma boa aceitação na
comunidade de desenvolvedores e é de código aberto. Este toolchain é importante, uma vez
que ele será utilizado para compilar todos os programas a serem executados futuramente na
plataforma “Beaglebone Black”.
10.4 QT E QT CREATOR
O Workframe Qt foi selecionado para desenvolver programas em C++, uma vez que é
muito utilizado na indústria e possui código aberto. Portanto, trata-se de uma boa plataforma
de desenvolvimento, com poucos bugs e sempre bem documentada.
Como interface gráfica de desenvolvimento, optou-se pelo Qt Creator, uma interface
gráfica feita para ser utilizada com o workframe selecionado, apresentando integração direta
com as bibliotecas.
Outra funcionalidade importante do Qt Creator é a possiblidade de compilar o
programa e envia-lo diretamente para um dispositivo móvel, no caso, a placa Beaglebone
Black e assim, possibilitando que o desenvolvimento seja mais dinâmico, uma vez que o
software será testado diretamente no ambiente embarcado e não no computador.
10.5 CONFIGURAÇÃO
48
11 CONTROLE DE MOVIMENTAÇÃO DE ROBÔ HUMANOIDE
49
humanos, é muito complexa do ponto de vista robótico, uma vez que exige o posicionamento
preciso e sincronizado da todos os servomotores, assim como as articulações nos seres
humanos. Para realizar essa atividade, foi utilizado como referência um arquivo utilizado na
iniciação científica do Instituto Mauá de Tecnologia contendo um código fonte que indicava a
posição de cada servomotor para a realização do movimento de andar, mas não havia
informação de sua procedência. Esse código fonte foi utilizado apenas por ser a única
referência encontrada. Foram consultados, também, os manuais do robô a fim de interpretar o
código fonte utilizado como referência.
A figura 31 mostra o código fonte em C++ do laço que controlará o robô, realizando a
ação de andar para frente.
Fonte: Os Autores
50
Os resultados obtidos desse teste não foram dos mais animadores: o robô se movia de
forma descoordenada e não era capaz nem de ficar em pé, quanto mais de andar. O principal
motivo para a falha neste teste é o desconhecimento dos valores corretos da posição de cada
motor em cada instante para que o robô ande. Por outro lado, foi possível o controle
simultâneo de todos os servomotores.
Para que o robô se movimente da maneira desejada, é necessário apenas o estudo e
conhecimento desses parâmetros, o que seria um ótimo ponto de partida para uma futura
iniciação científica, na qual o objetivo seria criar procedimentos para todas as movimentações
básicas para o robô, tais como “andar”, “levantar”, “chutar”, “correr”. É necessário muito
tempo para implementar, testar e validar ações como essas e esse ponto já está além do escopo
deste trabalho. O mais importante já foi comprovado: foi bem sucedida a criação de uma
interface de alto nível para controle robótico.
51
12 RESULTADOS E CONCLUSÕES
52
13 BIBLIOGRAFIA
CHU, Pong P. FPGA Prototyping By Verilog Examples. 1 ed. New Jersy: Wiley, 2008
Day, Robrty P J. Beaglebone Black System Reference Manual. 2014. Disponível em: <
https://github.com/CircuitCo/BeagleBone-Black/blob/master/BBB_SRM.pdf?raw=true>
Acesso em 7 de abril de 2014.
IBBOTSON, R. Hitec HSR-8498HB: Digital Servo Operation and Interface. 2007. Disponível
em: <http://robosavvy.com/Builders/i-Bot/HSR8498HB%20Servo.pdf> Acesso em 10 de
dezembro de 2014.
53
14 APÊNDICE I – INSTALAÇÃO COMPLETA DO AMBIENTE DE
MÁQUINA VIRTUAL
1. Criar uma pasta chamada linaro no diretório do usuário com o comando ”mkdir
~/linaro”
2. Criar uma pasta chamada qt no diretório do usuário com o comando “mkdir ~/qt”
3. Copiar os arquivos fornecidos para o diretório do usuário, supondo o uso da unidade
de cd: “cp –r /media/cdrom/* ~”
4. Mover o arquivo “gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz” para a
pasta linaro, com o comando: “mv gcc-linaro-arm-linux-gnueabihf-4.8-
2014.04_linux.tar.xz ~/linaro/”
5. Mover o arquivo “qt-everywhere-opensource-src-5.3.0.tar.gz” para a pasta qt com o
comando: “mv qt-everywhere-opensource-src-5.3.0.tar.gz ~/qt/”
6. Entrar na pasta linaro com o comando: “cd ~/linaro”
7. Extrair os aquivos usando o comando: “tar -Jxvf gcc-linaro-arm-linux-gnueabihf-4.8-
2014.04_linux.tar.xz”
8. Renomear a pasta criada com os arquivos extraídos para “linaro”, com o comando:
”mv gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux linaro”
9. Mover a pasta “linaro” para a pasta “/usr/bin/” usando o comando: “mv linaro
/usr/local”
10. Abrir a pasta “qt” com o comando: “cd ~/qt”
11. Extrair os arquivos com o comando: “tar -xvzf qt-everywhere-opensource-src-
5.3.0.tar.gz”
12. Criar uma pasta para configurar o método para compilar as bibliotecas do Qt com o
comando: “mkdir ~/qt/qt-5.3-host”
13. Executar os seguintes comandos para baixar todas as dependências necessárias:
54
a. apt-get update
b. apt-get install lsb
c. cd /etc/apt/sources.list.d
d. echo "deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted
univers$
e. apt-get update
f. apt-get install ia32-libs
g. rm -f ia32-libs-raring.list
14. Copiar as configurações já para compilar as bibliotecas do Qt para beaglebone black
com os seguintes comandos:
a. cp -r ~/linux-beaglebone-g++ ~/qt/qt-everywhere-opensource-src-
5.4.0/qtbase/mkspecs/devices/linux-beaglebone-g++
b. cp -r ~/linux-linaro-gnueabihf-g++ ~/qt/qt-everywhere-opensource-src-
5.4.0/qtbase/mkspecs/linux-linaro-gnueabihf-g++
15. Executar os seguintes comandos para compilar e instalar as bibliotecas do Qt para a
arquitetura Arm:
a. cd ~/qt/qt-5.3-host
b. ../qt-everywhere-opensource-src-5.3.0/configure -v -opensource -confirm-
license -prefix /usr/local/qt-5.3 -no-largefile -no-accessibility -qt-zlib -no-gif -
qt-libpng -qt-libjpeg -no-nis -no-cups -device linux-beaglebone-g++ -device-
option CROSS_COMPILE=/usr/local/linaro/bin/arm-linux-gnueabihf- -opengl
es2
c. make -j4
d. apt-get remove libqt5core5
e. make install
16. Instalar o Qt Creator e as bibliotecas Qt executando o instalador correspondente ao
sistema operacional:
a. qt-opensource-linux-x64-5.3.0.run para sistemas 64 bits
b. qt-opensource-linux-x86-5.3.0.run para sistemas 32 bits
A interface Gráfica “Qt Creator” precisa de algumas configurações para poder fazer a
compilação cruzada, essas configurações estão descritas abaixo:
55
g. Entrar com os dados de IP, login e senha
h. Clicar em “Next” e “Finish”
i. Verificar se a conexão foi bem sucedida
A figura 32 ilustra a configuração de um dispositivo:
Fonte: Os Autores
56
Figura 33 – Exemplo de compilador configurado corretamente
Fonte: Os Autores
Fonte: Os Autores
57
e. Selecionar “arm-linux-gnueabihf-gdb”
f. Clicar em “Open” e depois em “Apply”
A figura 35 mostra um Debugger devidamente configurado
Fonte: Os Autores
58
Figura 36 – Configuração final do Qt
Fonte: Os Autores
59