0.前提
在上一讲中我提到过该系列是基于宾夕法尼亚大学工程学院的ROS公开课,系列文章将来源于公开课中的课后习题。该系列可以很好的帮助大家更加深入的了解ROS的一些概念。(有效面对HR的提问。)
1. (C++)What is a nodehandle object? Can we have more than one nodehandle objects in a single node?(节点句柄是什么?能有多个节点句柄在一个节点中吗?)
1.What is a nodehandle object?(节点句柄是什么?)
回答:ros::NodeHandle有两个用途——1.提供roscpp程序中内部节点的启动和关闭;2.提供了额外的命名空间解析层,让编写组件更方便(换个说法就是节点句柄就像是节点上的门把手,节点就是那个门)。
2.Can we have more than one nodehandle objects in a single node?(能有多个节点句柄在一个节点中吗?)
回答:顺着上边的回答,我们将节点理解成一个门,节点句柄理解为门把手,那我们就能很快的知道一个门上可以有多个门把手。
3.答案来源
本题答案来源于官方文档:roscpp/Overview/NodeHandles - ROS中文Wiki
2. (Python) Is there a nodehandle object in python? What is the significance of rospy.init node()?(在rospy中有节点句柄吗?rospy.init node()有什么作用?)
1.Is there a nodehandle object in python?(在rospy中有节点句柄吗?)
回答:没有。在rospy中并不需要创建节点句柄。
2.What is the significance of rospy.init node()?(rospy.init node()有什么作用?)
回答:rospy.init node()是用于初始化ROS节点,在rospy中只能有一个节点,所以rospy.init node()也只能调用一次。
3.答案来源
本题答案来源于官方文档:rospy/概述/初始化和关闭 - ROS Wiki
3. (C++)What is ros::spinOnce()? How is it different from ros::spin()?(什么是ros::spinOnce()?ros::spinOnce()和ros::spin()间有什么区别?)
1.What is ros::spinOnce()?(什么是ros::spinOnce()?)
回答:ROS消息的回调函数。
2.How is it different from ros::Spin()?(ros::spinOnce()和ros::spin()间有什么区别?)
回答:ros::spinOnce()进行信息回调后可以执行后续程序;ros::spin()进行信息回调后不会执行后续程序。
3.答案来源
本题答案来源于官方文档:roscpp/概述/回调和旋转 - ROS Wiki
4. (C++)What is ros::rate()? (ros::rate()是什么?)
回答:循环速率函数,控制消息循环速率的。
本题答案来源于官方文档:roscpp/Overview/Time - ROS中文
5. (Python) How do you control callbacks in python for the subscribers? Do you need spin() or spinonce() in python?(在rospy当中如何回调订阅者的消息?是用spin()还是用spinOnce()?)
回答:在rospy当中不存在rospy::spinOnce(),所以只能用ros::spin()
本题答案我在官方文档当中并未找到相关解释。但我在官方代码中得到如下解释:
# spin() simply keeps python from exiting until this node is stopped
rospy::spin()在rospy程序停止前都不会停止。