0

我在订阅者回调中实现异步服务调用时遇到问题。我在 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

任何想法或帮助将不胜感激。我的处理方式可能会朝着完全错误的方向前进,因此我愿意接受所有建议。

我正在使用 ROS2 Dashing 和 Python

4

0 回答 0