traxxas_firmware

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

ESP32 > PCA9685

Ligações entre o PCA9685 com o servo da direcção e o esc

canal 0 – servo da direção

cana 1 – esc