Robótica. Prof. Reinaldo Bianchi Centro Universitário da FEI 2007

Documentos relacionados
Lego NXT usando NXC. Prof. Marcelo Santos Linder

Programando Robôs Lego com NQC

Lego NXT usando NXC. Prof. Marcelo Santos Linder

PROGRAMANDO O ROBO LEGO

Programando Robôs Lego NXT usando NXC

Introdução à Programação I

Congresso de Inovação, Ciência e Tecnologia do IFSP

Conceitos Básicos Linguagem C

Programação Orientada a Objetos

ESTUDO DA TRANSFERÊNCIA AUTOMÁTICA DE DADOS PARA UM ROBÔ MÓVEL NA PLATAFORMA LEGO MINDSTORMS

Desenvolvimento de Aplicações Desktop

Programação Básica em Arduino Aula 2

Processamento da Informação

Processing Aula 2. Prof. Wallace Lages

CONDICIONAL / de SELEÇÃO / de DECISÃO

Programação Introdução

Aula 3 Programação. LEGO NXT-G

Paradigmas. Fortran, Algol, Algol-68, Pascal, C, Cobol, PL/I

Workshop - A Robótica em Contexto Educativo

Programaçãodo RobôZug. Alex Vidigal Bastos

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

ESTUDO DA LINGUAGEM NXC PARA PROGRAMAÇÃO DE UM ROBÔ MÓVEL NA PLATAFORMA LEGO MINDSTORMS

Linguagem de Programação III

Introdução Operadores Relacionais Lógicos Comando If Comando If...else Comando swich()...case...break Operador condicional ternário

Prof. A. G. Silva. 14 de março de Prof. A. G. Silva INE5231 Computação Científica I 14 de março de / 26

Fluxogramas e variáveis

INF 1005 Programação I

Linguagem C/C++ Estrutura Condicional. Prof: Rosemary Melo

Introdução à Programação

MC-102 Aula 04 Expressões Relacionais, Lógicas e Comandos Condicionais

INTRODUÇÃO AO AMBIENTE DE PROGRAMAÇÃO MATLAB

Programação Aplicada à Engenharia

ROBOT ROAMER. Manual de utilização. Características do Recurso Educativo:

ET7DE - Instrumentação Virtual. Prof. Winderson Introdução ao LabVIEW

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

Linguagens de Programação

Algoritmos: tipos de dados, variáveis e expressões

Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1

- Trabalho Prático de Algoritmos e Programação usando Robô Arduino -

INSTITUTO FEDERAL CATARINENSE Campus Ibirama

JavaScript (Elementos de Programação e Programação Básica)

Relatório de Construção do Robô de Seguidor de Linha

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

01/08/2011 PROGRAMAÇÃO EM LINGUAGEM C. Histórico

PROGRAMAÇÃO A. Estrutura Condicional

Introdução a Programação

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

JAVA. Professor: Bruno Toledo

Universidade Federal de Minas Gerais Escola de Engenharia Departamento de Engenharia Eletrônica Laboratório de Informática Industrial

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO 9º PERÍODO. Profª Danielle Casillo

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

PRINCÍPIOS DA PROGRAMAÇÃO LEGO MINDSTORMS NXT

Linguagem de Programação

Linguagens de Programação

Introdução à Programação

Sistema Operacional Unidade 11.2 Shell Script: estruturas condicionais. QI ESCOLAS E FACULDADES Curso Técnico em Informática

Letreiro Digital. Modelo I7014B. Manual do Usuário

Introdução a Programação de Jogos

Aula 11: Desvios e Laços

Aula 03 Introdução à Programação com a Linguagem Python

Processamento da informação. Prof. Fabrício Olivetti de França

Estruturas condicionais

13 Operadores relacionais

Introdução à Linguagem C++

Operadores Lógicos e Relacionais Comandos condicionais (if-else) Casting AULA 04

AULA TEÓRICA 4. Tema 2. Introdução a programação em Java (Continuação) Tema 3. Instruções básicas de entrada e saída

Programação em C. Variáveis e Expressões. Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

MC-102 Aula 02 Shell Interativa, Programa Básico, Variáveis, Atribuições, Tipos Simples. Instituto de Computação Unicamp

Oficina de Python Prof. Me. José Carlos Perini

Conceitos básicos de programação

Puca Huachi Vaz Penna

Microcontroladores PROF. ME. HÉLIO ESPERIDIÃO

Algoritmos I Introdução a Algoritmos. Carlos de Salles Soares Neto Segundas e Quartas, 17h40 às 19h10

Noções de algoritmos - Aula 1

