Maqueen V3 x UNIHIKER K10 Lição 7: Robô com desvio de múltiplos obstáculos

No cotidiano, frequentemente nos deparamos com situações que exigem desvio de obstáculos. Por exemplo, ao dirigir um carro em ruas estreitas, é necessário estar atento aos obstáculos ao redor para evitar colisões. Em ambientes domésticos, os aspiradores robóticos precisam navegar de forma inteligente ao redor de móveis e obstáculos para realizar tarefas de limpeza com eficiência. Então, como podemos utilizar a tecnologia para dotar robôs com essa capacidade de evitação inteligente?

A seguir, implementaremos um robô de evitação de obstáculos com medição de distância multiponto, utilizando o carrinho Maqueen Plus V3 e um sensor de medição a laser matricial. Com 64 pontos laser cobrindo um campo de 60°, o veículo pode realizar detecção de desníveis, desvio de obstáculos e seguimento de linha com evitação de obstáculos. Este não é apenas um projeto envolvente, mas também nos ajuda a entender melhor as aplicações práticas da tecnologia inteligente de evitação de obstáculos. Vamos explorar juntos como realizar isso!

Objetivos da Tarefa

Utilizar os dois modos distintos do sensor de medição a laser matricial (modo matricial e modo de evitação de obstáculos) para implementar a função de desvio inteligente do carrinho em diferentes ambientes.

Modo Matricial: Usar 1 feixe de laser para permitir que o carrinho realize detecção de desníveis (bordas de precipício).Usar 2 feixes de laser para permitir que o carrinho realize contorno de obstáculos.

Modo de Evitação de Obstáculos: Combinar o modo de evitação com a função de seguimento de linha, fazendo com que o carrinho gire automaticamente quando detectar um obstáculo à frente durante o percurso.

Conhecimentos Teóricos

1. Aprender a utilizar o sensor de medição a laser matricial para medição de distância multiponto.

2. Implementar estratégias de evitação de obstáculos, como detecção de desníveis e contorno de barreiras.

3. Compreender o conceito da tecnologia de controle PID para ajuste de ângulo.

4. Explorar cenários de aplicação do sensor de medição a laser matricial.

Lista de Materiais

Hardware necessário:

HARDWARE LIST
1 Maqueen Plus V3
1 UNIHIKER K10
1 Mapa complexo

Software necessário:

Software de programação Mind+ (versão V1.8.1 RC1.0 ou superior) ×1

Link para download: https://mindplus.cc/

Prática

Este projeto utiliza os dois modos distintos do sensor de medição a laser matricial para implementar diferentes funcionalidades. No modo matricial, empregaremos um feixe de laser para detecção de desníveis e dois feixes para contornar obstáculos. No modo de evitação de obstáculos, combinaremos com a função de seguimento de linha, permitindo que o carrinho execute uma inversão automática ao encontrar obstáculos durante o percurso. A implementação concreta divide-se nas três tarefas a seguir.

Tarefa 1: Detecção de Desníveis

Utilizar o modo matricial do sensor de medição a laser matricial para verificar se há um desnível à frente. Caso seja detectado um desnível, o carrinho deverá virar à direita para evitá-lo; caso contrário, seguirá em frente.

Tarefa 2: Contorno de Obstáculos

Empregar o modo matricial do sensor de medição a laser matricial para verificar a presença de obstáculos nos lados esquerdo e direito, ajustando a direção do carrinho conforme os resultados obtidos. Se for detectado um obstáculo à esquerda, o carrinho deverá deslocar-se para a direita; se for detectado um obstáculo à direita, deverá deslocar-se para a esquerda.

Tarefa 3: Evitação de Obstáculos durante Seguimento de Linha

Utilizar o modo de evitação de obstáculos do sensor de medição a laser matricial, em conjunto com a função de seguimento de linha, para que o carrinho realize uma inversão automática ao se deparar com obstáculos durante o trajeto.

Tarefa 1: Detecção de Precipícios

1. Conexão de Hardware

Utilize um cabo de dados USB 3.0 para Type-C para conectar o robô montado ao computador. Observação: A extremidade Type-C deve ser conectada à placa UNIHIKER K10.

