【ROS进阶】常用函数 您所在的位置:网站首页 ros意思 【ROS进阶】常用函数

【ROS进阶】常用函数

#【ROS进阶】常用函数| 来源: 网络整理| 查看: 265

(一)ros::ok()

用于检查系统状态,适用于在while循环中判断状态 语法:

while(ros::ok()) { //... }

ros::ok()在以下几种情况下会返回false:

1、按下Ctrl-C时。 2、我们被一个同名同姓的节点从网络中踢出。 3、ros::shutdown()被应用程序的另一部分调用。 4、所有的ros::NodeHandles都被销毁了。 5、一旦ros::ok()返回false,所有的ROS调用都会失败 (二)ros::Rate

用于设置循环频率,适用于Publisher程序无限循环 ros::Rate对象可以允许你指定自循环的频率

ros::Rate loop_rate(10);//10Hz //... loop_rate.sleep(); (三)ros::spin()和ros::spinOnce()

用于处理ROS的回调函数,适用于Subscriber处理回调数据。 两者区别在于ros::spin()调用后不会再返回,而ros::spinOnce()在调用后还可以继续执行之后的程序。 ros::spin()用于非循环场景,ros::spinOnce()用于有循环的场景。

什么时候用ros::spin()和ros::spinOnce()呢,如果仅仅只是响应topic,就用ros::spin()。当程序中除了响应回调函数还有其他重复性工作的时候,那就在循环中做那些工作,然后调用ros::spinOnce()。

1、ros::spin()

int main(int argc, char **argv) { ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback); ros::spin(); return 0; }

2、ros::spinOnce() 这句话的意思是监听反馈函数(callback)。只能监听反馈,不能循环。所以当你需要监听一下的时候,就调用一下这个函数。 这个函数比较灵活,尤其是我想控制接收速度的时候。配合ros::ok()效果极佳。

ros::Rate loop_rate(10); while(ros::ok()) { ros::spinOnce(); loop_rate.sleep(); }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有