Questão 1 Analise o trecho do código abaixo, escrito na linguagem C#:

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini

Comandos de desvio de fluxo. Expressões lógicas.

Linguagem de Programação I Prof. Tiago Eugenio de Melo.

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Programação II. Aula 3

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Laboratório de Programação II

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

Aula teórica 11. Tema 11. Repetição. Ciclo while Ciclo do-while Ciclo for

Oficina de Python Prof. Me. José Carlos Perini

Modulo 4: while do while (limites de variáveis)

Fundamentos de Programação em Python

Introdução à Programação em C. Prof. Ricardo Teixeira Tecnologia em Mecatrônica Industrial SENAI

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

AULA TEÓRICA 3. Tema 2. Introdução a programação em Java (Continuação)

Aula 6: Comandos Estruturados Estrutura Condicional

Aula prática 4. Comandos de Desvio. Resumo. 1 Comandos de Desvio Condições mutuamente exclusivas... 2

LINGUAGEM C: COMANDOS DE CONTROLE CONDICIONAL

ALGORITMO I ESTRUTURA DE CONTROLE DECISÃO SE / CASO;

Relatório da Aula Prática 10

Organização de Computadores I

Programação Aplicada à Engenharia

Transcrição:

Robótica Prof. Reinaldo Bianchi Centro Universitário da FEI 2007

Aula

Objetivos desta aula Programação real de um robô móvel. Breve introdução a programação NQC para robôs LEGO. Resultado esperado: Robô seguidor de pista reta ao final da aula. Baseado em: Aula do professor Paulo Santos. Programming Lego Robots, de Mark Overmars.

O robô a ser usado Três sensores: 1 e 3 são de luz (SENSOR_LIGHT) 2 é de toque (SENSOR_TOUCH) Dois motores: A e C (saída B não é utilizada!!)

O Robô usado

O robô usado Sensor 3 Sensor 1 S1 S3 outa outc

O LEGO Brick RCX CPU do robô. Permite até 5 programas armazenados na memória. Permite visualizar sensores. Controla motores.

O LEGO Brick RCX Visualiza Valores dos sensores Escolhe o programa a executar Liga/desliga Executa/para programa

A linguagem Not Quite C Uma pequena introdução a NQC.

A linguagem NQC ( not quite C ) NQC é uma linguagem de programação desenvolvida por Dave Baum especialmente para robôs LEGO. Não entre em pânico se você nunca programou! Subconjunto de Linguagem C. NQC é fácil de usar. Programar um robô em NQC é muito mais fácil do que programar um computador.

NQC: aspectos básicos Cada programa em NQC deve ter uma task main() : Ela inicia a execução do programa. Um programa pode ter diversas tarefas sendo executadas em paralelo : multitasking. Possui dois tipos de comandos: De controle do robô. De controle do fluxo do programa.

Exemplo 1 Meu primeiro programa NQC. Anda para frente e para trás. task main() { } OnFwd(OUT_A); OnFwd(OUT_C); Wait(400); OnRev(OUT_A+OUT_C); Wait(400); // Liga motor A // Liga motor B // Espera 4 segundos // Reverte. // Espera 4 segundos Off(OUT_A+OUT_C); // Desliga motores.

Comandos de controle do robô Comandos que acionam os sensores e atuadores do robô. Permitem ligar e desligar os motores, ajustar a potência dos mesmos. Permitem definir os sensores usados e ler os valores dos mesmos. Usados em conjunto com os comandos de controle de fluxo.

Entradas e Saídas Todo controle do robô é realizado sobre 3 entradas e 3 saídas. OUT_A, OUT_B e OUT_C: São as 3 saídas de controle do robô. SENSOR_1, SENSOR_2 E SENSOR_3: São as 3 entradas de sensores do robô.

Comandos de controle do motor OnFwd(OUT_A); Inicia a saída A Se um motor estiver conectado a porta A, ele será ligado no sentido direto com máxima velocidade. OnRev(OUT_A+OUT_C); Reverte as saídas A e C. Se existirem motores ligados a estas saídas, eles serão acionados no sentido reverso com máxima velocidade.

Comandos de controle do motor Off(OUT_A+OUT_C); Desliga os motores. SetPower(força). A força é um número inteiro entre 0 e 7: 7 é o mais rápido. 0 o mais lento, mas ainda com movimento.

Comando wait O comando wait faz com que a tarefa pare por um determinado tempo, dado em centésimos de segundos. Wait(400); Note que as saídas são mantidas no mesmo estado pelo tempo em que a espera durar.

