get_parameter()
.send_request()
to use the parameter value.ros2 run
command.Modify the node
def __init__(self):
super().__init__("fibonacci_client_with_param") # Change node name
self.declare_parameter("number", 10) # Declare parameter with default value 10
self.number = self.get_parameter("number").value # Get parameter value
self.get_logger().info(f"Using Fibonacci number: {self.number}")
Use Parameter Instead of Hardcoded Value):
def send_request(self):
req = Fibonacci.Request()
req.number = self.number # Use parameter value instead of argument
No Hardcoded Value, Uses Parameter Instead):
def main(args=None):
rclpy.init(args=args)
node = FibonacciClient()
node.send_request() # No hardcoded value
rclpy.spin(node)
rclpy.shutdown()
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from my_robot_interfaces.srv import Fibonacci # Import your custom service interface
class FibonacciClient(Node):
def __init__(self):
super().__init__("fibonacci_client_with_param") #change name **important**
# 1. Declare a parameter named "number" with a default value of 10.
self.declare_parameter("number", 10)
# 2. Retrieve the parameter value.
self.number = self.get_parameter("number").value
self.get_logger().info(f"Using Fibonacci number: {self.number}")
# 3. Create the service client.
self.client = self.create_client(Fibonacci, "fibonacci")
while not self.client.wait_for_service(timeout_sec=1.0):
self.get_logger().info("Fibonacci Service not available, waiting...")
self.get_logger().info("Fibonacci Service available")
def send_request(self):
req = Fibonacci.Request()
# 4. Use the parameter value in the request.
req.number = self.number
future = self.client.call_async(req)
while rclpy.ok():
rclpy.spin_once(self)
if future.done():
try:
response = future.result()
except Exception as e:
self.get_logger().error(f"Service call failed: {e}")
else:
self.get_logger().info(f"Fibonacci of {self.number} is {response.fibonacci_number}")
break
def main(args=None):
rclpy.init(args=args)
node = FibonacciClient()
node.send_request()
rclpy.spin(node)
rclpy.shutdown()
if __name__ == "__main__":
main()