ROS2 从订阅者回调中重复调用服务

问题描述

我在订阅者回调中实现异步服务调用时遇到问题。我在 ROS Answers 上找到了一篇关于在此处执行此操作的先前帖子:

https://answers.ros.org/question/302037/ros2-how-to-call-a-service-from-the-callback-function-of-a-subscriber/

然而,这里的答案中的示例只打印订阅者正在接收的数据,在执行服务调用之前不打印其他任何内容,然后在别处寻找响应。简而言之,我在回调中要完成的任务如下:

def subscriber_callback(self):
    for element in msg.list_of_vals:
        self.publish(element)
        while True:
           self.async_service_call()
           while True:
               rclpy.spin_once(node)
               self.read_response()
               # break on response
           # break when response is desired value

我仍然在我的 rclpy.spin(node) 函数调用 main(),当我运行它时,它挂在 rclpy.spin_once 上。我意识到这可能是因为 rclpy 已经从 main() 函数开始旋转,但是我还能如何启动节点?我尝试在发布的链接中创建一个内部 spin() 函数,但它再次挂在 rclpy.spin_once 上。

任何想法或帮助将不胜感激。我的处理方式可能完全错误,所以我愿意接受所有建议。

我在 Python 中使用 ROS2 Dashing

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)