zoukankan      html  css  js  c++  java
  • ros 在callback中publish (不用类的方法)

    参考链接:

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

    我的意图是接收到一个自定义的带时间戳的消息,做简单操作后,再以原来的时间戳发布出去。

    自定义的 msg 叫  RPY

    Header header
    float32 roll
    float32 pitch
    float32 yaw

    talker.cpp

     1 #include <ros/ros.h>
     2 #include <topic_demo/RPY.h>
     3 
     4 int main(int argc, char **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::Publisher pub = nh.advertise<topic_demo::RPY>("rpy_info", 1);
    15  
    16     ros::Rate loop_rate(2.0);
    17 
    18     while (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::Time::now(); 
    26 
    27         ROS_INFO("Talker: 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     return 0;
    35 } 

    listener.cpp

     1 /*
     2  
     3 这里读取 rpy ,然后 加个1, 以原有的 时间戳发布出去
     4  
     5 */
     6  
     7 #include <ros/ros.h>
     8 #include <topic_demo/RPY.h>
     9 #include <std_msgs/Float32.h>
    10  
    11 void rpyCallback(const topic_demo::RPY::ConstPtr &msg , ros::Publisher *pub)
    12 { 
    13     float roll = msg->roll;
    14     float pitch = msg->pitch;
    15     float yaw = msg->yaw;
    16  
    17     std_msgs::Header h = msg->header;
    18  
    19     ROS_INFO("Listener rpy : r = %f, p = %f, y = %f, time: %d", roll, pitch, yaw, h.stamp );
    20  
    21     topic_demo::RPY new_msg;
    22     new_msg.roll = roll + 1.0;
    23     new_msg.pitch = pitch + 1.0;
    24     new_msg.yaw = yaw + 1.0;
    25  
    26     new_msg.header = h;
    27  
    28     pub->publish(new_msg); // 不能是 pub.publish, 必须是 pub->publish
    29  
    30     ROS_INFO("Listener plus : r = %f, p = %f, y = %f, time: %d", new_msg.roll, new_msg.pitch, new_msg.yaw, new_msg.header.stamp );
    31 }
    32  
    33 int main(int argc, char **argv)
    34 {
    35     ros::init(argc, argv, "rpylistener");
    36     ros::NodeHandle n;
    37      
    38     ros::Publisher pub = n.advertise<topic_demo::RPY>("rpy_info_plus", 1);
    39  
    40     // ros::Subscriber sub = n.subscribe("rpy_info", 1, rpyCallback);
    41  
    42     ros::Subscriber sub = n.subscribe<topic_demo::RPY>("rpy_info", 0, boost::bind(&rpyCallback, _1, &pub));
    43  
    44     ros::spin();
    45     return 0;
    46 }
  • 相关阅读:
    Flink Flow
    Excellent JD
    Storm Flow
    Fundmentals in Stream Computing
    SpringBoot
    Generic/Template Programming in Flink
    Talks on C/S
    Thrift-RPC client in Flume
    Aysnc-callback with future in distributed system
    Unity Shader入门教程(二)最基本的Diffuse和Normal样例
  • 原文地址:https://www.cnblogs.com/shepherd2015/p/12334959.html
Copyright © 2011-2022 走看看