Índice:
- Etapa 1: Por que usar uma unidade de medição inercial?
- Etapa 2: como usar o BNO055 para localização 2D?
- Etapa 3: Ponto de Vista do Hardware
- Etapa 4: Como funciona?
- Etapa 5: a arquitetura e o software
- Etapa 6: O que eu aprendi?
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
O contexto:
Estou construindo para me divertir um robô que quero mover autonomamente dentro de uma casa.
É um trabalho longo e estou fazendo passo a passo.
Já publiquei 2 instructables sobre esse assunto:
- um sobre como fazer um codificador de roda
- um sobre conexão wi-fi
Meu robô é acionado por 2 motores CC com a ajuda do meu codificador de roda feito em casa.
Atualmente, estou melhorando o controle de movimento e passei algum tempo com giroscópio, acelerômetro e IMU. Terei prazer em compartilhar essa experiência.
Você quer saber mais sobre localização? Aqui está um artigo sobre como combinar inteligência artificial e ultrassom para localizar o robô
Etapa 1: Por que usar uma unidade de medição inercial?
Então, por que usei uma IMU?
A primeira razão é que se o codificador de roda é preciso o suficiente para controlar o movimento reto, mesmo após o ajuste, eu não fui capaz de obter uma precisão de rotação inferior a + - 5 graus e isso não é suficiente.
Tentei 2 sensores diferentes. Primeiramente eu uso um magnetômetro (LSM303D). O princípio era simples: antes da rotação, obtenha a orientação norte, calcule o alvo e ajuste o movimento até que o alvo seja alcançado. Foi um pouco melhor do que com o codificador, mas com muita dispersão. Depois disso, tentei usar um giroscópio (L3GD20). O princípio era apenas integrar a velocidade de rotação fornecida pelo sensor para computar a rotação. E funcionou bem. Consegui controlar a rotação a + - 1 grau.
Mesmo assim, estava curioso para experimentar alguns IMU. Eu escolho um componente BNO055. Passei algum tempo entendendo e testando esta IMU. No final decidi selecionar este sensor pelos seguintes motivos
- Posso controlar a rotação tão bem quanto com o L3GD20
- Posso detectar uma ligeira rotação ao mover em linha reta
- Preciso obter a orientação norte para a localização do robô e a calibração da bússola do BNO055 é muito simples
Etapa 2: como usar o BNO055 para localização 2D?
BNO055 IMU é um sensor inteligente de 9 eixos da Bosch que pode fornecer orientação absoluta.
A folha de dados fornece uma documentação completa. É um componente de alta tecnologia, é um produto bastante complexo e passei algumas horas aprendendo como funciona e experimentando diferentes formas de utilizá-lo.
Acho que pode ser útil compartilhar essa experiência.
Em primeiro lugar, usei a biblioteca Adafruit, que fornece uma boa ferramenta para calibrar e descobrir o sensor.
No final e depois de muitos testes, decidi
- use a biblioteca Adafruit apenas para salvar a calibração
- use 3 de todos os modos possíveis de BNO055 (NDOF, IMU, Compss)
- dedicar um Arduino Nano para calcular a localização com base em medições BNO055
Etapa 3: Ponto de Vista do Hardware
BNO055 é um componente I2C. Portanto, ele precisa de fonte de alimentação, SDA e SCL para se comunicar.
Apenas tome cuidado com a tensão Vdd de acordo com o produto que você comprou. O chip da Bosch funciona na faixa: 2,4 V a 3,6 V e você pode encontrar componentes de 3,3 V e 5 V.
Não há dificuldades para conectar o Nano e o BNO055.
- O BNO055 é movido pelo Nano
- SDA e SCL são conectados com 2 resistores pull-up de 2k.
- 3 LEDs conectados ao Nano para diagnóstico (com resistores)
- 2 conectores usados para definir o modo após a inicialização
- 1 conector em direção ao BNO (Gnd, Vdd, Sda, Scl, Int)
- 1 conector em direção ao Robô / Mega (+ 9V, Gnd, sda, Scl, Pin11, Pin12)
Um pouco de solda e pronto!
Etapa 4: Como funciona?
Do ponto de vista da comunicação:
- O Nano é o barramento mestre I2C
- O Robot / Mega e o BNO055 são escravos I2C
- O Nano lê os registros BNO055 permanentemente
- O Robot / Mega sobe um sinal numérico para solicitar a palavra do Nano
Do ponto de vista do cálculo: O Nano combinado com o BNO055 oferece
- O título da bússola (usado para localização)
- Um rumo relativo (usado para controlar as rotações)
- O rumo e a posição absolutos (usados para controlar os movimentos)
Do ponto de vista funcional: The Nano:
- gerencia a calibração BNO055
- gerencia os parâmetros e comandos BNO055
O subsistema Nano e BNO055:
- calcular para cada roda do robô o rumo absoluto e a localização (com um fator de escala)
- calcular o rumo relativo durante a rotação do robô
Etapa 5: a arquitetura e o software
O software principal está rodando em um Arduino Nano
- A arquitetura é baseada na comunicação I2C.
- Optei por dedicar um Nano devido ao fato de que o Atmega que roda o robô já estava carregado e essa arquitetura torna mais fácil reutilizá-lo em outro lugar.
- O Nano lê os registros BNO055, calcula e armazena o cabeçalho e a localização em seus próprios registros.
- O Arduino Atmega que executa o código do robô, envia informações dos codificadores de rodas para o Nano e lê os cabeçalhos e a localização dentro dos registradores do Nano.
O código de subsistema (Nano) está disponível aqui no GitHub
A ferramenta de calibração Adafruit se aqui no GitHub (a calibração será armazenada no eeproom)
Etapa 6: O que eu aprendi?
Em relação a I2C
Primeiramente tentei ter 2 mestres (Arduino) e 1 escravo (sensor) no mesmo barramento, mas no final é possível e mais fácil configurar apenas o Nano como mestre e usar a conexão GPIO entre os 2 Arduinos para "solicitar o token".
Em relação ao BNO055 para orientação 2D
Posso me concentrar em 3 modos de execução diferentes: NDOF (combinar giroscópio, acelerômetro e Compas) quando o robô está ocioso, IMU (combinar giroscópio, acelerômetro) quando o robô está se movendo e Bússola durante a fase de localização. Alternar entre esses modos é fácil e rápido.
Para reduzir o tamanho do código e manter a possibilidade de usar a interrupção BNO055 para detectar colisão, prefiro não usar a biblioteca Adafruit e fazê-lo por conta própria.
Recomendado:
Transformei uma unidade de CD antiga em um robô Wifi usando o Nodemcu, a unidade de motor L298N e muitos mais: 5 etapas
Transformei um drive de CD antigo em um robô Wifi usando Nodemcu, L298N Motor Drive e muitos outros: VX Robotics & Eletrônica presente
Como fazer uma unidade flash USB usando um apagador. Caixa de unidade USB DIY: 4 etapas
Como fazer uma unidade flash USB usando um apagador. DIY USB Drive Case: Este blog é sobre " Como fazer uma unidade flash USB usando um apagador | DIY USB Drive Case " Eu espero que você goste
ARUPI - uma unidade de gravação automatizada de baixo custo / unidade de gravação autônoma (ARU) para ecologistas de paisagens sonoras: 8 etapas (com fotos)
ARUPI - uma unidade de gravação automatizada de baixo custo / unidade de gravação autônoma (ARU) para ecologistas de paisagens sonoras: Este instrutível foi escrito por Anthony Turner. O projeto foi desenvolvido com muita ajuda do Galpão da Escola de Computação da Universidade de Kent (o Sr. Daniel Knox foi de grande ajuda!) Ele vai mostrar como construir uma Gravação de Áudio Automatizada U
Como criar uma unidade USB inicializável sem usar nenhum software: 3 etapas
Como criar uma unidade USB inicializável sem usar nenhum software: Para criar uma unidade USB inicializável manualmente, usaremos o prompt de comando como um programa padrão do Windows. Aqui estão os passos a passo para criar uma unidade USB inicializável como a mídia de instalação do Windows. Para criar uma unidade USB inicializável como um instalador do Windows
Uma maneira realmente simples / fácil / não complicada de fazer pessoas / humanos / animais / robôs parecerem ter uma visão de calor realmente fria / brilhante (cor de sua escolha) usando o GIMP: 4 etapas
Uma maneira realmente simples / fácil / não complicada de fazer pessoas / humanos / animais / robôs parecerem ter uma visão de calor realmente fria / brilhante (cor de sua escolha) usando o GIMP: Leia … o … título