Utiliser la communication ROS sur Arduino
Installation à la main de la bibliothèque
Cette étape est facultative si vous avez déjà la bibliothèque présente dans le projet (dossier lib/ros_lib).
Prérequis
- Installer une distribution ROS
Génération
Pour générer les fichiers de bibliothèques nécessaires pour utiliser ROS serial sur Arduino, réaliser les étapes suivantes:
sudo apt-get install ros-noetic-rosserial
sudo apt-get install ros-noetic-rosserial-arduino
cd <racineDuProjet>/lib/
source /opt/ros/noetic/setup.bash # Ou setup.zsh si vous utilisez zsh
rosrun rosserial_arduino make_libraries.py . #Génère l'ensemble des fichiers dans un dossier appelé 'ros_lib'
Il faut ensuite appliquer un patch de quelques lignes dans le header msg.h
comme suit:
Ligne 40: #include <cstring>
-> #include <string.h>
Ligne 68: std::memcpy(&val, &f, sizeof(val));
-> memcpy(&val, &f, sizeof(val));
Ligne 182: std::memcpy(f, &val, sizeof(val));
-> memcpy(f, &val, sizeof(val));
Utilisation de la bibliothèque ROS dans le code
Voici un exemple de publieur de messages:
#include <Arduino.h>
#include <ros.h>
#include <std_msgs/String.h>
ros::NodeHandle nh;
std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);
char hello[13] = "hello world!";
void setup()
{
nh.initNode();
nh.advertise(chatter);
}
void loop()
{
str_msg.data = hello;
chatter.publish( &str_msg );
nh.spinOnce();
delay(1000);
}
Cet exemple publiera le message hello world!
sur le canal de messages chatter
toutes les 1000ms.