Para usar ROS custom messages (mensagens personalizadas) no Arduino com o rosserial, é obrigatório ter instalados no computador os pacotes do ROS: rosserial e rosserial arduino. Para instalar pode-se usar os seguintes comandos:
sudo apt install ros-melodic-rosserial sudo apt install ros-melodic-rosserial-arduino
Quando o programa para o Arduino requer mensagens personalizadas do ROS (ROS custom messages). Como por exemplo quando inclui uma linha como a seguinte:
#include <ntbd_msgs/Motors_Array.h>
Teremos que efectuar um procedimento especial, que envolve a compilação do pacote de ROS que tem as mensagens personalizadas (neste caso o ntbd_msgs), e obter o ficheiro de header necessário (neste caso, o ficheiro Motors_Array.h).
Para obter o ficheiro header , é necessário, antes de mais, colocar o pacote do ROS com a definição da mensagem na pasta adequada do catkin e proceder á sua compilação:
cd ~/catkin_sw/src git clone https://github.com/HotBlackRobotics/ntbd cd ~/catkin_sw catkin_make
De seguida, tem de se usar um dos seguintes comandos (pelos vistos existe a informação de vários devido à evolução das várias versões do ROS):
No ROS Melodic, o comando que funcionou foi o ultimo dos indicados abaixo.
rosrun rosserial_client make_library.py ~/ ntbd_msgs rosrun rosserial_arduino make_library.py ~/ ntbd_msgs rosrun rosserial_arduino make_libraries.py ~/ ntbd_msgs
~/ representa a pasta de destino onde se encontra a ros_lib (biblioteca rosserial para o arduino)
ntbd_msgs, indica o pacote (com as mensagens) a ser compilado
O comando que usei (o último) gerou uma pasta ros_lib na home com toda a biblioteca do rosserial incluindo uma pasta ntbd_msgs que contem o ficheiro pretendido.
Nesta fase, e tendo em consideração o exemplo, podemos optar por uma das duas soluções:
- Copiar a pasta ~/ros_lib/ntbd_msgs para ~/Arduino/libraries/ros_lib;
- Copiar a pasta para dentro da pasta do sketch do arduino, e alterar uma linha de include para passar a incluir a biblioteca localmente: #include “ntbd_msgs/Motors_Array.h”
Já podemos compilar e enviar o programa para o Arduino