Unidade de Controle Robótico por Comportamento
Participantes:
Daniel Gerk de Azevedo QuadrosResumo do projeto:
Neste projeto a Franzininho WiFi será utilizada para construir uma unidade de controle robótico para estudo e aprendizado da programação de robôs através de comportamentosDescrição do projeto:
Neste projeto a Franzininho WiFi será utilizada para construir uma unidade de controle robótico para estudo e aprendizado da programação de robôs através de comportamentos. Neste paradigma, são construídas rotinas para implementar atuações baseadas em um conjunto restrito de sensores – os comportamentos. Um módulo central solicita as atuações determinadas pelos vários comportamentos e decide, através de uma máquina de estados e/ou prioridades qual atuação deve ser executada.
A unidade de controle deverá se instalada sobre um chassi de robô com dois conjuntos independentes de motor+roda. Para simplificar esta instalação, ela conterá a Franzininho, sensores, drivers dos motores e a alimentação. Bastará conectar os dois motores.
Serão usados dois pares de sensores. Um utilizará fotocélulas para detecção de luz. O outro utilizará emissores/detectores de IR para detectar a presença de obstáculos próximos. Um buzzer e LEDs fornecerão indicação sonora e visual do estado da unidade controladora.
Serão implementados alguns comportamentos básicos, como caminhar em direção à luz e seguir paredes. O recurso de comunicação WiFi da Franzininho será utilizado para permitir selecionar e configurar os comportamentos através de um celular.
Este projeto irá se basear no apresentado no livro “Robot Programming: A Practical Guide to Behavior-Based Robotics” de Joseph Jones.
Histórico do desenvolvimento:
23 de outubro de 2021 – De onde veio e para onde vai o ComportaBot
A inspiração para este projeto veio do livro “Robot Programming” de Joseph L. Jones. Um livro que comprei anos atrás (baseado em alguma recomendação), ficou na minha estante tomando pó e finalmente foi lido este ano.
Resumindo, a ideia do livro é comandar um robô através de uma série de comportamentos simples e independentes. Cada comportamento recebe a situação atual dos sensores e, conforme a sua lógica interna, decide o que gostaria que fosse feito com os atuadores. Um ou mais arbitradores decidem qual dos comportamentos irá efetivamente controlar os atuadores.
Por exemplo, poderíamos ter um robô com os seguintes comportamentos:
- Fuga: gira o robô se estiver bloqueado
- Mariposa: gira o robô para ficar virado para onde tem mais luminosidade
- Cruzeiro: o robô segue reto na direção atual
- Resistores sensíveis a luz (LDR) para detectar e localizar (grosseiramente) luz
- Sensores infravermelho (IR) para detectar obstáculos
- Detecção de colisão através da monitoração da corrente no motor
- Driver para dois motores DC
30 de outubro de 2021 – Um chassis para o ComportaBot
O chassis que vou usar nos testes é um kit (comprado aqui faz um bom tempo). Não é exatamente o que pensava para o ComportaBot, mas tem mais que o essencial. O tamanho é um pouco grande, particularmente as rodas. A velocidade de 1 m/s parece alta, mas deve dar para diminuir usando PWM. O kit inclui um port baterias para quatro pilhas AA, não sei ainda se vou usar isso. Tem também encoder para medir a velocidade das rodas, algo que não contava mas pode ser útil para detectar bloqueio (ao invés de monitorar a corrente no motor).
Os componentes que já separei para o projeto são os básicos: dois LDRs pequenos e LEDs e sensores IR. Na foto tem um driver de motor baseado no L298, que ainda não sei se vou usar. De um lado ele possui duas pontes H, o que permite não só controlar os dois motores como mudar a direção do motor. Por outro ele é um pouco exagerado para a corrente dos motores usados e, na minha experiência, é um componente que queima fácil. Uma leitura rápida do datasheet sugere que deve ser possível ligar diretamente os sinais de controle do Franzininho WiFi no L298 (a tensão mínima para o nível alto é 2,3V, o que é atendido pelo ESP32S2 operando a 3,3V).
21 de dezembro de 2021 – Controle dos Motores
Primeiro teste bem sucedido de controle dos motores. O L298 utiliza três sinais para o controle de cada uma das duas pontes H:
- Enable: Quando low a ponte é desligada e os sinais de saída ficam desconectados (o faz com que o motor gire livre). Quando high, a ponte está ativa e a polaridade dos sinais de saída depende dos outros dois sinais.
- IN1 e IN2: Estes sinais só são considerados quando o sinal de enable está high. As quatro combinações de IN1 e IN2 determinam a tensão nos pinos de saída:
- OUT1 positivo e OUT2 negativo (motor girando para frente)
- OUT1 negativo e OUT2 positivo (motor girando para trás)
- OUT1 e OUT2 com tensão negativa (freia o motor)
- OUT1 e OUT2 com tensão positiva (freia o motor)
O módulo que estou usando possui jumpers para forçar os sinais de enable em nível alto. Retirei e usei PWM para controlar (grosseiramente) a velocidade. O PWM do ESP32S é bastante sofisticado (leia-se complicado), para o meu projeto usei a resolução mais baixa do PWM (8 bits). Em testes com a roda no ar, o motor não girou com duty menor que 96/255. O módulo possui duas alimentações: uma para as pontes H e outra para a parte lógica. Por enquanto a alimentação para a ponte H (e portanto para o motor) são 6V obtidos por 4 pilhas AA (alguma hora vou experimentar com uma bateria de 6V de chumbo ácido). Os 5V vem da Franzininho que está ligada via USB a um micro (ainda estou pensando como vai ser o definitivo, não tenho certeza que consigo gerar os 5V a partir do 6V, mesmo usando um módulo de fonte chaveada).
O próximo passo é testar os sensores.
Hardware:
Software/Firmware:
Referências:
A inspiração para este projeto veio do livro “Robot Programming” de Joseph L. Jones
Artigo sobre o módulo de ponte H utilizado: https://blog.eletrogate.com/guia-definitivo-de-uso-da-ponte-h-l298n/