• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
39
0
0

Texto

(1)

Robótica

Prof. Reinaldo Bianchi

Centro Universitário da FEI 2007

(2)
(3)

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.

(4)

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!!)

(5)
(6)

O robô usado

S1 S3

outA outC

Sensor 3

(7)

O LEGO Brick RCX

 CPU do robô.  Permite até 5 programas armazenados na memória.  Permite visualizar sensores.  Controla motores.

(8)

O LEGO Brick RCX

Visualiza Valores dos sensores Liga/desliga Executa/para programa Escolhe o programa a executar

(9)

A linguagem “Not Quite C”

(10)

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.

(11)

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ô.

(12)

Exemplo 1

 Meu primeiro programa NQC.

– Anda para frente e para trás.

task main()

{

OnFwd(OUT_A); // Liga motor A OnFwd(OUT_C); // Liga motor B

Wait(400); // Espera 4 segundos OnRev(OUT_A+OUT_C); // Reverte.

Wait(400); // Espera 4 segundos

Off(OUT_A+OUT_C); // Desliga motores. }

(13)

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

(14)

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:

(15)

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.

(16)

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.

(17)

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.

(18)

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:

(19)

Sensor de toque

 Usado para detectar

toques ou barreiras.  Retorna: – 0 se aberto – 1 se pressionado.  O sensor mais simples possível

(20)

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);

(21)

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

(22)

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.

(23)

“repeat”

task main()

{

repeat(4)

{

OnFwd(OUT_A+OUT_C); Wait(MOVE_TIME);

OnRev(OUT_C);

Wait(TURN_TIME); }

Off(OUT_A+OUT_C); }

(24)

“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); }

(25)

“while” e “if/else”

#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); } }

(26)

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.

(27)

Operadores

 Operadores relacionais:

– = =, <, <=, > , >=

– != (diferente)

 Operadores Booleanos:

– && (conjunção lógica) – || (disjunção lógica) – ! (negação)

(28)

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); }

(29)

#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); }

(30)

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); }

(31)

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).

(32)
(33)
(34)

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...

(35)

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.

(36)

Pista usada.

 Ao final do curso (4 aulas), a equipe

que fizer o trajeto a seguir no menor tempo será a campeã!

(37)

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); }

} }

(38)

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.

(39)

Referências

Documentos relacionados

Como se observa, a maioria dos respondentes é favorável ao re- torno da obrigatoriedade do Exa- me. Dos respondentes técnicos em contabilidade, 87% aprovam a posição

a) Mecanismo de ação do BHC (HCH) e ciclodienos, e fenilpirazóis. BHC e ciclodienos ligam-se ao sítio de ligação dos receptores/canais GABA individuais induzindo uma rápida

Percebe-se o desenvolvimento destes atributos, inicialmente pelo estudo e domínio dos membros da equipe dos conceitos necessários para o desenvolvimento do projeto, seguido

Para tanto, utilizou-se uma base de dados que envolve 319 questionários respondidos pelos responsáveis pelas atividades de pesquisa e desenvolvimento (P&amp;D) e/ou pelas

Estas taxas de crescimento estão entre os maiores valores encontrados para esta espécie, evidenciando a potencialidade que a população apresenta para desenvolver

Equipamentos de emergência imediatamente acessíveis, com instruções de utilização. Assegurar-se que os lava- olhos e os chuveiros de segurança estejam próximos ao local de

Após retirar, da maré observada, o valor da maré teórica, aplicou-se uma linha de tendência aos dados resultantes, a qual representa a variação do nível médio das águas no

2. Assim, e competindo aos Serviços de Fiscalização no âmbito de análise interna ou externa o controlo da matéria colectável, determinada com base em declaração