我在订阅者回调中实现异步服务调用时遇到问题。我在 ROS Answers 上找到了一篇关于这样做的帖子:
但是,此处答案中的示例仅在执行服务调用之前打印订户接收到的数据,而不是其他任何内容,然后在其他地方查找响应。简而言之,我在回调中想要完成的是以下内容:
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