User Tools

Site Tools


neurali:gazebo_libreria_trasporto

Differences

This shows you the differences between two versions of the page.


Previous revision
neurali:gazebo_libreria_trasporto [2020/06/08 22:20] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Trasporto messaggi tra client e server ======
  
 +Tutorial originale in lingua inglese: http://gazebosim.org/tutorials?tut=custom_messages&cat=transport
 +
 +Argomento collegato a [[neurali:ros nodes]]
 +
 +{{ :neurali:gazebojs_transporting_overview.png?400 |}}
 +
 +La comunicazione tra gzserver e client avviene tramite un sistema di passaggio di messaggi tramite socket di rete (TCP)
 +
 +  * topic è il canale dove viaggia il messaggio (su ROS dice invece che è il contenuto del messaggio)
 +  * message: è il tipo di dato
 +
 +questi sono i termini usati per descrivere un mittente e un destinatario
 +
 +(;;node;; (;;;publisher;;;);;   ;; ) --> topic --> (;;   ;; (;;;;subscriber;;;;) ;;node;;)
 +
 +Questo modello di comunicazione è usato anche all'interno di  ([[neurali:ros nodes|ROS]]): ogni processo (node) può ;;;pubblicare;;; e/o ;;;;sottoscrivere;;;; dei //messaggi// (originati da altri node o da roscore)
 +
 +
 +Vengono fornite delle librerie, come:
 +
 +  #include <gazebo/transport/transport.hh>
 +  #include <gazebo/msgs/msgs.hh>
 +  #include <gazebo/gazebo.hh>
 +
 +dopo aver avviato gazebo, questo comando mostra la lista dei topic, canali che emettono messaggi, che possono essere ricevuti con un subscriber
 +
 +  gz topic -l
 +
 +Il client che riceve i messaggi dal server gazebo (gzserver) può essere avviato come un [[neurali:gazebo  scrivere un plugin|plugin]], ad esempio, un file .so specificato all'interno del file modello .world.
 +
 +===== codice =====
 +
 +
 +https://bitbucket.org/osrf/gazebo/raw/default/examples/stand_alone/listener/listener.cc
 +
 +https://bitbucket.org/osrf/gazebo/raw/default/examples/stand_alone/listener/CMakeLists.txt
 +
 +<code c>
 +#include <gazebo/transport/transport.hh>
 +#include <gazebo/msgs/msgs.hh>
 +#include <gazebo/gazebo.hh>
 +
 +#include <iostream>
 +
 +/////////////////////////////////////////////////
 +// Function is called everytime a message is received.
 +void cb(ConstWorldStatisticsPtr &_msg)
 +{
 +  // Dump the message contents to stdout.
 +  std::cout << _msg->DebugString();
 +}
 +
 +/////////////////////////////////////////////////
 +int main(int _argc, char **_argv)
 +{
 +  // Load gazebo
 +  gazebo::setupClient(_argc, _argv);
 +
 +  // Create our node for communication
 +  gazebo::transport::NodePtr node(new gazebo::transport::Node());
 +  node->Init();
 +
 +  // Listen to Gazebo world_stats topic
 +  gazebo::transport::SubscriberPtr sub = node->Subscribe("~/world_stats", cb); //contiene nome funzione cb!!!
 +
 +  // Busy wait loop...replace with your own code as needed.
 +  while (true)
 +    gazebo::common::Time::MSleep(10);
 +
 +  // Make sure to shut everything down.
 +  gazebo::shutdown();
 +}
 +
 +</code>