赞
踩
ros::Subscriber subscriber_ = nh_.subscribe(topic_name, buff_size, &CloudSubscriber::msg_callback, this);
参数1: 话题名字
参数2:接收消息队列长度,即可以暂时存储多少个消息。因为如果pub消息很快,回调处理的时间比较长,导致sub的消息不能被及时处理,就会存在队列里。如果存的消息超过队列的长度,那么最早的消息就被扔掉。所以,设定一个很大的值就可以了。
参数3:回调函数。注意:一定要取函数的地址
参数4:如果回调函数是某个类成员函数,则参数4 就是 对象 的地址。如果回调函数是一个全局函数,则 参数4 为空。
ros::Publisher publisher_ = nh_.advertise<nav_msgs::Odometry>(topic_name, buff_size);
参数1:话题名字
参数2:发布消息的队列长度。发布消息给接收消息的话题需要通信时间,如果这个时间比较长,那么发布的消息就暂时存在队列中。总之,设定一个很大的值即可。
ros::spin();
subscriber调用回调函数是需要触发的。即 ros::spinOnce().
- ros::Rate rate(100);// 100 hz ; 为啥不能用ros::spin 因为我们还有除了回调函数之外的其他操作;
- while (ros::ok()) {
- ros::spinOnce();// 这句话必须写在循环内的任意位置都可以,只要运行这句话,就触发按钮,告诉subscriber 调用回调函数; 调用一次,可以处理接受队列中的几个消息?应该是一个消息。
-
- // 自己的一些其他操作
-
- rate.sleep();
- }
如果使用 ros::spin() , 一定要放在最后,因为 ros::spin() 相当于
-
- while (ros::ok()) {
- ros::spinOnce();
- }
什么时候选择 ros::spin() ? 当只有回调函数操作 而 没有其他循环操作时 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。