ROS2 Python call_async() blocked
Hello,
I have a question about the potential reason for a service call from a ROS2 Python node being blocked. The service server is in a separate C++ node. An outline is provided below of each code block. I am observing that when the service is called via the rqt plugin, it successfully displays the response. Furthermore, a printout (not shown here) shows the full service call function on the C++ side is executed. However when it is called from the Python node, it fails to get past the spin_until_future_complete
line. I would appreciate any leads for things to investigate.
Python (client)
def get_waypoints(self):
req = WaypointList.Request()
while not self.cli.wait_for_service(timeout_sec=1.0):
self.node.get_logger().info('Waiting for waypoint service to become available...')
future = self.cli.call_async(req)
rclpy.spin_until_future_complete(self.node, future)
try:
result = future.result()
except Exception as e:
self.node.get_logger().info('Service call failed %r' % (e,))
return result
C++ (server)
void srv_clbk(const std::shared_ptr<custom_msgs::srv::WaypointList::Request> req,
std::shared_ptr<custom_msgs::srv::WaypointList::Response> res) {
res->waypoints = waypoints_;
}
Asked by redtedtezza on 2020-10-09 13:53:37 UTC
Comments