Definindo um sensor Para definir um sensor é necessário especificar a porta e o tipo do sensor: SetSensor(SENSOR_2,SENSOR_TOUCH); Define um sensor de toque na porta 2. SetSensor(SENSOR_1,SENSOR_LIGHT); Define um sensor de luz na porta 1. Para usar o sensor: Use o nome da porta como variável: SENSOR_2 == 1

Sensor de toque Usado para detectar toques ou barreiras. Retorna: 0 se aberto 1 se pressionado. O sensor mais simples possível

Exemplo sensor de toque Anda até bater em algo e o sensor de toque for pressionado: task main() { SetSensor(SENSOR_1,SENSOR_TOUCH); OnFwd(OUT_A+OUT_C); until (SENSOR_1 == 1); Off(OUT_A+OUT_C); }

Sensor de luz Usado para cores em objetos, no chao e distâncias. Retorna: 0 mínimo. 80 máximo. Na prática: < 30 é preto > 50 é branco

Comandos de controle de fluxo. NQC possui comandos de controle de fluxo iguais as linguagens procedimentais convencionais, como linguagem C ou Pascal: if... else while do... while repeat... until e outras.

repeat task main() { repeat(4) { OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); OnRev(OUT_C); Wait(TURN_TIME); } Off(OUT_A+OUT_C); }

do... while } int move_time, turn_time, total_time; task main() { total_time = 0; do { move_time = Random(100); turn_time = Random(100); OnFwd(OUT_A+OUT_C); Wait(move_time); OnRev(OUT_C); Wait(turn_time); total_time += move_time; total_time += turn_time; } while (total_time < 2000); Off(OUT_A+OUT_C);

while e if/else Anda e gira aleatoriamente para esquerda ou direita #define MOVE_TIME 100 #define TURN_TIME 85 task main() { while(true){ OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); if (Random(1) == 0){ OnRev(OUT_C); } else{ OnRev(OUT_A);} Wait(TURN_TIME); } }

Função random A função random () gera um número aleatório entre 0 e o número passado como parâmetro da função: Random(60) Gera um número aleatório entre 0 e 60. Números sempre inteiros.

Operadores Operadores relacionais: = =, <, <=, >, >=!= (diferente) Operadores Booleanos: && (conjunção lógica) (disjunção lógica)! (negação)

Variáveis #define TURN_TIME 85 int move_time; task main() {move_time = 20; repeat(50) { OnFwd(OUT_A+OUT_C); Wait(move_time); OnRev(OUT_C); Wait(TURN_TIME); move_time += 5; } Off(OUT_A+OUT_C); } Só existem variáveis inteiras (35 no máximo)

Macros #define turn_around OnRev(OUT_C);Wait(340);OnFwd(OUT_A+OUT_C); task main() { OnFwd(OUT_A+OUT_C); Wait(100); turn_around; Wait(200); turn_around; Wait(100); turn_around; Off(OUT_A+OUT_C); }

Macros 2: Mudando de direção #define MOVE_TIME 100 #define TURN_TIME 85 task main() { OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME); OnRev(OUT_C); Wait(TURN_TIME); Off(OUT_A+OUT_C); }

Programando o LEGO Utilizamos o programa BricxCC para programar o LEGO. Permite: Editar e testar o programa. Carregar o programa no robô. Bricx Command Center pode ser executado em Windows (95, 98, ME, NT, 2K, XP).

Bricx Command Center

Templates

Aviso: não perca seu tempo! COMPILE E DEPURE SEU PROGRAMA ANTES DE TESTÁ-LO NO ROBÔ!! Caso contrário, você só descobrirá os erros depois de um bom tempo... Atrapalha a todos...

Tarefa da aula de hoje Fazer o robô andar em linha reta, seguindo a pista, corrigindo os eventuais desvios. Dividir a turma em equipes de 2 alunos! Cada dupla deve fornecer um nome para a sua equipe.

Pista usada. Ao final do curso (4 aulas), a equipe que fizer o trajeto a seguir no menor tempo será a campeã!

Exemplo básico Exemplo de robô que anda até mudar a cor de seu sensor #define THRESHOLD 40 task main() { } SetSensor(SENSOR_2,SENSOR_LIGHT); OnFwd(OUT_A+OUT_C); while (true) { } if (SENSOR_2 > THRESHOLD) { } OnRev(OUT_C); until (SENSOR_2 <= THRESHOLD); OnFwd(OUT_A+OUT_C);

Conclusão O Controle de robôs reais não é tão complicado. Usem material das aulas de controle (aula 9) e das aulas de robótica móvel. Dificuldade: Robô não é simplesmente diferencial, mas possui deslizamento. Outros tipos de robôs nas próximas aulas.

Fim