问题描述
我正在构建一个小型 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 (将#修改为@)