Skip to main content

Lição 2: Dirija para o número '5'

Nesta lição, o robô de RV dirigirá para o número ‘5‘ e voltará para o número ‘1‘ no Playground do Mapa de Grade Numérica!

Imagem de cima para baixo do playground Number Grid Map. O Robô VR pode ser visto no canto inferior esquerdo do número 1. Uma chamada pode ser vista no centro da linha inferior no número 5.

Observe que o Robô VR estará viajando ao longo do eixo X com os valores de X aumentando para se mover para o número ‘5’ no Playground do Mapa de Grade Numérica.

Mapa numérico do playground com o eixo x sobreposto ao centro do playground. O centro de cada quadrado é marcado com o valor do eixo X, começando com -900 no lado esquerdo e aumentando em 200 cada quadrado para 900 no lado direito. Um robô VR pode ser visto no número 1 no canto inferior esquerdo com uma seta apontando para o número 5.

O Robô VR irá conduzir até ao local do número ‘5‘ no Playground do Mapa da Grade de Números. No entanto, antes que o Robô de RV possa navegar para esse número, o Robô de RV deve ser informado onde está a localização desse número. Começando no centro do Playground, as coordenadas do número ‘5’ são (-100, -900).

Canto inferior esquerdo do playground do mapa de grade numérica de antes com os eixos x e y sobrepostos. Uma seta é mostrada de 100 negativo no eixo x para o número 5 e 900 negativo no eixo y para o número 5. O Robô VR ainda está no número 1 com as coordenadas negativas 900, negativas 900 abaixo do robô.

  • Para começar, o robô VR precisa estar voltado para o número ‘5’. Arraste ou digite um comando turn_for.
# Adicione o código do projeto em "main"
def main()
    :drivetrain.turn_for (RIGHT, 90, DEGREES)
  • Arraste um ciclo while sob o comando turn_for . O seu projeto deve ter este aspeto:
# Adicione o código do projeto em "main"
def main()
    :drivetrain.turn_for (RIGHT, 90, DEGREES)

    while condition:
        wait(5, MSEC)
  • Assim como a Unidade do Sensor de Distância, este projeto usará a condição da posição do Sensor de Localização com um operador de comparação para navegar no Playground do Mapa de Grade Numérica. Defina a condição para o ciclo while para o comando posição no eixo X inferior a -100 em milímetros (mm). O seu projeto deve ter este aspeto:
# Adicione o código do projeto em "main"
def main()
    :drivetrain.turn_for (RIGHT, 90, DEGREES)

    whilelocation.position (X, MM) < -100:
        wait(5, MSEC)
  • Arraste ou digite o comando drive sem espera dentro do ciclo while. O seu projeto deve ter este aspeto:
# Adicione o código do projeto em "main"
def main()
    :drivetrain.turn_for (RIGHT, 90, DEGREES)

    whilelocation.position (X, MM) < -100:
        drivetrain.drive(FORWARD)
        wait(5, MSEC)
  • Observe que o operador menor que é usado em vez do operador maior que porque o robô VR está dirigindo para a direita a partir do lado esquerdo do playground. O Robô VR começa com um valor X de -900 milímetros (mm). À medida que o robô VR avança, os valores X aumentam e, portanto, o robô continuará avançando enquanto o valor X for inferior a -100.

Canto inferior esquerdo do playground do mapa de grade numérica de antes com os eixos x e y sobrepostos. Uma seta é mostrada de 100 negativo no eixo x para o número 5 e 900 negativo no eixo y para o número 5. O Robô VR ainda está no número 1 com as coordenadas negativas 900, negativas 900 abaixo do robô.

Para sua informação

Você precisará escolher qual operador de comparação usar no seu projeto, dependendo da direção em que deseja que o Robô VR se desloque ao longo do eixo X ou Y. Quando o robô VR se estiver a mover para um valor superior, o operador inferior a (<) será utilizado com um ciclo while ; e quando o robô VR estiver a viajar para um valor inferior, o operador maior que (>) será utilizado com um ciclo while .

Isso se alinha com os movimentos para a esquerda e para a direita ao olhar para o Playground. Se o Robô VR estiver se movendo da esquerda para a direita ou de baixo para cima (valores maiores), o operador menor que é usado para dirigir enquanto a posição é menor que o valor alvo. 

Duas vistas de cima para baixo do playground do mapa de grade de números. No primeiro, o robô VR é mostrado no número 51 com uma seta indicando que o robô vai se mover para a direita para o número 60. O texto acima diz "dirigir enquanto a posição é menor que". No segundo, o robô VR é mostrado no número 6 com uma seta indicando que o robô vai se mover para cima até o número 96. O texto acima diz "dirigir enquanto a posição é menor que".

