ROS(ないクラスメソッド)コールバックで公開

参考リンク:

https://answers.ros.org/question/214386/how-to-publish-a-message-in-a-callback-function/ 

 

私の意図は、簡単な操作を行った後、カスタムメッセージを受信し、元のタイムスタンプにアドバタイズ刻印されています。

RPYと呼ばれるカスタムMSG

ヘッダヘッダ
float32ロール
float32ピッチ
float32ヨー

 

talker.cpp

1の#include <ROS / ros.h>
 2の#include <topic_demo / RPY.h>
 3  
4  int型のmain(int型 ARGC、チャー ** ARGV)
 5  {
 6つの      ROS :: INIT(ARGC、ARGV、" rpytalker " )。
7つの     ROS :: NodeHandle NH;
8  
9      topic_demo :: RPY MSG。
10      msg.roll = 1.0 11      msg.pitch = 1.0 12      msg.yaw = 1.0 13の 
14      ROS ::パブリッシャのパブ= nh.advertise <topic_demo :: RPY>(" Rpy_info "1 );
 15の  
16      ROS ::レートloop_rate(2.0 ;)
 。17  
18であり     ながら)(ROS :: OK()
 19。     {
 20は、         // 0.5秒毎に更新され、指数関数的に増殖している
21は          msg.roll = 1.01 * msg.roll;
 22である          msg.pitch = 1.02 * msg.pitch;
 23である          msg.yaw = 1.03 * msg.yaw;
 24  
25          msg.header.stamp = ROS :: ::今の時間(); 
 26である 
27          ROS_INFO("話者:RPY:R =%F、P =%F、Y =%のF 、msg.roll、msg.pitch、msg.yaw);
 28  
29          pub.publish(MSG);
 30  
31          loop_rate.sleep()。
 32      }
 33  
34      戻り 0 ;
 35 }

 

listener.cpp

1  / * 
2   
。3  本明細書RPY読み取り、その後1、元のタイムスタンプに広告を追加する
 。4   
。5  * / 
。6   
。7の#include <ROS / ros.h>
 8の#include <topic_demo / RPY.h>
 9# <std_msgs / Float32.h>含む
 10   
11。 ボイド rpyCallback(CONST topic_demo RPY :: :: ConstPtr&MSG、出版ROS :: * パブ)
 12は 、{ 
 13は     フロートロールmsg- => ロール;
 14      フロートピッチ= msg-> ピッチ。
 15      フロートヨー= msg-> ヨー;
 16   
。17      std_msgs :: H =ヘッダmsg->ヘッダ;
18   
19      ROS_INFO(" リスナーRPY:R =%F、P = F%、yは%F、時間=た:%d " 、ロール、ピッチ、ヨー、h.stamp)。
20   
21      topic_demo :: RPY new_msg。
22      new_msg.roll =ロール+ 1.0 23      new_msg.pitch =ピッチ+ 1.0 24      new_msg.yaw =ヨー+ 1.0 25   
26      new_msg.header = H;
27   
28      pub->公開(new_msg)。// 不能是pub.publish、必须是pub->パブリッシュ
29   
30      (ROS_INFOを"%D:リスナープラスR =%F、P =%F、Yは%F、時間= " ;、new_msg.roll、new_msg.pitch、new_msg.yaw、new_msg.header.stamp)
 31  }
 32   
33  INT(主にINT ARGC、チャー ** ARGV)
 34  {
 35      ROS :: INIT(ARGC、ARGV、" rpylistener " );
 36の     ROS :: NodeHandle N;
 37の      
38      ROS ::パブリッシャパブ= n.advertise <topic_demo :: RPY>(" rpy_info_plus "1 );
 39   
40      //ROS ::サブスクライバサブ= n.subscribe( "rpy_info"、1、rpyCallback)。
41の  
42      ROS ::サブスクライバサブ= n.subscribe <topic_demo :: RPY>(" rpy_info "0、ブースト::バインド(&rpyCallback、_1、&パブ))。
43の  
44      ROS ::スピン()。
45      リターン 0 ;
46 }

 

おすすめ

転載: www.cnblogs.com/shepherd2015/p/12334959.html