参考リンク:
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 }