Skip to main content

Lição 3: Quando a cor vermelha é detectada

Não há comandos para dizer ao Robô VR o que fazer depois de detectar a cor vermelha. Para evitar a borda vermelha, o robô VR deve reverter e girar assim que detectar a cor vermelha, como neste vídeo.

Ficheiro de vídeo
  • Adicione um comentário no final do ciclo while para indicar o que deve acontecer quando o Down Eye Sensor deteta a borda vermelha. O seu projeto deve agora ter este aspeto:

    def main():
    	# Procure construir enquanto a borda vermelha não é detectada
    	enquanto não estiver down_eye.detect(VERMELHO):
    		# O sensor de distância detecta um castelo?
    		
    		if front_distance.found_object():
    			# Crash castle detected by Distance Sensor
    			drivetrain.drive(FORWARD)
    		
    		else:
    			# Turn to find a castle using the Distance Sensor
    			drivetrain.turn(RIGHT)
    			
    		wait(5, MSEC)
    		
    	# Reverse and turn when red border detected
  • Adicione um comando drive_for e turn_for abaixo do comentário para permitir que o robô VR faça marcha-atrás e rode assim que o sensor de olho para baixo detetar a cor vermelha.

    def main():
    	# Procure construir enquanto a borda vermelha não é detectada
    	enquanto não estiver down_eye.detect(VERMELHO):
    		# O sensor de distância detecta um castelo?
    		
    		if front_distance.found_object():
    			# Castelo de colisão detectado pelo sensor de
    			distância 			drivetrain.drive (FORWARD)
    		
    		else:
    			# Vire para encontrar um castelo usando o sensor
    			de distância 			drivetrain.turn (RIGHT)
    			
    		wait(5, MSEC)
    		
    	# Reverse and turn when red border
    	detected 	drivetrain.drive_for (REVERSE, 300, MM)
    	drivetrain.turn_for (RIGHT, 90, DEGREES)
  • Abra o Dynamic Castle Crasher Playground, se ainda não estiver aberto, e execute o projeto. O robô de RV se comporta como você pretendia?
  • Quando este projeto é executado, há duas condições que são verificadas. A primeira é a condição do Down Eye Sensor detetando a cor vermelha dentro do loop enquanto . Note que o fluxo do projeto passa para a próxima condição de um objeto que está a ser detetado APENAS se o Sensor de Olho Para Baixo não visualizar a cor vermelha. Se o sensor de olho para baixo detetar vermelho, o fluxo do projeto ignora a instrução if else e passa a conduzir em marcha-atrás e a virar.
    O código do projeto Python desta lição com um diagrama que mostra o fluxo do projeto ao lado. Lê-se Primeira condição verificada: Down Eye Sensor detecta vermelho em laranja, representando o início do loop. Há um loop de seta vermelha para quando o Sensor de Olho para Baixo detectar vermelho, que relatará Verdadeiro e o Projeto sairá da aparência de repetição. Se ele relatar falso, o código será movido para a instrução if then e continuará a repetir até que o sensor Down Eye detecte vermelho.
 
  • A segunda condição que é verificada é a instrução if else. Enquanto o Sensor Down Eye não detetar vermelho, o projeto continuará no loop enquanto para verificar a condição do Sensor de Distância. O Robô VR usará os dados do Sensor de Distância para tomar a decisão de dirigir para frente ou virar à direita. O código do projeto Python desta lição com um diagrama que mostra o fluxo do projeto ao lado. Lê Segunda condição verificada: O sensor de distância detecta o objeto. Ele mostra o que acontece se a segunda condição for verificada e, se for verdadeira, o robô VR avançará e, se a segunda condição for falsa, o robô VR vira à direita.
  • No entanto, uma vez que o Sensor de Olho para Baixo detecta a cor vermelha, o Robô VR irá dirigir em sentido inverso, girar e parar, pois esse é o fim do fluxo do projeto. Não há loop usado para repetir os comportamentos novamente.

    Uma vista de cima para baixo do playground Dynamic Castle Crashed mostrando alguns dos castelos sendo derrubados, com o robô de RV tendo revertido e se virado depois de passar pela borda vermelha, de modo que fica de frente para o centro do playground novamente.

Adicionando um ciclo infinito while

  • É necessário um ciclo infinito while para que os comportamentos se repitam num ciclo. Arraste ou digite a while loop na parte superior do projeto e defina a condição como True para criar um loop infinito. De seguida, copie e cole o código anterior dentro do ciclo infinito while . Certifique-se de que os comandos estejam devidamente recuados sob os cabeçalhos corretos, caso contrário, o projeto pode não ser executado conforme o esperado. O seu projeto deve agora ter este aspeto:

    def main():
    
    	while True:
    		# Procure construir enquanto a borda vermelha não é detectada
    		enquanto não estiver down_eye.detect(VERMELHO):
    			# O sensor de distância detecta um castelo?
    		
    			if front_distance.found_object():
    				# Castelo de colisão detectado pelo sensor de
    				distância 				drivetrain.drive (FORWARD)
    		
    			else:
    				# Vire para encontrar um castelo usando o sensor
    				de distância 				drivetrain.turn (RIGHT)
    			
    			wait(5, MSEC)
    		
    		# Reverse and turn when red border
    		detected 		drivetrain.drive_for (REVERSE, 300, MM)
    		drivetrain.turn_for (RIGHT, 90, DEGREES)
    
  • Abra o Dynamic Castle Crasher Playground, se ainda não estiver aberto, e execute o projeto. O robô de RV se comporta como você pretendia? 
  • Quando este projeto for executado, o Robô de RV irá dirigir em direção a um castelo detectado e virar à direita se nenhum castelo for relatado. Assim que o Sensor de Olho para Baixo detecta a cor vermelha, o Robô de RV dirige em sentido inverso, vira e continua dirigindo em direção a outro castelo.

    Uma vista de cima para baixo do playground Dynamic Castle Crasher mostrando que o robô de RV tombou sobre vários castelos no playground e agora está se movendo em direção ao último castelo em pé.

Perguntas

Selecione uma ligação abaixo para aceder ao questionário da aula.

Google Doc / .docx / .pdf