Skip to content
Snippets Groups Projects
user avatar
Thomas VADEBOUT authored
add color sensors

See merge request cdf2020/microcontrollers/control-panel!2
f1352692
Name Last commit Last update
include
lib
src
.gitignore
README.md
platformio.ini

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.