本文主要是针对一些基本概念的简要记录,后续会不定时更新。
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()只判断自己节点,和其他节点独立。