介绍
在ROS编程中可能有时候需要根据一个节点是否挂起而进行采取一些行动。比如一个终端中通过rosbag play bag_name.bag
来播放包,而在另一个终端中运行数据处理代码。当rosbag
中停止播放,我们也希望另一个终端结束数据处理。
解决思路
import rospy
import rosnode
def check_play_node_isalive():
"""
@Detail: Check whether the rosbag is alive or nor
@ return flag bool True if alive | False if dead
"""
nodeList = rosnode.get_node_names()
num_of_node = len(nodeList) # number of nodes
index = None
for i in range(num_of_node):
if (nodeList[i][:5]=="/play"): ## 实际上,这里你可以采用正则表达式
index = i
if index != None:
return True
else:
return False
if __name__ == "__main__":
rospy.init_node("node_name")
rate = rospy.Rate(100)
while check_play_node_isalive():
#### Do whatever you want to