Se o Robô VR estiver se movendo da direita para a esquerda ou de cima para baixo (valores menores), o operador maior que é usado para dirigir enquanto a posição é maior que o valor alvo.

Duas vistas de cima para baixo do playground do mapa de grade de números. No primeiro, o robô VR é mostrado no número 60 com uma seta indicando que o robô vai se mover para a esquerda para o número 51. O texto acima diz 'drive while position is greater than'. No segundo, o robô VR é mostrado no número 96 com uma seta indicando que o robô vai se mover para baixo para o número 6. O texto acima diz 'drive while position is greater than'.

Usando os operadores de comparação, o Robô VR se deslocará enquanto o valor relatado pelo Sensor de Localização for maior que (>) ou menor que (<) o valor limite. Neste exemplo, o Robô VR navegará para 500 milímetros (mm) positivos no eixo X. O robô VR será acionado enquanto a posição no eixo X estiver entre 0 e 499 positivo. Quando o Sensor de Localização informa que a posição é 501 ou superior, o Robô VR irá parar de conduzir. 

# Adicione o código do projeto em "main"
def main():
    monitor_sensor(location.position
    )drivetrain.turn_for (RIGHT, 90, DEGREES)

    whilelocation.position (X, MM) < 500:
        drivetrain.drive(FORWARD)
        wait(5, MSEC)
    drivetrain.stop()

Observe que o valor relatado pelo Sensor de Localização não é exatamente 500 milímetros (mm). Como o Sensor de Distância, os operadores de comparação são usados devido ao tempo que leva para o Robô VR iterar os valores do projeto e do relatório.

  • Arraste ou digite um comando stop fora do ciclo while. O seu projeto deve ter este aspeto:
# Adicione o código do projeto em "main"
def main()
    :drivetrain.turn_for (RIGHT, 90, DEGREES)

    whilelocation.position (X, MM) < -100
        :drivetrain.drive (FORWARD)
        wait(5, MSEC)
    drivetrain.stop()
  • Abra a janela do playground  se ainda não estiver aberta. Certifique-se de que o Playground do Mapa de Grade Numérica seja aberto e execute o projeto.
  • Assista ao robô VR dirigir para o número ‘5’ no Playground Number Grid Map.

Imagem de cima para baixo do playground Number Grid Map. O Robô VR pode ser visto na parte inferior do número 5.

  • Neste projeto, o robô VR dirige para o número ‘5’ no Number Grid Map Playground. O ciclo while é utilizado para que o robô VR continue a avançar enquanto o valor X for menos do que o valor X da coordenada em que se encontra o número indicado.
  • Quando o valor X for superior a -100, o projeto passa para o comando seguinte fora do ciclo, que é um comando stop. Como o valor X do número ‘5’ é -100, o Robô VR parará de dirigir assim que o valor X for maior que -100.

Fluxo do projeto python que acabou de ser executado. Uma seta indica que o robô se move para o loop while assim que a curva à direita de 90 graus for concluída. Uma seta cíclica está ao lado do loop while com o texto 'x value less than negative 100 returns True, VR Robot drives forward.' Abaixo disso, há uma seta vermelha com texto que diz 'valor x maior que 100 negativo, retorna Falso. O robô VR para de dirigir.'

Para sua informação

Observe que o valor relatado pelo Sensor de Localização pode não ser exatamente -100 milímetros (mm). Como o Sensor de Distância, os operadores de comparação são usados devido ao tempo que leva para o Robô VR iterar os valores do projeto e do relatório.

O painel na janela Playground aumentou o zoom para mostrar que o valor x relatado do sensor de localização é negativo em 90 milímetros.

No VEXcode VR Python, você pode usar um operador de comparação maior ou igual a (>=) ou menor ou igual a (<=) no seu projeto para ter uma precisão adicional nos seus movimentos.

# Adicione o código do projeto em "main"
def main()
    :drivetrain.turn_for (RIGHT, 90, DEGREES)

    whilelocation.position (X, MM) <= -100
        :drivetrain.drive (FORWARD)
        wait(5, MSEC)
    drivetrain.stop()

Dependendo da velocidade do Robô VR e da rapidez com que o projeto itera através do loop, você pode ver que o Robô VR é capaz de parar mais perto do valor limite quando o ou igual a (<= ou >=) é adicionado ao operador.

Selecione o botão Seguinte para continuar com o resto desta lição.