2. Preparação do Software

Abra o Mind+ e siga as ilustrações abaixo para concluir a preparação do software.

3. Programação

(1) Inicialização do sensor

No bloco "UNIHIKER K10 na partida", utilize as instruções "Inicialização do sistema" e "Inicializar sensor laser endereço I2C 0x30 modo Modo de matriz" para configurar o robô e o módulo de laser matricial.

Observação: A instrução oferece quatro endereços configuráveis (0x30, 0x31, 0x32, 0x33), sendo 0x33 o padrão. Para detalhes sobre como confirmar o endereço I2C, consulte a seção "Conhecimentos".

Criação da variável "distância" Crie uma variável denominada "distância" para armazenar a distância detectada em tempo real. Esta variável deve ser inicializada com o valor da distância medida pelo sensor laser matricial durante a inicialização do veículo.

Utilize o comando "Medir distância no ponto x: y: (mm) modo matriz" com o feixe de laser especificado (x:3, y:3) para realizar a detecção de distância. O sensor de medição a laser matricial emprega um arranjo de 8x8, totalizando 64 feixes de laser para pontos de medição, conforme ilustrado abaixo:

Esta tarefa tem como objetivo principal a identificação de precipícios, sendo recomendável utilizar o feixe de laser central para medição de distância. O feixe nas coordenadas x3y3 é particularmente adequado para esta finalidade. Portanto, atribua o valor retornado pelo comando "Medir distância no ponto x:3 y:3 (mm) modo matriz" à variável "distância".

Crie uma nova variável denominada "iniciar_distância" e inicialize-a com o valor contido na variável "distância".

(2) Medição de distância em tempo real

Após a conclusão da inicialização, dentro do bloco de instrução "repita sempre", utilize o comando "Medir distância no ponto x:3 y:3 (mm) modo matriz" para realizar a detecção contínua da distância medida pelo feixe de laser x3y3. Atribua o valor obtido à variável "distância".

(3) Detecção de Precipício

Para simular um ambiente com precipício, selecione uma caixa de papel com área moderada e altura aproximada de 5cm (a altura deve ser ajustada conforme a caixa disponível). Posicione o veículo sobre a caixa, considerando a área externa como o precipício.

Durante a inicialização, é realizada uma medição inicial armazenada na variável "iniciar_distância". Quando a distância atual detectada pelo sensor laser matricial variável "distância" exceder o valor de "iniciar_distância" + 50 (altura da caixa de papel), isso indica que o veículo atingiu a borda do precipício.

Observação: Caso a altura da caixa utilizada seja de 10cm, ajuste este valor para 100.

Se a condição for verdadeira (borda do precipício detectada), utilize os comandos "Configurar Esquerda motor direção Girar para frente velocidade 150" e "Configurar Direita motor direção Girar para frente velocidade 0" para fazer o veículo virar à direita.

Se a condição for falsa (precipício não detectado), utilize o comando "Configurar Tudo motor direção Girar para frente velocidade 100" para manter o veículo em movimento reto.

4. Execução do programa

Antes de executar o program a, por favor assegure que o UNIHIKER K10 está corretamente conectado ao computador através de um cabo USB. Após confirmar a precisão, clique no botão "Executar" no software. Após o programa ser carregado com sucesso, coloque o carro na caixa de papel preparada. Quando o sensor de intervalo laser da matriz detecta a borda do muro, o carro gira à direita; Caso contrário, avance.

Observações importantes:

1. O sensor de medição a laser matricial requer aproximadamente 3 segundos para inicialização. Durante este período, o veículo permanecerá inativo. Aguarde pacientemente a conclusão da inicialização do sensor.

2. Evite ao máximo realizar operações de exibição de imagens na tela do UNIHIKER K10 dentro de instruções de loop. A atualização da tela pode consumir tempo de processamento significativo, prejudicando o desempenho da detecção de distância pelo sensor laser.

Tarefa 2: Desvio de Obstáculos

1. Programação

