diff --git a/rosbridge_library/src/rosbridge_library/capabilities/call_service.py b/rosbridge_library/src/rosbridge_library/capabilities/call_service.py
index 33f7c1807..0a6fc3d95 100644
--- a/rosbridge_library/src/rosbridge_library/capabilities/call_service.py
+++ b/rosbridge_library/src/rosbridge_library/capabilities/call_service.py
@@ -52,6 +52,12 @@ def __init__(self, protocol):
# Call superclass constructor
Capability.__init__(self, protocol)
+ self.default_timeout = (
+ protocol.node_handle.get_parameter("default_call_service_timeout")
+ .get_parameter_value()
+ .double_value
+ )
+
# Register the operations that this capability provides
call_services_in_new_thread = (
protocol.node_handle.get_parameter("call_services_in_new_thread")
@@ -81,7 +87,7 @@ def call_service(self, message):
fragment_size = message.get("fragment_size", None)
compression = message.get("compression", "none")
args = message.get("args", [])
- timeout = message.get("timeout", 5.0)
+ timeout = message.get("timeout", self.default_timeout)
if CallService.services_glob is not None and CallService.services_glob:
self.protocol.log(
diff --git a/rosbridge_library/test/capabilities/test_call_service.py b/rosbridge_library/test/capabilities/test_call_service.py
index a11ba3662..0ae780201 100755
--- a/rosbridge_library/test/capabilities/test_call_service.py
+++ b/rosbridge_library/test/capabilities/test_call_service.py
@@ -40,6 +40,7 @@ def setUp(self):
self.executor.add_node(self.node)
self.node.declare_parameter("call_services_in_new_thread", False)
+ self.node.declare_parameter("default_call_service_timeout", 5.0)
self.node.declare_parameter("send_action_goals_in_new_thread", False)
# Create service servers with a separate callback group
diff --git a/rosbridge_library/test/capabilities/test_service_capabilities.py b/rosbridge_library/test/capabilities/test_service_capabilities.py
index 4c2d3fdfa..2eda02db5 100755
--- a/rosbridge_library/test/capabilities/test_service_capabilities.py
+++ b/rosbridge_library/test/capabilities/test_service_capabilities.py
@@ -23,6 +23,7 @@ def setUp(self):
self.node = Node("test_service_capabilities")
self.node.declare_parameter("call_services_in_new_thread", False)
+ self.node.declare_parameter("default_call_service_timeout", 5.0)
self.node.declare_parameter("send_action_goals_in_new_thread", False)
self.proto = Protocol(self._testMethodName, self.node)
diff --git a/rosbridge_server/launch/rosbridge_websocket_launch.xml b/rosbridge_server/launch/rosbridge_websocket_launch.xml
index 389b2ff15..1063d9645 100644
--- a/rosbridge_server/launch/rosbridge_websocket_launch.xml
+++ b/rosbridge_server/launch/rosbridge_websocket_launch.xml
@@ -17,6 +17,7 @@
+
@@ -42,6 +43,7 @@
+
diff --git a/rosbridge_server/scripts/rosbridge_websocket.py b/rosbridge_server/scripts/rosbridge_websocket.py
index 49d2a52b6..ad58fca99 100755
--- a/rosbridge_server/scripts/rosbridge_websocket.py
+++ b/rosbridge_server/scripts/rosbridge_websocket.py
@@ -178,6 +178,10 @@ def protocol_parameter_handling(self):
"call_services_in_new_thread", False
).value
+ RosbridgeWebSocket.default_call_service_timeout = self.declare_parameter(
+ "default_call_service_timeout", 5.0
+ ).value
+
RosbridgeWebSocket.send_action_goals_in_new_thread = self.declare_parameter(
"send_action_goals_in_new_thread", False
).value