User Tools

Site Tools


neurali:gazebo_libreria_trasporto

Trasporto messaggi tra client e server

Tutorial originale in lingua inglese: http://gazebosim.org/tutorials?tut=custom_messages&cat=transport

Argomento collegato a ros nodes

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 (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 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

#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();
}
neurali/gazebo_libreria_trasporto.txt · Last modified: 2020/06/08 22:20 (external edit)