Firmware de controlo com ROS do servo da direcção e do ESC de um rover traxxas, para um ESP8266 nodeMCU V3 com um PCA9685.
Usado no rover traxxas do Automec – Universidade de Aveiro
O firmware subscreve os tópicos:
- pub_dir, (angulo de direcção entre -90º e 90º a aplicar ao servo)
- pub_vel (velocidade expressa entre |0, 90| sendo o seu sinal indicador da direcção, o negativo é marcha atrás)
Pode ser expandido para controlar também o servo do diff. traseiro e do diff. dianteiro.
- ESP8266 (micontrolador de 32bits com wifi integrado);
- PCA9685 (gerador de PWM de 12bits e 16canais)
- IDE: platformIO,
- Board: ESP8266 nodeMCU 12E
Na primeira fase está implementado o controlo do ESC e do servo da direcção.
A ligação do firmware aos node ROS depende do pacote rosserial.
Caso não esteja instalado, pode-se instalar com o seguinte comando (substituir noetic, pela identificação da distribuição do ROS):
sudo apt install ros-noetic-rosserial
Depende de um node que publique mensagens twist nos tópicos apropriados. Como por exemplo o node: linang_to_ackermann.py.
O node deve ser lançado com a seguinte configuração
message_type:=physical
O node pode ser configurado para dois tipos de input,:
train:=1 (subscreve um único tópico twist com velocidade angular e linear)
train:=0 (pré-definido, subscreve dois tópicos twist, um com velocidade angular, e outro com a velocidade linear)
Identificação da porta serie a usar na comunicação
~$ dmesg [12722.986709] usbserial: USB Serial support registered for ch341-uart [12722.986727] ch341 1-1:1.0: ch341-uart converter detected [12722.987254] usb 1-1: ch341-uart converter now attached to ttyUSB0
Exemplos de exploração do sistema
Cada um dos comandos deve ser lançado num terminal independente
Exemplo de exploração em modo real e autónomo com o node linang_to_ackermann.py (usando um launch file)
rosrun rosserial_python serial_node.py /dev/ttyUSB0 roslaunch ackermann_vehicle_gazebo linang_to_ackermann.launch message_type:=physical
Exemplo de exploração em modo real e treino com o node linang_to_ackermann.py (usando um launch file)
rosrun rosserial_python serial_node.py /dev/ttyUSB0 roslaunch ackermann_vehicle_gazebo linang_to_ackermann.launch message_type:=physical train:=1 rqt
Exemplo do output de uma ligação bem sucedida do node serial_node.py
~$ rosrun rosserial_python serial_node.py /dev/ttyUSB0 [INFO] [1620470781.458011]: ROS Serial Python Node [INFO] [1620470781.460781]: Connecting to /dev/ttyUSB0 at 57600 baud [INFO] [1620470783.566170]: Requesting topics... [INFO] [1620470783.599243]: Note: subscribe buffer size is 512 bytes [INFO] [1620470783.603585]: Setup subscriber on pub_dir [std_msgs/Int16] [INFO] [1620470783.618133]: Setup subscriber on pub_vel [std_msgs/Int16] ^C[INFO] [1620470867.461564]: Sending tx stop request
Ligações entre o ESP32 e o PCA9685
Ligações entre o PCA9685 com o servo da direcção e o esc
canal 0 – servo da direção
cana 1 – esc