ROS初学:订阅以及对发布的补充

该篇博客介绍了如何在ROS环境中创建一个订阅者节点,通过编辑listener.cpp文件并实现回调函数来接收消息。同时,更新CMakeList.txt以编译项目,并强调了运行时先启动发布者后启动订阅者的重要性,以确保数据的正确传递。此外,还提到为了防止订阅者错过数据,可以在发布者循环前添加延迟。

首先在~/demo01_ws/src/learning_communication/src中创立订阅者的cpp文件。

vim listener.cpp

----------------------------------

#include"ros/ros.h"

#include<sstream>

 #include "std_msgs/String.h"
 
   void chatterCallback(const std_msgs::String::ConstPtr &msg){
       ROS_INFO("I heard: [%s]",msg->data.c_str());
   }
 
  int main(int argc, char* argv[]){
      ros::init(argc,argv,"listener");
      ros::NodeHandle n;
      ros::Subscriber sub=n.subscribe("chatter",1000,&chatterCallback);
      //cout<<111;
      //while(ros::ok()){
      //loop_rate.sleep();
      ros::spin();
      //}
      return 0;
  }

 

此时同样修改CMakeList.txt(与发布时同一个)

add_executable(listener src/listener.cpp)

target_link_libraries(listener
  ${catkin_LIBRARIES}
)

add_dependencies(listener ${PROJECT_NAME}_generate_messages_cpp ${catkin_EXPORTED_TARGETS})

之后先进行catkin_make进行编译;对发布和订阅前都要进行source ./devel/setup.bash,之后再进行rosrun learning_communication talker 和rosrun learning_communication listener,注意要先运行发布再运行订阅,同时注意,两者要同时运行

这样基本就能实现发布和订阅了

---------------------------------------------------

补充:因为订阅者在发布者处注册需要时间,所以可能一开始的数据无法接受到,此时我们可以在发布者的cpp文档中的while循环前加上ros::Duration(1).sleep(); 使订阅者有时间注册而不错过数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值