Este repositório contém o driver e as configurações necessárias para controlar um iRobot Roomba 614 utilizando um Raspberry Pi 4 com ROS 2 Humble. O projeto foca na comunicação serial via protocolo iRobot Open Interface (OI).
- Cérebro: Raspberry Pi 4 (recomendado 4GB de RAM ou superior).
- Robô: iRobot Roomba 614 (ou outros modelos da série 600 compatíveis com a interface Mini-DIN).
- Comunicação: Cabo USB-TTL (Serial UART).
- Conexão de despertar: Fio jumper para o pino Device Detect (DD) do Roomba.
- Sistema Operacional: Ubuntu 22.04 (Jammy Jellyfish) ou Ubuntu 24.04.
- Middleware: ROS 2 Humble Hawksbill.
- Dependências Python: rclpy, geometry_msgs, pyserial.
Abaixo está o mapeamento de conexões entre o Raspberry Pi, o cabo USB-TTL e a porta Mini-DIN do Roomba:
| Componente (Origem) | Destino (Físico no Pi) | Destino (Roomba) | Função |
|---|---|---|---|
| Fio Verde (Cabo TX) | - | Pino 3 (RX) | Envio de comandos |
| Fio Branco (Cabo RX) | - | Pino 4 (TX) | Recebimento de sensores |
| Fio Preto (GND) | - | Pino 6 ou 7 (GND) | Aterramento comum |
| Raspberry GPIO 18 | Pino 12 | Pino 5 (DD) | Wake-Up do sistema |
Para garantir que a comunicação serial funcione sem interferências no Ubuntu, siga estes passos:
- Liberar a UART Principal Desative o Bluetooth integrado que conflita com a porta serial:
sudo nano /boot/firmware/config.txtAdicione ao final:
enable_uart=1
dtoverlay=disable-bt- Desativar o Console Serial Remova a instrução console=serial0,115200 (ou console=ttyAMA0,115200) do arquivo de boot:
sudo nano /boot/firmware/cmdline.txt- Permissões de Usuário Adicione seu usuário ao grupo dialout para acessar a porta USB sem sudo:
sudo usermod -a -G dialout $USERReinicie o sistema após estas alterações.
Crie um workspace e clone o repositório:
mkdir -p ~/roomba_ws/src
cd ~/roomba_ws/src
git clone https://github.com/Xamacardoso/roomba_pi_drivers.gitCompile o pacote:
cd ~/roomba_ws
colcon build --packages-select roomba_pi_drivers
source install/setup.bashInicie o driver do motor:
# Verifique qual porta o cabo USB-TTL assumiu (ex: /dev/ttyUSB0)
ros2 run roomba_pi_drivers motor --ros-args -p port:=/dev/ttyUSB0Teleoperação (em outro terminal):
ros2 run teleop_twist_keyboard teleop_twist_keyboardO nó motor_driver.py realiza uma sequência de inicialização crítica:
- Wake-Up: Envia um pulso no GPIO 18 para acordar o Roomba.
- Start (Opcode 128): Inicia a Open Interface.
- Safe Mode (Opcode 131): Habilita o controle total com proteção de sensores de queda (cliff sensors).
- Tradução: Converte mensagens geometry_msgs/Twist em comandos de velocidade para as rodas.