IA, Visão Computacional e ROS
Nível 2 completo + conhecimento em Python
Você deve dominar:
10 horas • 4 aulas
Você chegou ao nível final e mais emocionante do curso! Nos níveis anteriores, construímos robôs que podiam navegar usando sensores de toque e de proximidade. Agora, vamos dar um salto quântico e equipar nossos robôs com o sentido mais poderoso de todos: a visão.
A Visão Computacional é um campo da Inteligência Artificial que treina computadores para interpretar e entender o mundo visual. Usando imagens digitais de câmeras e vídeos, os robôs podem identificar objetos, navegar em ambientes complexos e interagir com o mundo de uma forma muito mais humana.
Figura 1: Um robô usando visão computacional para identificar e categorizar objetos em seu ambiente.
---
Para que um robô possa "ver", ele precisa de uma câmera. A escolha da câmera depende do poder de processamento disponível e da complexidade da tarefa.
O ESP32-CAM é uma placa de desenvolvimento incrivelmente barata e compacta que combina um microcontrolador ESP32-S com uma câmera (geralmente o modelo OV2640). É a porta de entrada perfeita para projetos de visão computacional em robótica.
O Raspberry Pi é um computador de placa única muito mais poderoso que o ESP32. Quando combinado com seu módulo de câmera oficial, ele se torna uma plataforma de visão computacional formidável, capaz de executar análises de vídeo em tempo real e rodar bibliotecas como o OpenCV com muito mais fluidez.
Figura 2: Um robô mais avançado utilizando um Raspberry Pi e uma câmera para tarefas de visão computacional.
---
Uma imagem, para um computador, é apenas uma grande matriz de números. Cada número representa um pixel (o menor ponto de uma imagem). O trabalho da visão computacional é encontrar padrões significativos nesses números.
- Thresholding (Limiarização): Converter uma imagem em escala de cinza para uma imagem puramente preta e branca, separando o objeto de interesse do fundo.
- Filtros (Blur/Suavização): Reduzir o ruído e os detalhes irrelevantes da imagem.
- Detecção de Bordas: Identificar os contornos dos objetos na imagem.
---
Nosso primeiro projeto será configurar um ESP32-CAM para capturar vídeo e transmiti-lo (fazer streaming) via Wi-Fi para um navegador web. Este é o passo fundamental para qualquer projeto de visão remota.
Materiais Necessários: - 5V do FTDI -> 5V do ESP32-CAM
- GND do FTDI -> GND do ESP32-CAM
- TX do FTDI -> U0R (RX) do ESP32-CAM
- RX do FTDI -> U0T (TX) do ESP32-CAM
GPIO0 e GND.Arquivo > Exemplos > ESP32 > Camera e abra o exemplo CameraWebServer.#define CAMERA_MODEL_AI_THINKER (ou o modelo correspondente à sua placa).ssid e password com os dados da sua rede.Ferramentas > Placa. Compile e carregue o código.115200.Pronto! Você estará vendo o vídeo ao vivo da sua câmera ESP32-CAM diretamente no seu navegador. Você agora tem um robô com um olho funcional. No próximo módulo, vamos ensinar esse olho a reconhecer objetos usando Inteligência Artificial.
12 horas • 6 aulas
No módulo anterior, demos ao nosso robô o sentido da visão. Agora, vamos dar-lhe um cérebro capaz de interpretar essa visão. Não basta ver uma coleção de pixels; um robô inteligente precisa saber que aqueles pixels formam um "gato", uma "pessoa" ou um "obstáculo". É aqui que a Inteligência Artificial (IA), e mais especificamente as Redes Neurais Convolucionais (CNNs), entram em jogo.
---
Inspiradas no córtex visual humano, as CNNs são um tipo especializado de rede neural projetado para processar dados que têm uma topologia de grade, como uma imagem. Em vez de olhar para cada pixel individualmente, uma CNN aprende a reconhecer características (features) em diferentes níveis de complexidade.
Esse processo de aprendizado hierárquico torna as CNNs extremamente poderosas para tarefas de visão computacional, como classificação de imagens (dizer o que está na imagem) e detecção de objetos (encontrar onde os objetos estão na imagem e desenhar uma caixa ao redor deles).
Figura 1: Um robô com IA não apenas vê, mas entende o conteúdo da imagem, permitindo interações muito mais complexas.
---
Tradicionalmente, o processamento de IA exigia servidores poderosos na nuvem. No entanto, para um robô móvel, enviar um fluxo de vídeo para a internet, processá-lo e esperar a resposta é muito lento e depende de uma conexão constante. A solução é o Edge AI, ou IA na Borda.
Edge AI envolve a execução de modelos de IA diretamente no dispositivo (na "borda" da rede), como no nosso ESP32 ou Raspberry Pi. Isso proporciona respostas em tempo real e independência da internet.
Ele converte um modelo treinado do TensorFlow em um formato compacto e eficiente, que pode ser integrado diretamente ao nosso código C++ no Arduino IDE.
---
Treinar uma CNN do zero exige milhões de imagens e um poder computacional imenso. Felizmente, não precisamos fazer isso. Podemos usar modelos pré-treinados, que são modelos de IA que já foram treinados por grandes empresas (como Google e Facebook) em conjuntos de dados massivos (como o ImageNet).
Usar um modelo pré-treinado nos permite ter um sistema de visão de alta performance com muito pouco esforço. Também podemos usar uma técnica chamada Transfer Learning (Aprendizado por Transferência), onde pegamos um modelo pré-treinado e o re-treinamos com nossas próprias imagens para reconhecer objetos específicos do nosso interesse.
---
Vamos criar um projeto incrível que demonstra o poder do Edge AI. Usaremos um ESP32-CAM com um modelo pré-treinado para detectar a presença de uma pessoa em seu campo de visão e acender um LED como alerta.
Materiais:O Arduino IDE para ESP32 já vem com um exemplo perfeito para isso.
Arquivo > Exemplos > ESP32 > Camera e abra o exemplo CameraWebServer. Este é o mesmo código base do módulo anterior.// #define CONFIG_ESP_FACE_DETECT_ENABLED. Descomente essa linha (remova o // do início).- Este recurso, embora chamado de "detecção de rosto", usa um modelo que é eficaz para detectar a silhueta de uma pessoa em geral.
CAMERA_MODEL_AI_THINKER) está selecionado e insira suas credenciais de Wi-Fi (ssid e password).Agora, aponte a câmera para uma pessoa. Quando o modelo de IA detectar um rosto/pessoa, uma caixa delimitadora vermelha será desenhada ao redor dela diretamente no fluxo de vídeo! O ESP32 está executando um modelo de rede neural em tempo real para encontrar uma pessoa na imagem.
Para ir além:O código de exemplo já cria uma estrutura (box_t) com as coordenadas da caixa detectada. Você pode usar essa informação no seu loop() para tomar decisões. Por exemplo:
// Dentro do loop, após a captura do frame
if (detection_enabled) {
// fb é o frame buffer (a imagem)
dl_matrix3du_t *image_matrix = dl_matrix3du_alloc(1, fb->width, fb->height, 3);
// ... (código de conversão de formato)
// A função face_detect retorna uma lista de caixas
box_list_t *boxes = face_detect(image_matrix, &mtmn_config);
if (boxes) {
// PELO MENOS UM ROSTO/PESSOA FOI DETECTADO!
// Acenda um LED, mova um servo, envie um alerta, etc.
digitalWrite(pinoLedAlerta, HIGH);
} else {
digitalWrite(pinoLedAlerta, LOW);
}
}
Você acabou de implementar um sistema de vigilância inteligente em um dispositivo que custa poucos dólares. Este é o poder da IA embarcada. No próximo módulo, vamos explorar outro sentido humano fundamental para a interação: a audição e a fala.
12 horas • 5 aulas
Um robô que pode ver e entender o mundo é incrível, mas um robô com o qual podemos conversar atinge um novo patamar de interação. Neste módulo, vamos explorar como dar ao nosso robô a capacidade de ouvir comandos (Reconhecimento de Voz) e de responder com sua própria voz (Síntese de Voz).
---
O primeiro passo para o processamento de voz é capturar o som do ambiente. Para isso, usamos um microfone. O ESP32 é particularmente bom para isso, pois possui ADCs (Conversores Analógico-Digitais) de boa qualidade e suporte para o protocolo I2S (Inter-IC Sound), que é uma interface padrão para lidar com dados de áudio digital de alta qualidade.
Figura 1: Fluxo de um sistema de interação por voz: o microfone captura o áudio, que é processado para reconhecimento de fala. A resposta é gerada como texto e convertida em áudio por um sintetizador de voz.
---
Converter o áudio capturado em texto é uma tarefa complexa de IA. Existem duas abordagens principais:
Serviços como Google Cloud Speech-to-Text ou Azure Cognitive Services oferecem APIs extremamente precisas para transcrição de áudio.
Para robôs que precisam operar sem internet, podemos usar motores de reconhecimento de voz que rodam localmente.
---
Depois que o robô entende um comando e decide uma resposta, ele pode comunicá-la de volta usando a síntese de voz.
- APIs na Nuvem: Serviços como Google Text-to-Speech ou Amazon Polly geram áudio de altíssima qualidade. O robô envia o texto e recebe o arquivo de áudio para tocar.
- TTS Local: Em um Raspberry Pi, podemos usar softwares como o espeak ou o pico2wave para gerar uma voz sintetizada localmente. A qualidade é mais robótica, mas funciona offline.
- ESP32: Embora mais limitado, o ESP32 pode tocar arquivos de áudio pré-gravados de um cartão SD ou até mesmo usar bibliotecas mais simples de TTS para gerar uma fala básica.
---
Vamos criar um projeto que usa serviços na nuvem para um resultado impressionante com hardware simples. Usaremos o Google Assistente no seu celular para enviar comandos de voz para o ESP32 através de um serviço gratuito chamado IFTTT (If This Then That).
Como vai funcionar:led-status.- If This (Se Isso): Escolha o serviço "Google Assistant" e a opção "Say a simple phrase". Configure a frase, como "Ligar o LED do robô".
- Then That (Então Aquilo): Escolha o serviço "Adafruit" e a opção "Send data to Adafruit IO". Selecione o feed led-status e o dado a ser enviado (ex: a palavra ON).
- Crie uma segunda applet para o comando de desligar, enviando a palavra OFF.
Você precisará instalar a biblioteca "Adafruit MQTT Library" no Arduino IDE.
#include <WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
// --- Configuração Wi-Fi
#define WLAN_SSID "SEU_WIFI"
#define WLAN_PASS "SUA_SENHA"
// --- Configuração Adafruit IO
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "SEU_USUARIO_ADAFRUIT"
#define AIO_KEY "SUA_CHAVE_ADAFRUIT"
// --- Pinos
const int pinoLed = 26;
// --- Objetos MQTT
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe ledStatus = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/led-status");
void setup() {
pinMode(pinoLed, OUTPUT);
Serial.begin(115200);
// Conecta ao Wi-Fi
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) { delay(500); }
// Assina o feed do Adafruit IO
mqtt.subscribe(&ledStatus);
}
void loop() {
// Conecta/mantém conexão com o servidor MQTT
MQTT_connect();
// Espera por novas mensagens
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &ledStatus) {
Serial.print("Recebido: ");
Serial.println((char *)ledStatus.lastread);
if (strcmp((char *)ledStatus.lastread, "ON") == 0) {
digitalWrite(pinoLed, HIGH);
}
if (strcmp((char *)ledStatus.lastread, "OFF") == 0) {
digitalWrite(pinoLed, LOW);
}
}
}
}
void MQTT_connect() {
int8_t ret;
if (mqtt.connected()) { return; }
while ((ret = mqtt.connect()) != 0) {
mqtt.disconnect();
delay(5000);
}
}
Resultado Esperado:
Após carregar o código (com suas credenciais de Wi-Fi e Adafruit IO), o ESP32 se conectará à internet. Agora, pegue seu celular e diga: "Ok Google, ligar o LED do robô". Após alguns segundos, o LED conectado ao seu ESP32 deverá acender! Diga o comando de desligar, e ele apagará.
Você acabou de controlar um hardware no mundo físico usando sua voz, através de uma cadeia de serviços na nuvem. Este é um exemplo poderoso de como a IoT e a IA se unem na robótica moderna. No próximo módulo, veremos como combinar plataformas para tarefas ainda mais complexas.
12 horas • 5 aulas
Até agora, tentamos fazer tudo em uma única placa, seja um ESP32 ou um Raspberry Pi. No entanto, na robótica avançada, uma das arquiteturas mais poderosas e eficientes é a arquitetura híbrida ou de processamento distribuído. A ideia é simples: usar o melhor de cada plataforma para a tarefa em que ela se destaca.
Ao combinar os dois, criamos um robô onde o Raspberry Pi "pensa" e o ESP32 "age". O Pi analisa a imagem da câmera, decide "precisamos virar à direita" e envia um comando simples para o ESP32, que se encarrega de traduzir esse comando em sinais elétricos precisos para os motores das rodas.
Figura 1: Diagrama de uma arquitetura híbrida. O Raspberry Pi lida com a IA e a visão, enquanto o ESP32 controla diretamente os motores e sensores de baixo nível.
---
A forma mais simples e robusta de fazer as duas placas conversarem é através da comunicação serial (UART). Ambos os dispositivos possuem pinos de Transmissão (TX) e Recepção (RX).
Conexão Física:GND do Raspberry Pi a um pino GND do ESP32 para que ambos tenham uma referência de tensão comum.Simplesmente conectar os fios não é suficiente. Precisamos definir um protocolo, ou seja, um conjunto de regras para as mensagens. Um protocolo simples pode ser baseado em caracteres ou strings:
"frente\n" para o ESP32 se mover para frente."parar\n" para o robô parar."angulo,90\n" para comandar um servo a ir para 90 graus.O caractere de nova linha (\n) é frequentemente usado para marcar o fim de um comando, facilitando a leitura no lado do receptor.
---
Vamos criar um sistema onde um script Python rodando no Raspberry Pi envia comandos para controlar o LED e um servo conectado a um ESP32.
Materiais: - Conecte o GND do Pi ao GND do ESP32.
- Conecte o TXD do Pi (GPIO 14) ao RX2 do ESP32 (GPIO 16).
- Conecte o RXD do Pi (GPIO 15) ao TX2 do ESP32 (GPIO 17).
(Usamos aSerial2 no ESP32 para deixar a Serial principal livre para depuração no computador.)
- Conecte o LED (com resistor) ao GPIO 26.
- Conecte o servo ao GPIO 18 (lembre-se de alimentá-lo com uma fonte de 5V externa, compartilhando o GND).
Parte 1: Código do ESP32 (O Receptor e Atuador)Carregue este código no seu ESP32.
#include <ESP32Servo.h>
// Pinos de Hardware
const int pinoLed = 26;
Servo meuServo;
const int pinoServo = 18;
void setup() {
// Serial para depuração no PC
Serial.begin(115200);
// Serial2 para comunicação com o Raspberry Pi
Serial2.begin(9600, SERIAL_8N1, 16, 17); // RX, TX
pinMode(pinoLed, OUTPUT);
meuServo.attach(pinoServo);
Serial.println("Receptor pronto para receber comandos do Pi.");
}
void loop() {
if (Serial2.available()) {
String comando = Serial2.readStringUntil(\'\n\');
comando.trim(); // Remove espaços em branco
Serial.print("Comando recebido: ");
Serial.println(comando);
if (comando == "led_on") {
digitalWrite(pinoLed, HIGH);
} else if (comando == "led_off") {
digitalWrite(pinoLed, LOW);
} else if (comando.startsWith("servo")) {
// Exemplo de comando: "servo,90"
int virgulaIndex = comando.indexOf(",");
if (virgulaIndex > 0) {
String valorStr = comando.substring(virgulaIndex + 1);
int angulo = valorStr.toInt();
meuServo.write(angulo);
}
}
}
}
Parte 2: Código do Raspberry Pi (O Cérebro)
No seu Raspberry Pi, salve este código como um arquivo Python (ex: controlador.py).
import serial
import time
Configura a porta serial. No Raspberry Pi 3/4, geralmente é /dev/ttyS0 ou /dev/serial0
É preciso habilitar a porta serial em raspi-config e desabilitar o console serial
ser = serial.Serial("/dev/ttyS0", 9600, timeout=1)
time.sleep(2) # Espera a conexão serial estabilizar
def enviar_comando(comando):
print(f"Enviando comando: {comando}")
ser.write((comando + "\n").encode("utf-8"))
if __name__ == "__main__":
try:
while True:
print("\n--- Menu de Comandos ---")
print("1: Ligar LED")
print("2: Desligar LED")
print("3: Mover servo para 0 graus")
print("4: Mover servo para 90 graus")
print("5: Mover servo para 180 graus")
escolha = input("Digite sua escolha (1-5): ")
if escolha == "1":
enviar_comando("led_on")
elif escolha == "2":
enviar_comando("led_off")
elif escolha == "3":
enviar_comando("servo,0")
elif escolha == "4":
enviar_comando("servo,90")
elif escolha == "5":
enviar_comando("servo,180")
else:
print("Escolha inválida.")
except KeyboardInterrupt:
print("\nPrograma encerrado.")
finally:
ser.close()
Resultado Esperado:
python3 controlador.py.1 e pressione Enter. O script enviará o comando "led_on\n" pela porta serial.Você acabou de criar uma ponte de comando entre um cérebro de alto nível e um controlador de baixo nível. Esta arquitetura é a base para os robôs mais avançados, onde o script Python no Pi poderia estar executando um complexo algoritmo de visão computacional e enviando comandos de movimento para o ESP32. No próximo módulo, vamos explorar o SLAM, a tecnologia que permite a um robô mapear seu ambiente.
8 horas • 3 aulas
Até agora, nossos robôs navegavam de forma reativa, seguindo uma linha ou evitando um obstáculo imediato. Eles não tinham memória de onde estiveram nem um mapa do ambiente. Para alcançar o nível mais alto de autonomia, um robô precisa responder a duas perguntas fundamentais: "Onde estou?" e "Como chego ao meu destino?". A tecnologia que resolve a primeira pergunta é o SLAM.
É um problema de "ovo e galinha": para construir um mapa preciso, o robô precisa saber onde ele está. Mas para saber onde ele está, ele precisa de um mapa. O SLAM resolve esse ciclo de dependência usando técnicas estatísticas complexas (como Filtros de Kalman e Filtros de Partículas) para estimar simultaneamente tanto o mapa quanto a pose (posição e orientação) do robô.
Figura 1: Visualização do processo de SLAM. O robô (centro) usa um sensor (como um LIDAR) para detectar pontos do ambiente (paredes) e, ao mesmo tempo, calcula sua trajetória e posição dentro do mapa que está construindo.
---
Embora seja teoricamente possível fazer SLAM com uma câmera (Visual SLAM ou V-SLAM), o método mais comum e robusto usa um sensor LIDAR (Light Detection and Ranging).
Um LIDAR funciona de forma semelhante a um radar, mas usa pulsos de luz laser em vez de ondas de rádio. Ele gira rapidamente (geralmente 360 graus) e mede a distância até os objetos em centenas ou milhares de pontos ao seu redor, criando uma "nuvem de pontos" 2D ou 3D do ambiente em tempo real. A precisão e a densidade de dados de um LIDAR são ideais para algoritmos de SLAM.
---
Implementar SLAM do zero é uma tarefa monumental. Felizmente, a comunidade de robótica tem uma ferramenta padrão para isso: ROS (Robot Operating System).
ROS não é um sistema operacional no sentido tradicional (como Windows ou Linux), mas sim um framework de software ou um middleware. Ele fornece um conjunto de bibliotecas, ferramentas e convenções para ajudar a construir software de robô complexo de forma modular.
Conceitos Chave do ROS:/scan. O nó de SLAM assina esse tópico para receber os dados e construir o mapa.sensor_msgs/LaserScan).O ROS já possui pacotes de SLAM incrivelmente poderosos e prontos para usar, como o GMapping, Cartographer e Hector SLAM. Nós podemos simplesmente configurar nosso robô para publicar os dados do LIDAR e a odometria (estimativa de movimento a partir dos motores) nos tópicos corretos, e o pacote de SLAM cuidará de todo o trabalho pesado de construir o mapa.
---
Construir e configurar um robô com ROS e SLAM é um curso inteiro por si só. Portanto, este projeto será teórico, descrevendo a arquitetura e os passos necessários. A plataforma ideal para este projeto é um Raspberry Pi 4 (devido à sua capacidade de processamento e portas USB) executando Ubuntu com ROS.
Arquitetura do Robô:velocidade_linear, velocidade_angular) do Pi e os traduz em sinais PWM para os motores. Ele também lê os encoders das rodas e publica os dados de odometria de volta para o Pi./cmd_vel) e envia os comandos recebidos para o ESP32. Ele também recebe os dados dos encoders do ESP32 e os publica como mensagens de odometria no tópico /odom./scan./scan e /odom. Usando esses dois fluxos de informação, ele gera o mapa e o publica em um tópico chamado /map. Ele também calcula a pose mais provável do robô no mapa.move_base. Ele permite que você clique em um ponto no mapa (usando uma ferramenta de visualização chamada RViz), e o move_base planejará uma trajetória livre de obstáculos e publicará os comandos de velocidade necessários no tópico /cmd_vel para levar o robô até lá.O resultado é um robô verdadeiramente autônomo. Você pode teleoperá-lo por um ambiente para que ele construa um mapa. Depois, você pode simplesmente dar a ele um objetivo no mapa, e ele navegará de forma inteligente até o destino, desviando de obstáculos que não estavam no mapa original. Este é o estado da arte em navegação de robôs móveis internos, usado em tudo, desde aspiradores de pó robóticos a robôs de armazém.
No próximo módulo, vamos explorar como o Machine Learning pode ser usado para ensinar um robô a aprender comportamentos em vez de programá-los explicitamente.
6 horas • Projeto Integrado
Nos módulos anteriores, nós, como programadores, definimos explicitamente o comportamento do robô. Criamos regras "SE-ENTÃO" para seguir uma linha e implementamos equações matemáticas (PID) para controlar o movimento. E se, em vez disso, pudéssemos apenas mostrar ao robô o que fazer e deixá-lo aprender a tarefa sozinho? Bem-vindo ao mundo do Machine Learning (Aprendizado de Máquina) aplicado à robótica.
O Machine Learning é um subcampo da IA onde os algoritmos não são explicitamente programados, mas aprendem padrões a partir de dados. Já vimos um exemplo disso com as Redes Neurais Convolucionais (CNNs) para visão computacional. Agora, vamos explorar como o ML pode ser usado para ensinar comportamentos de controle e navegação.
---
O Aprendizado por Reforço é um dos paradigmas de ML mais empolgantes para a robótica. Ele é inspirado em como os animais (e os humanos) aprendem: por tentativa e erro.
O sistema de RL é composto por:
O objetivo do agente (robô) é aprender uma política (policy) – uma estratégia que mapeia estados a ações – de modo a maximizar a recompensa total acumulada ao longo do tempo.
Exemplo: Robô Aprendendo a Evitar Obstáculos- Recompensa positiva (+1) por cada segundo que se move para frente sem bater.
- Recompensa negativa grande (-100) se colidir com uma parede.
No início, o robô não sabe nada e suas ações são aleatórias. Ele pode virar à direita e bater, recebendo uma grande penalidade. Ele pode ir para frente e não bater, recebendo uma pequena recompensa. Ao longo de milhares de tentativas (episódios), o algoritmo de RL (como o Q-Learning ou o PPO) gradualmente ajusta a política do robô, que aprende que a ação de "virar" quando as leituras do sensor de distância são baixas leva a uma recompensa acumulada maior no futuro do que a ação de "ir para frente". Eventualmente, ele aprende um comportamento robusto de desvio de obstáculos.
Figura 1: O ciclo do Aprendizado por Reforço. O agente executa uma ação, o ambiente muda de estado e fornece uma recompensa, e o agente usa essa informação para aprender e tomar uma ação melhor na próxima vez.
---
O RL pode ser muito lento e exigir muitas falhas antes de aprender algo útil. Uma abordagem mais direta é o Aprendizado por Imitação, também conhecido como Clonagem de Comportamento (Behavioral Cloning).
A ideia é simples: em vez de deixar o robô descobrir o comportamento correto por tentativa e erro, nós demonstramos o comportamento correto e treinamos um modelo de machine learning para imitar nossas ações.
Exemplo: Robô Aprendendo a Seguir uma Linha(leituras_dos_sensores, ação_do_motor) a cada instante. Por exemplo: - ( [0, 1, 0], [frente] ) (Sensor central vê a linha -> Ação foi ir para frente)
- ( [0, 0, 1], [direita] ) (Sensor direito vê a linha -> Ação foi virar à direita)
- Entrada do Modelo: Um array com as leituras dos sensores de linha.
- Saída do Modelo: Um comando de motor (ex: velocidade para o motor esquerdo e direito).
Esta técnica é muito poderosa e é usada em aplicações do mundo real, como em carros autônomos, onde os modelos aprendem a dirigir observando motoristas humanos.
---
Treinar um robô físico com RL ou imitação pode ser demorado e arriscado. Por isso, grande parte do desenvolvimento de ML para robótica é feito em simuladores, como o Gazebo, o Webots ou o Donkey Car Simulator.
Passos do Projeto:Este projeto demonstra todo o pipeline de um sistema de aprendizado de máquina para controle robótico. A mesma técnica pode ser transferida para um carro físico (como um Donkey Car baseado em Raspberry Pi), permitindo que ele dirija em uma pista real após ser treinado no simulador ou com dados coletados no mundo real.
O Machine Learning abre uma nova fronteira na robótica, permitindo que os robôs se adaptem a novos ambientes e aprendam tarefas complexas que seriam quase impossíveis de programar manualmente. No próximo módulo, vamos aplicar esses conceitos de IA a um tipo diferente de robô: um braço robótico.
12 horas • 7 aulas
Até agora, nosso foco tem sido em robôs móveis. Agora, vamos mudar para um dos pilares da automação industrial e da robótica de serviços: os braços robóticos (ou manipuladores). Um braço robótico que pode ver o que está fazendo e tomar decisões com base nisso é uma ferramenta incrivelmente poderosa, capaz de realizar tarefas de pick-and-place (pegar e colocar), montagem e interação com objetos.
O desafio central aqui é a coordenação olho-mão: como traduzir a posição de um objeto detectado por uma câmera em uma série de ângulos de junta que o braço robótico precisa para alcançar esse objeto.
Figura 1: Um braço robótico industrial usando um sistema de visão para pegar objetos em uma esteira. Este é um exemplo clássico de coordenação olho-mão.
---
A cinemática é o estudo do movimento sem considerar as forças que o causam. Para um braço robótico, existem dois problemas cinemáticos fundamentais:
---
Vamos detalhar os passos que um braço robótico com visão executa para pegar um objeto:
---
Vamos construir um projeto que implementa a parte central da coordenação olho-mão. Usaremos um ESP32-CAM para detectar um objeto colorido e controlar um braço robótico simples de 2 juntas (pan/tilt) para que a câmera siga o objeto.
Materiais:O código rodará inteiramente no ESP32-CAM.
erro_X = centroide_X - (largura_imagem / 2)erro_Y = centroide_Y - (altura_imagem / 2)novo_angulo_pan = angulo_pan_atual - Kp * erro_Xnovo_angulo_tilt = angulo_tilt_atual + Kp * erro_YAo ligar o sistema, aponte a câmera para o objeto colorido. O mecanismo pan/tilt se moverá automaticamente para centralizar o objeto na visão da câmera. Se você mover o objeto, o braço o seguirá, mantendo-o sempre no centro do seu campo de visão.
Você acabou de criar um sistema de rastreamento ativo, a base para qualquer tarefa de manipulação robótica com visão. No projeto final do curso, vamos integrar todos esses conceitos de IA para criar um robô assistente completo.
20 horas • Projeto integrador
Parabéns por chegar ao projeto final de toda a sua jornada na robótica! Este é o momento de sintetizar o conhecimento dos três níveis – os fundamentos da eletrônica, a navegação autônoma e a inteligência artificial – para construir o projeto mais ambicioso de todos: um robô assistente autônomo.
O Conceito:Nosso objetivo é criar um robô móvel que possa navegar de forma autônoma em um ambiente doméstico, responder a comandos de voz e usar sua visão para encontrar e interagir com objetos ou pessoas. Ele será a culminação de tudo o que aprendemos, desde o controle de um simples LED até a implementação de redes neurais.
Figura 1: Concepção artística do nosso robô assistente final – um agente inteligente que combina mobilidade, visão e interação por voz.
---
Para este projeto, a arquitetura híbrida (Módulo 3.4) não é apenas uma opção, é uma necessidade. Dividiremos as tarefas entre um Raspberry Pi e um ESP32 para máxima eficiência.
Componentes do Robô:Figura 2: A complexa, mas poderosa, arquitetura de software do nosso robô final, orquestrada pelo ROS.
---
A construção deste robô é um projeto de integração em larga escala. Deve ser abordado em fases.
/cmd_vel para comandos seriais e publicando os dados de odometria do ESP32 no tópico /odom.teleop_twist_keyboard) para controlar o robô manualmente usando o teclado do seu computador. Isso confirma que toda a cadeia de controle (ROS -> Serial -> ESP32 -> Motores) está funcionando.gmapping. Teleopere o robô pelo seu quarto ou casa para construir um mapa 2D do ambiente.move_base, carregando o mapa salvo. Agora, usando a ferramenta RViz, você pode dar ao robô um destino no mapa, e ele navegará autonomamente até lá, desviando de obstáculos.move_base.move_base assume, planejando uma rota e movendo o robô até a bola.---
Construir este robô assistente é um projeto desafiador que pode levar semanas ou meses. No entanto, ao completá-lo, você terá dominado uma vasta gama de habilidades que definem a robótica moderna. Você terá construído um sistema complexo, integrado hardware e software, e implementado algoritmos de ponta em inteligência artificial.
O campo da robótica está em constante evolução. As ferramentas e técnicas que você aprendeu neste curso são a base sobre a qual as próximas gerações de robôs serão construídas. Continue explorando, continue aprendendo e, acima de tudo, continue construindo.
Parabéns, Engenheiro(a) de Robótica!
Desenvolva robôs industriais, autônomos e colaborativos
Especialista em visão e reconhecimento de padrões
Machine learning e deep learning para robótica
Veículos autônomos, drones e navegação
Ao completar este nível, você terá habilidades equivalentes a um engenheiro de robótica profissional. Você estará pronto para trabalhar com robôs autônomos, IA e sistemas complexos.