在另一个Python文件中使用rostopic的变量

0 投票
1 回答
24 浏览
提问于 2025-04-14 16:23

我刚开始使用ROS,想要在一个主题中接收一个整数,然后在另一个Python文件中使用这个整数。listener.py能正确接收到这个整数,但当我在另一个文件中使用它时,它不会更新,只会打印出None。我不知道我哪里出错了。

listener.py

#!/usr/bin/env python

import rospy
from std_msgs.msg import Int32

class listenerPy:

    def __init__(self):
        self.received_integer = None

    def callback(self, data):      

        self.received_integer = data.data
        print(self.received_integer)     
        
    def listener(self):
        rospy.init_node('listener', anonymous=True)        
        rospy.Subscriber('chatter', Int32, self.callback)
        rospy.spin()

if __name__ == '__main__':
    try:
        listener = listenerPy()  # Instantiate the listenerPy class
        listener.listener()  # Call the listener method on the instance
    except rospy.ROSInterruptException:
        pass

其他文件

#!/usr/bin/env python

from listener import listenerPy
from time import sleep

def main():
    
    local_var = listenerPy() 
    while True:
        value = local_var.received_integer
        print(value)
        sleep(1)
            



if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        pass 

1 个回答

0

如果你想让这两个文件独立运行,你需要一些共享的内存。不过在你的例子中,你需要在另一个文件里启动监听器。

def main():
    local_var = listenerPy()
    local_var.listener() 
    while True:
        value = local_var.received_integer
        print(value)
        sleep(1)

但是,你在你的ros节点里调用了rospy.spin(),这个会让程序停住。所以你应该把这个调用从你的节点里去掉。

撰写回答