husky

esempio di nodo

#include <ros/ros.h>
#include <geometry_msgs/Velocity.h> //contiene tipi messaggi
#include <sensor_msgs/Joy.h>//contiene tipi messaggi
 
 
class TeleopTurtle  // contenitore di un oggetto nodo
{
public:
  TeleopTurtle(); //costruttore e inizializzatore campi dell'oggetto nodo!!
 
private:
  void joyCallback(const sensor_msgs::Joy::ConstPtr& joy); //legge un joy e pubblica il msg
 
 
  //ros::NodeHandle nh("my_namespace");
  ros::NodeHandle nh_; // oggetto nodo!!!!!!!!!!
 
  int linear_, angular_; // inizializzati a 1 e 2
  double l_scale_, a_scale_;
  ros::Publisher vel_pub_; // conterra'
  ros::Subscriber joy_sub_;
 
};
 
 
TeleopTurtle::TeleopTurtle():
  linear_(1),
  angular_(2)
{
  // i param sono in un dizionario gestito nel server
  nh_.param("axis_linear", linear_, linear_); 
  // legge un param, ma se non lo trova mette un suo default
  nh_.param("axis_angular", angular_, angular_);
  nh_.param("scale_angular", a_scale_, a_scale_);
  nh_.param("scale_linear", l_scale_, l_scale_);
 
  // comunica a master che ci sara' un topic con 1 valore
  // restituisce un Publisher necessario alla successiva pubblicazione
  vel_pub_ = nh_.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1); 
 
 
   // segnala interesse a ricevere su un topic "joy"
   // ogni mess. ricevuto è passato a TeleopTurtle::joyCallback a cui e' passato 
   // l'oggetto nh_
 
//This message should not be changed in place, as it is shared with any other subscriptions to this topic.
  joy_sub_ = nh_.subscribe<sensor_msgs::Joy>("joy", 10, &TeleopTurtle::joyCallback, this);
 
   // ros::Rate loop_rate(10); // la frequenza di pubblicazione in Hz
}
 
void TeleopTurtle::joyCallback(const sensor_msgs::Joy::ConstPtr& joy) //ricez. vera e propria
{
  while (ros::ok())
  {
    geometry_msgs::Twist vel;
    vel.angular = a_scale_*joy->axes[angular_];
    vel.linear = l_scale_*joy->axes[linear_];
    vel_pub_.publish(vel);
 
    // std_msgs::String msg; // per avere un testo come messaggio
    // msg.data = "hello world " + parole;
    // ROS_INFO("%s", msg.data.c_str()); // printf migliorato...
    // pubblicatore.publish(msg);
 
    loop_rate.sleep();
  }
}
 
int main(int argc, char** argv)
{
  ros::init(argc, argv, "teleop_turtle");
 
  TeleopTurtle teleop_turtle;
 
  ros::spin(); // senza questa la funzione joyCallback non verrebbe chiamata
 
}
  • neurali/ros_esempio_nodo_cpp.txt
  • Last modified: 2018/04/25 07:55
  • (external edit)