Projecto: Robô sensorizado com LEGO Mindstorms Escola de Verão de Física 2011 Coordenador: Paulo...
-
Upload
milton-caminha-monsanto -
Category
Documents
-
view
217 -
download
0
Transcript of Projecto: Robô sensorizado com LEGO Mindstorms Escola de Verão de Física 2011 Coordenador: Paulo...
Projecto: Robô sensorizado com LEGO Mindstorms
Escola de Verão de Física 2011
Coordenador: Paulo Vicente MarquesMonitor: Manuel Jorge Marques
1ª ParteConceitos-base de programação
LabVIEW – o que é?
Uma linguagem de programação! Existem várias à escolha – C, Python, Assembly,
BASIC, Java, ... LabVIEW é uma linguagem gráfica: em vez de
comandos escritos, usam-se blocos e fios de ligação entre eles;
Duas vistas principais: painel frontal e diagrama de blocos;
Na prática, constroem-se instrumentos virtuais (Vis), operados a partir do painel frontal.
04/27/23 UOSE - FCUP/LabVIEW and Virtual Instrumentation Workshop/24 JUL 2007
4
Diagrama de Blocos
Painel Frontal
Introdução ao LABVIEWTM
5
Painel Frontal
Painel FrontalControlos = Entradas (controls) (inputs)
Indicadores = Saídas (indicators) (outputs)
Introdução ao LABVIEWTM
04/27/23 UOSE - FCUP/LabVIEW and Virtual Instrumentation Workshop/24 JUL 2007
6
Diagrama de BlocosComponentes interligados por fios
Código fonte
Esquema de fluxo de dados
Block Diagram
Introdução ao LABVIEWTM
04/27/23 UOSE - FCUP/LabVIEW and Virtual Instrumentation Workshop/24 JUL 2007
7
Ferramentas do painel “Icon
pane”Controlos numéricos
Botão de controlo booleano
Indicador de barra (Slide indicator)
Etiqueta (Label)
Janela do painel frontal
8
Terminais de controlo numérico (Numeric control terminals)
Terminal de indicador de barra (Slide indicator terminal)
Terminal de controlo booleano (Boolean control terminal)
Função de soma (Add function)
Função de comparação (Comparison function)
Função Booleana
Função de temporização (Timing function)
Constante numérica (Numeric constant)
Janela do diagrama de blocos
9
Fios
Nodos
Escalar 1D Array
Numérico
Booleano
Texto (String)
Laranja (virgula flutuante)Azul (inteiro)
Verde
Roxo
2D Array
Hot spot
Os terminais de controlo têm bordas mais espessas do que os dos indicadores
Diagrama de blocos
10
• Familiarize-se com o painel frontal e o diagrama de blocos• Habitue-se a utilizar a ajuda em contexto (Ctrl + H)• Construa um VI que
– Some e subtraia dois valores indicados por controlos numéricos (inputs)
– Apresente os resultados em dois indicadores numéricos diferentes (outputs)
• Utilize pontas de prova e execução ilustrada ...
Primeiro Exercício
04/27/23 UOSE - FCUP/LabVIEW and Virtual Instrumentation Workshop/24 JUL 2007
11
Estruturas-base num programa
Loops while e for; Shift registers; Estruturas condicionais (case structures); Estruturas sequenciais; Formula nodes;
04/27/23 UOSE - FCUP/LabVIEW and Virtual Instrumentation Workshop/24 JUL 2007
12
While loopFunctions → Structures palette
O código incluído pode ser repetido
Faz (Executa o diagrama dentro do Loop)Enquanto (While) a condição é FALSA
Terminal de iteração
Terminal Condicional
Continua se for verdade
Muito Importante!
13
Exercício• Use uma “While Loop” para executar continuamente a soma de
duas entradas numéricas, até que o resultado seja igual a zero ou o botão de “STOP” seja pressionado.
– (use o primeiro exercício como ponto de partida)
• Use a função de “Wait (ms)” para prevenir a utilização a 100% do CPU
04/27/23 UOSE - FCUP/LabVIEW and Virtual Instrumentation Workshop/24 JUL 2007
14
Registos de deslocamento (Shift registers)
• Disponíveis nas bordas esquerda, ou direita, das estruturas “loop”• Carregar com botão direito na borda e seleccionar “Add Shift Register”• Terminais do lado direito guardam dados após a execução da iteração• Terminais do lado esquerdo fornecem dados ao início da nova iteração
Antes do início da “Loop”
Primeira Iteração
SegundaIteração
ÚltimaIteração
Valor Inicial
Valor 1
Valor 1
Valor 2
Valor 2
Valor 3
Valor 3ValorInicial
Guardam valores de uma iteração para a seguinte
Laboratório de Física III - Curso Introdutório de LabVIEW TM
15
Shift registers – cont.
Carregar no botão direito sobre o terminal esquerdo para adicionar novos elementos
Carregar no botão direito sobre a borda para um novo “shift register”
Este método difere da utilização de vários “shift registers”
• Um “shift register” com terminais adicionados guarda vários valores anteriores de uma única variável.
• Vários “shift registers” guardam o último valor de várias variáveis.
Adaptam-se a qualquer tipo de dados
Laboratório de Física III - Curso Introdutório de LabVIEW TM
16
Inicialização de “shift registers”
RUN 1
RUN 2
Inicializado Não inicializado
Valor inicial = 5
Valor inicial = 7
Valor inicial = 0
Valor inicial = 8
Laboratório de Física III - Curso Introdutório de LabVIEW TM
17
For Loop
• Executa o diagrama dentro do “loop” um número pré-determinado de vezes• Os “shift registers” podem ser igualmente criados na borda
Terminal de contagem(Numerical input)
Laboratório de Física III - Curso Introdutório de LabVIEW TM
18
Exercício – Sequência de Fibonacci0 1 1 2 3 5 8 13 21 34 55 89 144 ...
Use uma “For Loop” e “Shift Registers” de forma a calcular e apresentar numa “Waveform Chart”, os valores da sequência de Fibonacci para 2 ≤ n ≤ 11
(1 2 3 5 8 13 21 34 55 89)
Laboratório de Física III - Curso Introdutório de LabVIEW TM
19
Estruturas condicionais (Case Structures)Na subpalete de estruturas da palete de Funções
Inclua nodos ou arraste-os para o interior da estrutura
Amontoadas como um baralho de cartas, só um dos casos é visível
Casos Booleanos e Numéricos
Nota: Todas as saídas possíveis da estrutura têm que ser ligadas
Gamas numéricas também são possíveis
Laboratório de Física III - Curso Introdutório de LabVIEW TM
21
ExercícioCrie um VI que calcule a raiz quadrada de um número,
indicado num controlo numérico, e apresente o resultado num indicador numérico
Se o número for menor que zero, a saída deverá ser NaN.
Laboratório de Física III - Curso Introdutório de LabVIEW TM
22
Estruturas sequenciais (Sequence Structures)
• Executa diagramas sequencialmente, Frame 0 (0..x), onde x é o número total de “frames”
• Empilhadas como um baralho de cartas, só um “frame” está visível
Laboratório de Física III - Curso Introdutório de LabVIEW TM
23
Sequence Locals• Passam dados de um “frame” para “frames” futuros• Criados na borda da estrutura sequencial
“Sequence local” criado no frame 1
Dados não disponíveis
Dados disponíveis
Laboratório de Física III - Curso Introdutório de LabVIEW TM
24
Flat Sequence Structure
A ideia é a mesma de uma estrutura “Stacked Sequence”, mas a sequência é apresentada agora como uma tira de filme
Laboratório de Física III - Curso Introdutório de LabVIEW TM
25
Formula Node• Está na subpalete de “Structures”
• Implementa equações complicadas
• As variáveis são criadas na borda
• O nome das variáveis é sensível às maiúsculas/minúsculas
• Cada expressão deve terminar com ponto-e-virgula (;)
• A janela de ajuda em contexto mostra as funções disponíveis
Atenção ao ponto-e-virgula!
Laboratório de Física III - Curso Introdutório de LabVIEW TM
26
Operações condicionais em “Formula Nodes”if (x >= 0) then
y = sqrt(x)
else y = -99999.0
end if
Condição
Operador Condicional
Condição verdadeira
Condição Falsa
Laboratório de Física III - Curso Introdutório de LabVIEW TM
27
Strings• Uma “string” é uma sequência de caracteres ASCII que visíveis ou não
• Várias utilizações – Apresentar mensagens, Controlo de instrumentos, escrita e leitura de ficheiros
• Os controlos/indicadores de “string” estão em Controls >> String subpalette
Laboratório de Física III - Curso Introdutório de LabVIEW TM
28
Funções de Strings
The quick brown fox jumped over the lazy dog.
Concatenated String
Não esquecer os espaços aqui!
String Length
Length =20String
Laboratório de Física III - Curso Introdutório de LabVIEW TM
29
Converter números em strings
Converter strings para números
Funções de Strings
DESENVOLVIMENTO COM LEGO NXT
2ª Parte
PROJECTO: ROBÔ SEGUIDOR DE LINHA (CONTROLADOR PID)
3ª Parte
Antes de lá chegarmos...
• Robô seguidor de linha: segue a borda da linha, e não a linha propriamente dita! – Porquê?
• Como é que ele segue a linha? Ideias?
Nota: aqui estamos interessados em que o robô siga a extremidade esquerda da linha.Porquê a esquerda e não a direita?
Implementação simples – 2 and 3-level follower
Compliquemos um pouco mais...
• Seguidor de linha proporcional – não se dão passos discretos, mas sim contínuos!
• Duas funções: uma para cada motor!
• E se quisermos que um dos motores inverta direcção? (power < 0!)
Adicionemos um acumulador (integral)
• Um integral não é mais do que um somador.
• Lembram-se dos shift registers e do código da sequência de Fibonnaci?
coisa = coisa + valor corrente
coisa[actual] = coisa[antes] + valor novo
Vimos o presente (P), e o passado (I)...
... pelo que agora só nos falta ver o futuro!
• Tal é possível implementando a derivação no nosso controlador.
• Irão ver isso no 12º ano em Matemática... (a integração só na faculdade! )
• Como funciona?
Derivação