(1) Inicialização do sensor No bloco "UNIHIKER K10 na partida", utilize as instruções "Inicialização do sistema" e "Inicializar sensor laser endereço I2C 0x30 modo de matriz" para configurar o veículo e o módulo de laser matricial.

Crie as variáveis "Esquerda" e "Direita", inicializando ambas com valor 0.

(2) Medição de distância em tempo real

Utilize o comando "Medir distância no ponto x: y: (mm) modo matriz" para selecionar os feixes de laser esquerdo (x:6 y:6) e direito (x:7 y:6) para detecção de distância. Atribua a distância medida à esquerda à variável "Esquerda" e a distância medida à direita à variável "Direita".

(3) Desvio de obstáculos

Em seguida, utilize a estrutura condicional "se...então...senão se ...então...senão" para implementar a lógica de desvio de obstáculos.

Primeiro, verifique se há obstáculos no lado esquerdo. Quando o valor da variável "Esquerda" for menor que 200 e maior que 0, isso indica a presença de um obstáculo à esquerda.

Se a condição for verdadeira (obstáculo detectado), utilize os comandos "Configurar Esquerda motor direção Girar para frente velocidade 150" e "Configurar Direita motor direção Girar para frente velocidade 0" para direcionar o veículo para a direita.

Caso contrário, verifique se há obstáculos no lado direito. Quando o valor da variável "Direita" for menor que 200 e maior que 0, isso indica a presença de um obstáculo à direita. Utilize os comandos "Configurar Esquerda motor direção Girar para frente velocidade 0" e "Configurar Direita motor direção Girar para frente velocidade 150" para direcionar o veículo para a esquerda.

Observação: A condição da variável "left" ser maior que 0 serve para filtrar possíveis detecções falsas.

Caso contrário, se nenhum obstáculo for detectado nem à esquerda nem à direita, utilize o comando "Configurar Tudo motor direção Girar para frente velocidade 150" para fazer o veículo avançar. O programa completo é mostrado abaixo:

2. Execução do programa

Antes de executar o programa, certifique-se que o UNIHIKER K10 está corretamente conectado ao computador via cabo USB. Após verificação, clique no botão "Executar" no software. Com o programa carregado com sucesso, posicione o veículo no solo. Quando o sensor de medição a laser matricial detectar um obstáculo à esquerda, o veículo se moverá para a direita; quando detectar um obstáculo à direita, mover-se-á para a esquerda.

Tarefa 3: Seguimento de linha com desvio de obstáculos

Nas tarefas anteriores, já aprendemos como utilizar o sensor de medição a laser matricial para detecção de precipícios e identificação de obstáculos. Agora, vamos utilizar o modo de desvio de obstáculos do sensor laser matricial para implementar a função de seguimento de linha com desvio. A seguir, vamos explorar as diferenças entre esses dois modos!

1. Programação

(1) Função de seguimento de linha Nesta tarefa, é necessário programar o veículo para seguir uma linha. Portanto, utilize o comando "Inicialização do sistema" para realizar a configuração inicial do sistema.

Utilize o comando "Configurar velocidade 3 para seguir linha" para definir a velocidade de seguimento do veículo como 3. Em seguida, use o comando "Seguir linha Ativar" para iniciar a função de seguimento.

(2) Função de desvio de obstáculos

No bloco "UNIHIKER K10 na partida", utilize o comando "Inicializar sensor laser endereço I2C 0x30 modo de desvio de obstáculos" para ativar a função de desvio do sensor laser matricial.

Dentro da instrução "repita sempre", utilize o comando "Obter dados de evitação de obstáculos" para adquirir em tempo real a distância detectada pelo sensor de medição a laser matricial em relação aos obstáculos.

Crie uma nova variável "distância" e inicialize seu valor como 0. Utilize o comando "Detecção de distância Frente (mm) no modo evitação" para obter continuamente a distância frontal e armazenar o resultado na variável "distância".

(3) Seguimento de linha com desvio de obstáculos

Durante o seguimento de linha, o veículo verifica se a distância frontal é inferior à distância de segurança (20cm). Caso a distância frontal seja menor que 20cm, indica a presença de um obstáculo à frente.

