|
29 | 29 | from rai.node import RaiBaseNode
|
30 | 30 | from rai.tools.ros import Ros2BaseInput, Ros2BaseTool
|
31 | 31 | from rai.tools.ros.utils import convert_ros_img_to_base64, convert_ros_img_to_ndarray
|
| 32 | +from rai.utils.ros_async import get_future_result |
32 | 33 | from rai_interfaces.srv import RAIGroundedSam, RAIGroundingDino
|
33 | 34 |
|
34 | 35 | # --------------------- Inputs ---------------------
|
@@ -77,30 +78,10 @@ class GetSegmentationTool(Ros2BaseTool):
|
77 | 78 | def _get_gdino_response(
|
78 | 79 | self, future: Future
|
79 | 80 | ) -> Optional[RAIGroundingDino.Response]:
|
80 |
| - rclpy.spin_once(self.node) |
81 |
| - if future.done(): |
82 |
| - try: |
83 |
| - response = future.result() |
84 |
| - except Exception as e: |
85 |
| - self.node.get_logger().info("Service call failed %r" % (e,)) |
86 |
| - raise Exception("Service call failed %r" % (e,)) |
87 |
| - else: |
88 |
| - assert response is not None |
89 |
| - return response |
90 |
| - return None |
| 81 | + return get_future_result(future) |
91 | 82 |
|
92 | 83 | def _get_gsam_response(self, future: Future) -> Optional[RAIGroundedSam.Response]:
|
93 |
| - rclpy.spin_once(self.node) |
94 |
| - if future.done(): |
95 |
| - try: |
96 |
| - response = future.result() |
97 |
| - except Exception as e: |
98 |
| - self.node.get_logger().info("Service call failed %r" % (e,)) |
99 |
| - raise Exception("Service call failed %r" % (e,)) |
100 |
| - else: |
101 |
| - assert response is not None |
102 |
| - return response |
103 |
| - return None |
| 84 | + return get_future_result(future) |
104 | 85 |
|
105 | 86 | def _get_image_message(self, topic: str) -> sensor_msgs.msg.Image:
|
106 | 87 | msg = self.node.get_raw_message_from_topic(topic)
|
|
0 commit comments