TP n3 ROS PDF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 6

Ecole Nationale Polytechniques 2eme Année Automatique Module de Robotique

Travaux Pratiques n° 4 Manipulation des nœuds sous ROS


(Suite)

Objectif :
L’objectif de ce quatrième TP est de créer un nœud publisher/subscriber
qui communique avec un package déjà existant dans le système ROS.

Le principale objectif de ce TP est d’apprendre à extraire des données d’un


package à priori inconnu et de créer notre propre partie capable d’interagir avec
ce dernier.
A titre de rappel, un "Nœud" est le terme ROS pour un exécutable qui est
connecté au réseau ROS. Ici, nous créerons un nœud publisher et subsciber à la
fois.
Nous allons utiliser le package « turtlesim » pour faire naviguer la tortue de
l’interface non pas avec les flèches du clavier comme nous l’avions fait au TP n°3
mais avec un nœud que nous allons élaborer tout au long de ces lignes.
Ce que nous allons faire précisément c’est : récupérer la position actuelle de la
tortue dans l’interface, la comparer à une position désirée et tant qu’il y a une
erreur de position, des vitesses sont envoyées à cette tortue pour la déplacer et
l’obliger à atteindre son but.

1- Exploration du package turtlesim


Pour pouvoir interagir avec le package turtlesim il faut localiser quelques entités
importantes :
- Les noms des messages utilisés,
- Les types des messages utilisés et leur structure interne,
- Les noms des topics dans lesquels circulent ces messages.

On ouvre un terminal dans lequel nous lançons Ros : roscore


Dans un nouveau terminal nous lançons turtlesim

$ rosrun turtlesim turtlesim_node

Enfin dans un troisième terminal nous allons commencer notre exploration :

$ rostopic list

Cette commande va nous permettre d’avoir la liste des topics existant dans le
nœud lancé et ceux du core de ros aussi.

Enseignante : Nour El Houda Gabour


Ecole Nationale Polytechniques 2eme Année Automatique Module de Robotique

On isole deux topics dont nous allons extraire les informations : /turtle1/pose et
/turtle1/cmd_vel
On utilise la commande suivante pour avoir des informations sur le topic : le type
de message qu’il circule et le type des nœuds dont il fait circuler les messages,
c.à.d s’ils sont publisher ou subscriber.

$ rostopic info turtle1/cmd_vel

Explication : ce topic circule des messages de type : geometry_msgs/Twist , il


n’est utilisé par aucun nœud Publisher mais il est utilisé par un nœud Subscriber
« turtlesim » qui est l’interface de la tortue
Donc si nous voulons utiliser ce topic, on doit être Publisher puisque ce dernier
reçoit des vitesses (cmd_vel : command velocity) pour faire circuler la tortue.
A présent, voyons de plus près le type geometry_msgs/Twist

Enseignante : Nour El Houda Gabour


Ecole Nationale Polytechniques 2eme Année Automatique Module de Robotique

$ rosmsg show geometry_msgs/Twist

Explication : le message contient deux vecteurs de coordonnées, un vecteur


dédié aux coordonnées linéaires et le second vecteur aux coordonnées
angulaires.
Pour accéder au message on passe par le nom du vecteur, exemple : linear.x,
linear.y, angular.y …

Nous allons suivre la même procédure pour le topic /turtle1/pose

$ rostopic info turtle1/pose

Explication : ce topic fait circuler des messages du type turtlesim/Pose et est


utilisé par un nœud Publisher.
Donc si nous voulons utiliser ce topic on doit être Subscriber à ce dernier puisque
il collecte les positions de la tortue dans l’interface et ainsi on doit recevoir ces
informations.

2- Création du package my_turtle :


Apres collecte des données et informations utiles nous allons pouvoir créer notre
nœud qui lui va :

Enseignante : Nour El Houda Gabour


Ecole Nationale Polytechniques 2eme Année Automatique Module de Robotique

1- Etre Subscriber à travers le topic turtle1/pose pour récupérer les positions


actuelles de la tortue au cours du temps
2- Ecrire un petit programme à base de régulateur P qui va comparer entre la
position actuelle et la position désirée et envoyer des vitesses
proportionnelles aux erreurs de position.
3- Enfin être Publisher à travers le topic turtle1/cmd_vel et ainsi publier les
vitesses calculées.

On doit se positionner à l’intérieur du dossier src de l’espace de travail catkin_ws


pour créer un nouveau package qu’on appellera my_turtle (par exemple).

$ catkin_create_pkg my_turtle roscpp rospy std_msgs

Apres création du package, on se positionne à l’intérieur du dossier src de


my_turtle et nous allons insérer notre nœud.

$ gedit naviguation.cpp

Enseignante : Nour El Houda Gabour


Ecole Nationale Polytechniques 2eme Année Automatique Module de Robotique

Le nœud navigation.cpp contient le programme suivant :

#include <ros/ros.h> while(ros::ok())

#include <ros/package.h> {

#include <geometry_msgs/Twist.h> d_x=goal_x-X;

#include <turtlesim/Pose.h> d_y=goal_y-Y;


d_theta=goal_theta-Theta;

using namespace std;


float v1=K*d_x;
X,Y,Theta,d_x,d_y,d_theta,K=0.2,v1,v2,v3,goal
v2=K*d_y;
_x=5,goal_y=1,goal_theta=10;
v3=K*d_theta;

void position_tortue(const
turtlesim::Pose::ConstPtr& sms) geometry_msgs::Twist cmdvel;
{X=sms->x; cmdvel.linear.x=v1;
Y=sms->y; cmdvel.linear.y=v2;
Theta=sms->theta;} cmdvel.angular.z=v3;
int main(int argc, char **argv)
{ vitesses.publish(cmdvel);
ros::init(argc, argv, "distance");
ros::NodeHandle n,m; ros::spinOnce();
ros::Publisher vitesses= }
n.advertise<geometry_msgs::Twist>("turtle1/c
md_vel", 1); return 0;

ros::Subscriber positions=
m.subscribe("turtle1/pose",1,&position_tortue); }

Enseignante : Nour El Houda Gabour


Ecole Nationale Polytechniques 2eme Année Automatique Module de Robotique

Et enfin nous devons modifier le fichier cmakelists.txt ; vous pouvez rajouter ces
3 lignes telles qu’elles sont à la fin du fichier en question.

# In your cmakelists.txt

add_executable(distance src/navigation.cpp)
target_link_libraries(distance ${catkin_LIBRARIES})
add_dependencies(distance my_turtle_generate_messages_cpp)

Enfin vient le tour de la compilation

# In your catkin workspace


$ catkin_make

Apres compilation et dissipation du ciel nuageux des erreurs nous pouvons


exécuter nos programmes et avoir le résultat suivant :

Enseignante : Nour El Houda Gabour

Vous aimerez peut-être aussi