Utilize a instrução condicional "Se...então" para avaliar a existência de obstáculos. Quando o valor da variável "distância" for menor que 200 e maior que 0, a condição é verdadeira, confirmando a detecção de obstáculo frontal. Neste caso, execute o comando "Seguir linha Parar" para interromper o movimento de seguimento do veículo.

Após interromper o seguimento de linha, é necessário controlar a inversão de direção do veículo. Utilize o comando "Controle PID de ângulo 180° Não permitir interrupção" para executar uma rotação de 180 graus, completando assim a inversão de marcha.

Observação: A opção "não permitir interrupção" significa que nenhuma outra operação poderá ser executada até que o veículo complete a rotação de 180 graus.

Após a conclusão da inversão de direção, utilize o comando "Seguir linha Ativar" para retomar a função de seguimento. O programa completo é apresentado a seguir:

2. Execução do programa

Antes de executar o programa, certifique-se que o UNIHIKER K10 está corretamente conectado ao computador via cabo USB. Após verificação, clique no botão "Executar" no software. Após o carregamento bem-sucedido do programa, posicione o veículo no mapa de seguimento de linha. Durante o seguimento, ao detectar um obstáculo à frente, o veículo realizará uma inversão de direção no local; após completar a inversão, retomará o seguimento de linha.

Conhecimentos Técnicos

1. Como escanear endereços I2C

Como a interface do sensor de medição a laser matricial utiliza protocolo I2C, e o veículo possui 3 portas I2C disponíveis, podemos conectá-lo a qualquer uma delas. Porém, após a conexão, como determinar o endereço I2C correspondente ao pino utilizado? O comando "Inicializar sensor laser endereço I2C modo" oferece quatro opções de endereço: 0x30, 0x31, 0x32 e 0x33. A seguir estão os passos detalhados para determinar o endereço I2C correspondente ao pino conectado:

Passo 1: Criar novo projeto e preparar ambiente de software

Abra o software Mind+ e crie um novo projeto.

Conclua os preparativos do software conforme ilustrado abaixo, garantindo que todos os módulos e bibliotecas necessários estejam corretamente carregados.

Passo 2: Adicionar função de varredura de endereço I2C

Clique em "Extensões", localize o módulo "Varredura de endereço I2C" na seção "Módulos funcionais" e complete sua adição.

Passo 3: Programar a rotina de varredura de endereços

Desenvolva um programa simples para varredura de endereços I2C, configurando-o para exibir os endereços detectados na área de impressão serial.

Passo 4: Carregar programa e verificar resultados

Após o carregamento bem-sucedido do programa, abra o monitor serial. A área de impressão serial exibirá os endereços I2C detectados na varredura.

Passo 5: Identificar o endereço I2C correto

No monitor serial, serão exibidos múltiplos endereços I2C. Estes podem incluir todos os endereços dos dispositivos I2C conectados ao veículo. Dentre eles, apenas o endereço 0x30 corresponde à opção disponível no comando "Inicializar sensor laser endereço I2C modo". Portanto, o endereço I2C atribuído ao sensor laser matricial é 0x30.

2. Compreendendo a tecnologia de controle PID

O controle PID (Proporcional-Integral-Derivativo) é um algoritmo de controle em malha fechada amplamente utilizado em automação industrial e controle robótico. Ele ajusta em tempo real a variável de controle para garantir que a saída do sistema atinja com precisão o valor desejado.

Embora possa parecer complexo, na verdade encontramos aplicações de PID no cotidiano: como no controle de temperatura de chaleiras elétricas, veículos auto-equilibrados, máquinas de chá e controle térmico em impressoras 3D - sempre que há necessidade de "manter uma variável estável", o PID pode ser aplicado.

(1) Princípio de controle de temperatura em aquecedores

Tomemos como exemplo o controle de um aquecedor para manter a água a 50℃. O método mais simples seria: aquecer quando abaixo de 50℃; desligar quando atingir ou ultrapassar 50℃. Isso é chamado de "controle ON-OFF" - embora simples, possui baixa estabilidade. Aplicado ao controle de velocidade de veículos, resultaria em variações bruscas, causando desconforto.

