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:
Feito isso, o carro pode ser acessado na aba esquerda do simulador, como mostrado na imagem a seguir:
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:
✅ 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.
💡 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