ros学习笔记(3)编写订阅者

ros::init(argc, argv, "listener");

我认为init的作用时给你的节点起一个名字,仅仅是去一个名字,剩下的什么功能也没有,相当于一个空壳。

ros::NodeHandle n;
只有说了这句,n成为了一个nodehandle型的对象,在上面说的壳中,创造出了一个有节点功能的东西(节点句柄),但是这个节点句柄到目前为止还没有发布消息的能力

nodehandle 类下面有很多成员函数,这些成员函数使得n能实现很多功能

ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);

等号后面可以看出,nodehandle包含两个很重要的函数advertise和subscribe

两个函数的共同目的是,通知master我想在话题chatter上发布或订阅消息

master是一个主管谁在发布,谁在订阅的记录。通知master之后,master会给你相应,相当于告诉你你可以在这个话题上发布消息或者从这个话题上订阅消息了

这就是advertise和subscribe的返回值,分别返回一个publisher和subscriber类型的对象,到此为止这个节点才真正有了发布者或订阅者的功能。功能的实现依赖于publisher和subscriber类中包含的成员函数

ros::Publisher 对象有一个 publish() 成员函数可以让你在topic上发布消息

subscriber采用一种类似于中断的模式,初始化完成之后先是ros::spin() 进入自循环,等待消息的到来。到来后就去执行相应的操作,一般是写在另一个子程序之中。例如上面的chattercallback就是一个“中断”子程序。

有关于ros::spin(),参见https://www.cnblogs.com/liu-fa/p/5925381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值