Robotics StackExchange | Archived questions

Retrieve first message in a topic

Hi,

I need to retrieve the first message from a ros topic and store it in variable or a file. Is there a way to do so?

Thanks in advance!

Asked by fun01 on 2020-08-24 08:35:53 UTC

Comments

Starting rosbag record before starting the node that publishes the required ROS message, might be a way to do it.

Asked by praskot on 2020-08-24 18:24:46 UTC

@fun01 You may also want to check WaitForMessage that will wait for a single message to arrive on a topic. Another possible solution is to have a subscriber and in the callback unsubscribe after the first call.

Asked by Weasfas on 2020-08-25 04:16:05 UTC

Answers

If your node is started before the topic is running, you can create a subscriber and a static boolean in your callback (assuming you're working in C++ and ROS1) :

static bool isFirstTime = true;
static geometry_msgs::Pose firstPose

static void callbackSubscriber(const geometry_msgs::Pose::ConstPtr& msg)
{
    if(isFirstTime)
    {
        isFirstTime = false;
        firstPose = msg;
    }
}

Disclaimer : I haven't tested, just wrote it off to give a global idea. Not sure this is a "clean" solution too.

Asked by Vic on 2022-05-03 08:17:43 UTC

Comments