在ROS中,回调函数通常是在另一个线程中异步执行的,因此如果您要在主函数中使用消息内容,需要使用ROS提供的同步机制来确保消息已经被接收并处理。
一种常用的方法是使用ROS的spinOnce()函数,它会在当前线程中处理所有已经到达的ROS消息,而不是像spin()函数那样一直等待新消息的到来。当使用spinOnce()函数时,您可以在主函数中定义一个std_msgs::String类型的变量,在回调函数中将其更新,然后在主函数中使用它。以下是一个示例代码:
#include <ros/ros.h>
#include <std_msgs/String.h>
std_msgs::String received_msg; // 定义消息变量
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INF