Por que isso ocorre? Porque: o sistema possui inércia (calor residual na temperatura, impulso do veículo); sensores e controladores possuem tempo de resposta limitado, não podendo ajustar instantaneamente. É nestes casos que se faz necessário um algoritmo mais inteligente - o PID.

(2) Breve descrição das três componentes do PID:

P (Proporcional): Quanto maior o erro, mais rápida a correção; erros pequenos resultam em ajustes suaves. Proporciona um controle "gradual", evitando variações bruscas.

I (Integral): Corrige pequenos erros persistentes através de acumulação, eliminando situações como "não aquecer por diferença mínima".

D (Derivativo): Antecipa tendências para prevenir excessos, como reduzir o aquecimento antecipadamente quando a temperatura se aproxima do valor desejado.

Desta forma, o sistema consegue controlar grandezas físicas como temperatura e velocidade de maneira mais suave e precisa. O PID é, em essência, um método clássico que torna o controle "inteligente".

3. Compreendendo os cenários de aplicação do sensor de medição a laser matricial

O sensor de medição a laser matricial é um dispositivo capaz de obter simultaneamente informações de distância em múltiplas direções. Em comparação com métodos tradicionais como infravermelho, ultrassom ou medição a laser de ponto único, ele pode formar um "campo de visão bidimensional" dentro de um ângulo específico, funcionando como "olhos" com visão espacial, realizando varreduras rápidas e precisas do ambiente circundante.

(1) Como ele é e o que pode fazer?

Geralmente composto por um arranjo de emissores e receptores laser, nosso sensor de medição a laser matricial utiliza uma matriz 8×8, capaz de obter valores de distância em 64 direções simultaneamente dentro de um setor de 60°. Ele percebe em tempo real a posição e distância de objetos dentro de seu ângulo de cobertura. Com vantagens como rapidez, precisão e independência de condições luminosas, equivale à capacidade humana de perceber obstáculos em múltiplas direções simultaneamente, ao invés de "medir uma direção, girar, e medir outra".

(2) Quais são os cenários de aplicação na vida real?

Tomando nosso veículo como exemplo: anteriormente utilizávamos sensores infravermelhos ou ultrassônicos que mediam apenas uma direção, limitando-se à detecção frontal. Agora, com o sensor de medição a laser matricial, o veículo "ganha visão", identificando obstáculos a 20cm na frente esquerda e ausência de barreiras à direita; decide automaticamente que "o lado direito está livre" e desvia com sucesso. Com essa "visão" bidimensional, a evitação de obstáculos torna-se mais precisa e o trajeto mais lógico, como se adquirisse verdadeira percepção espacial.

Desafio

Nas tarefas 1 e 2, aprendemos como utilizar 1 feixe de laser para detecção de precipícios e 2 feixes para detecção de obstáculos laterais. Agora, vamos expandir essa funcionalidade utilizando 3 feixes de laser para detectar obstáculos nas direções esquerda, central e direita, permitindo que o veículo se mova automaticamente na direção livre de obstáculos. Isso proporcionará ao veículo maior capacidade de desvio em ambientes complexos.

Observação: Os 3 feixes de laser utilizados estão devidamente marcados no diagrama.

icon Lição 7 Programa.zip 665KB Download(1)

Quer explorar mais?

Lição 2: Pet Digital Personalizado

Lição 3: Definir o Modo de Interação com Pets

Liçao 4: Robô Inteligente de Monitoramento Ambiental

Lição 5: Robô Seguidor de Linha Autônomo

Lição 6: Robô de Navegação em Vias Complexas

💬 Já criamos uma comunidade WhatsApp exclusiva para usuários de língua portuguesa do Brasil! Entre para o grupo e receba as informações mais atualizadas, novidades incríveis de projetos, descontos e muitas outras surpresas!

Whatsapp comunidade: https://chat.whatsapp.com/KTCdPBQDDWTGHlS5LoO8HC

License
All Rights
Reserved
licensBg
0