理解ROS:基础概念的整理


本文主要是针对一些基本概念的简要记录,后续会不定时更新。

ROS参考学习网站

ros官网api查阅网站:https://docs.ros.org/en/api/
ros Wiki:http://wiki.ros.org/
ros wiki 中文版:http://wiki.ros.org/cn
ros中文社区:http://wiki.ros.org/cn/community
创客智造:https://www.ncnynl.com/

ros::spin()与ros::spinOnce()

这两个函数叫ROS消息回调处理函数,用来处理回调函数的。

  • ros::spin():主程序到这儿就不往下执行了,会继续执行回调函数。(程序结束后,比如按ctrl-c,才会往下执行)。
  • ros::spinOnce():因为只回调一次,所以在调用后还可以继续执行之后的程序。

ros::spin()函数一般不会出现在循环中,因为程序执行到spin()后就不调用其他语句了。ros::spinOnce()的用法相对来说很灵活,但往往需要考虑调用消息的时机,调用频率,以及消息池的大小,这些都要根据现实情况协调好,不然会造成数据丢包或者延迟的错误。

注意:有回调函数的地方一定记得加上这两个函数之一,不然接收不到订阅消息。

ros::ok()

判断ros节点是否正常运行,正常则返回true,使得ros::ok()返回false的形式:

  • SIGINT收到终端(Ctrl-C)信号
  • 另一个同名节点启动,会先中止之前的同名节点
  • ros::shutdown()被调用
  • 所有的ros::NodeHandles被销毁

注意:ros::ok()只判断自己节点,和其他节点独立。

猜你喜欢

转载自blog.csdn.net/QLeelq/article/details/111085177