如何解决如何在 ROS2 上的 Kivy GUI 中 rclpy.spin() 订阅者?
我正在构建一个小型 GUI,它将成为我的 ROS2 狡猾系统中的一个节点。我们称之为 gui_node
,它基于 Kivy 框架。我想以编程方式从我的 GUI 代码启动另一个节点 - subscriber
。订阅者订阅一个主题并计算它应该显示在我的 GUI 节点的 Kivy 标签中的频率。
唯一的问题是 gui_node
必须启动其循环才能正常工作 (gui_node.run()
),而 subscriber
需要 rclpy.spin(subscriber)
才能开始订阅该主题。
我的订阅者本身就可以完美运行,Kivy 应用程序也是如此。但是,它们不能一起工作,如下面的代码所示。 Kivy 应用程序显示为黑色,就好像执行的代码没有到达 gui_node.run()
行一样。 如何让这两者在 ROS2 中协同工作?
import rclpy
from rclpy.node import Node
from kivymd.app import MDApp
from kivy.lang import Builder
class Subscriber(Node):
def __init__(self,topic_name):
super().__init__('My_Subscriber')
self.subscription = self.create_subscription(
Image,topic_name,self.listener_callback,10)
self.subscription # prevent unused variable warning
def listener_callback(self,msg):
# some code
class MyApp(MDApp):
def __init__(self,**kwargs):
super().__init__(**kwargs)
self.subscriber = Subscriber('topic')
rclpy.spin(self.subscriber) # <---
self.screen=Builder.load_file('file.kv')
def build(self):
return self.screen
### the rest of the code here ###
def main(args=None):
rclpy.init(args=args)
gui_node = MyApp()
gui_node.run() # <---
rclpy.shutdown()
if __name__ == '__main__':
main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。