根据博文https://www.cnblogs.com/liu-fa/p/5925381.html,理解spin()和spinOnce():
先上根据博文修改为自己的测试代码,
消息发送端代码talker.cpp:
#include<ros/ros.h>
#include "std_msgs/String.h"
#include <sstream>
int main(int argc,char **argv)
{
ros::init(argc,argv,"hello_ros");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
//定义消息池最大容量为可以接收 1000个消息
ros::Rate loop_rate(10); //定义发送频率为10Hz(1秒发10次)
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
/**
* 向 Topic: chatter 发送消息, 发送频率为10Hz(1秒发10次),消息池最大容量1000。
*/
chatter_pub.publish(msg);
loop_rate.sleep();//发送一次的周期是0.1s,

本文介绍了ROS中的消息回调处理函数spin()和spinOnce(),包括它们的含义、区别以及使用注意事项。spin()在调用后不再返回,主程序停止执行,而spinOnce()调用后仍能继续执行后续程序。对于spinOnce(),在处理高速消息传输时,需注意控制消息池大小和调用频率,以避免数据丢失或延迟。
最低0.47元/天 解锁文章
595

被折叠的 条评论
为什么被折叠?



