Além disso, a escolha dos componentes também é indissociável do projeto “principal” a ser desenvolvido futuramente (embora ele fuja do escopo desta disciplina) - que é, também, um projeto de conclusão de curso. O objetivo final do projeto é desenvolver um carro autônomo em miniatura para participação na Duckietown - uma competição focada na área de inteligência artificial aplicada. Dessa forma, este projeto é, na verdade, uma etapa intermediária em direção ao projeto final.
O robô construido possui dois andares - o superior, que abriga o Arduino Mega, a H-Bridge e alguns fios ligados a uma mini protoboard, e o inferior, que leva a Raspberry, a bateria Li-Po e os motores. Com isso, é possível otimizar o espaço e realizar um projeto simplificado e mais organizado quando comparado com um robô com um único andar.
Para realizar a comunicação entre a Raspberry e o Arduino Mega, utilizou-se um cabo USB da Raspberry para o Arduino. Dessa forma, o Arduino pode ler tudo que a Raspberry escreve na porta serial e interpretar o que estiver escrito como informações do que fazer com os motores. A ligação dos pinos de controle do Arduino com a H-Bridge é responsável por distribuir a potência dos motores e controlar a direção final que o carrinho deve ir.
// infográfico de como funciona os eixos, a potencia, etc
Os passos 1 e 3 são necessários apenas na primeira vez que o projeto for executado.
- Garanta que o Docker esteja instalado na máquina host. Clone o repositório para esta máquina.
- Navegue até a pasta
/containers/ds4_driver
e executedocker-compose up -d
para iniciar o serviço de leitura do controle. Esse serviço é responsável por receber a leitura do controle e publicá-la de forma adequada na rede LAN. Note que a saída da leitura é uma mensagem do tipogeometry_msgs/Twist
. - Inicie a Raspberry Pi. Conecte-a à mesma rede da máquina host. Instale o ROS2 na Raspberry, e clone o repositório para esta máquina. Certifique-se de que o ambiente
ROS2
está ativado. Instale o pacotepython3-colcon-common-extensions
para conseguir "compilar" os nós do projeto. Navegue até a pasta/ros_ws
e executecolcon build
para realizar o processo debuild
. Ative os nós compilados na sua sessão comsource install/setup.sh
. - Inicie o processo de execução do código na raspberry executando
ros2 run duck bridge
. Isso inicia um processo que aguarda o recebimento de mensagens no tópico/cmd_vel
e, ao receber essas mensagens, as formata como um arquivo JSON, enviando-o via serial para o Arduino.
Nesse ponto, o robô deve se mover ao usar o controle.
Observação: ocasionalmente pode ser necessário que a raspberry execute um comando de leitura constante da porta serial associada. Para isso, em um outro terminal, execute tail -F /dev/ttyACM0
- assumindo que a porta serial em questão é a ttyACM0
.
O esquemático abaixo mostra os eixos assumidos pelo sistema no código. Note que isso implica em uma transformação linear dos dados recebidos do controle, que mapeiam aceleração de -2 a 2 no eixo x, em uma aceleração de -1 a 1 no eixo y, dentre outros ajustes necessários.
Por fim, o esquemático fisico simplificado: