Skip to content

Laboratório 11 - Digirindo pela MC404-Town

📝 Descrição - Peso 2

Neste laboratório, você deve mover um carrinho de um ponto inicial até um ponto final em menos de 180 segundos. O carro é um dispositivo externo conectado ao processador RISC-V e pode ser acessado e controlado exclusivamente por meio de MMIO.

Controlando o Carrinho

Neste exercício você deve APENAS usar a MMIO para controlar o carro. As especificações de MMIO para o carrinho podem ser vistas a seguir:

MMIO - Manual
Endereço Tamanho Descrição
base+0x00 byte Guardar 1 simboliza para que o dispositivo de GPS começe a ler as coordenadas e rotação do carro. É setado para 0 quando a leitura é finalizada.
base+0x01 byte Guardar 1 simboliza para que o dispositivo "Line Camera" capture uma imagem. É setado para 0 quando a captura está completa.
base+0x02 byte Guardar 1 simboliza para que o dispositivo de Sensor Ultrassônico meça a distância na frente do carro. É setado para 0 quando a medida está completa.
base+0x04 word Guarda o ângulo X de Euler da rotação do carro do último momento lido pelo GPS.
base+0x08 word Guarda o ângulo Y de Euler da rotação do carro do último momento lido pelo GPS.
base+0x0C word Guarda o ângulo Z de Euler da rotação do carro do último momento lido pelo GPS.
base+0x10 word Guarda a coordenada X do carro do último momento lido pelo GPS.
base+0x14 word Guarda a coordenada Y do carro do último momento lido pelo GPS.
base+0x18 word Guarda a coordenada Z do carro do último momento lido pelo GPS.
base+0x1C word Guarda a distância (em centímetros) entre o Sensor Ultrassônico e o obstáculo mais próximo. Retorna -1 se não tem nenhum obstáculo a menos de 20m.
base+0x20 byte Seta a direção do volante. Negativo para a esquerda e positivo para a direita.
base+0x21 byte Seta a direção do motor.
1: Para frente.
0: Desligado.
-1: Para trás.
base+0x22 byte Seta o freio de mão. (1 = Ligado)
base+0x24 256-byte array Guarda a imagem capturada pela Line Camera. Cada byte representa a luminância de um pixel.

Você deve utilizar exclusivamente a MMIO para controlar o volante, motor, freios e obter coordenadas do carro. O teste do assistente verificará se o carro alcançou o ponto de destino com precisão suficiente. Certifique-se de que seu código chame a syscall de exit para encerrar a execução corretamente.

Infraestrutura

Para usar o carro, primeiro você deve ativar o dispositivo "Self-Driving Car" no simulador. Isso pode ser feito na aba de "Hardware", selecionando o dispositivo "Self-Driving Car" como na imagem a seguir. Depois de adicionar o dispositivo, seu "base address" vai estar listado na tabela:

Figure 7.1.2: Memory Map Table

Feito isso, o carro pode ser acessado na aba esquerda do simulador, como mostrado na imagem a seguir:

Figure 7.1.3: Car Menu Tab

Note que ao adicionar o dispositivo, o carro será posicionado em uma coordenada arbitrária. Para posicioná-lo na posição de teste, utilize o Assistant.

Caso deseje mover o carro manualmente e de forma livre, ative a opção "Enable debug controls" e utilize as teclas de direção ou WASD, conforme demonstrado abaixo:

Figure 7.1.4: Debug Controls

✅ Teste

O assistente irá posicionar o carro em um local específico e seu objetivo é chegar até o poste à sua direita, como é realizado no gif abaixo.

Car Challenge GIF

💡 Dicas

  • Os valores de direção do volante vão de -127 até 127. Valores negativos giram a roda para a esquerda e positivos para a direita
  • Para debugar, você consegue controlar o carro usando as setas ou WASD, com a opção "Enable debug controls" ativada. Porém, quando for testar no assistente, desative essa opção.
  • Quando você entra pelo link da atividade, o simulador já está preparado com o carro.
  • Você pode testar seu código a partir do Link.

Warning

  • Qualquer alteração no arquivo de report será considerado fraude
  • Esta é uma atividade que deve ser realizada programando-se em linguagem de montagem - A submissão de programas em linguagem de programação de alto nível, como C, ou de programas gerados por ferramentas de compilação, serão considerados como fraude
  • Está é uma atividade individual, o qual deve ser desenvolvido individualmente, qualquer forma de cópia ou plágio será penalizada. Portanto, atividades que apresentarem semelhanças injustificadas serão atribuídas nota zero para todos os envolvidos