Bird
Raised Fist0
ROSframework~5 mins

Request-response communication model in ROS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Request-response communication model in ROS?
It is a way for nodes to communicate where one node sends a request and waits for a reply from another node. This is often used for services in ROS.
Click to reveal answer
beginner
How does a ROS service differ from a topic?
A ROS service uses request-response communication, meaning it waits for a reply. A topic uses publish-subscribe, where messages are sent without waiting for a response.
Click to reveal answer
beginner
What are the two parts of a ROS service?
A service has a request message sent by the client and a response message sent back by the server node.
Click to reveal answer
intermediate
Why is the request-response model useful in robotics?
It allows a node to ask for specific information or action and wait for confirmation, which is important for tasks that need a clear answer or result.
Click to reveal answer
intermediate
What happens if a ROS service server does not respond?
The client will wait until a timeout or failure occurs. This means the request-response model depends on the server being available and responsive.
Click to reveal answer
In ROS, what does a service client do?
ASends a request and waits for a response
BPublishes messages without waiting
CSubscribes to topics
DBroadcasts messages to all nodes
Which ROS communication method uses the request-response model?
AActions
BTopics
CParameters
DServices
What are the two message types in a ROS service?
ARequest and Response
BPublish and Subscribe
CAction and Feedback
DParameter and Value
If a ROS service server is down, what happens to the client request?
AThe client automatically retries forever
BThe client waits until timeout or failure
CThe client switches to topic communication
DThe client ignores the request
Why might you choose a service over a topic in ROS?
AWhen you want to broadcast data continuously
BWhen you want to log data
CWhen you need a direct answer to a specific request
DWhen you want to set parameters
Explain how the request-response communication model works in ROS and why it is useful.
Think about how one node asks and another answers.
You got /5 concepts.
    Describe the difference between ROS topics and services in terms of communication style.
    Compare continuous data flow vs direct question-answer.
    You got /5 concepts.

      Practice

      (1/5)
      1. In ROS, what does the request-response communication model primarily allow?
      easy
      A. One node sends a request and waits for a reply from another node
      B. Nodes continuously publish data without expecting a reply
      C. Nodes broadcast messages to all other nodes simultaneously
      D. Nodes store data locally without communication

      Solution

      1. Step 1: Understand the request-response model in ROS

        This model involves one node sending a request message and waiting for a response from another node.
      2. Step 2: Compare options with this model

        Only One node sends a request and waits for a reply from another node describes this direct ask-and-reply behavior, while others describe different communication types.
      3. Final Answer:

        One node sends a request and waits for a reply from another node -> Option A
      4. Quick Check:

        Request-response = direct ask and reply [OK]
      Hint: Request-response means ask first, then wait for answer [OK]
      Common Mistakes:
      • Confusing request-response with continuous publishing
      • Thinking request-response is broadcasting
      • Assuming no reply is needed
      2. Which of the following is the correct way to define a ROS service server in Python using the request-response model?
      easy
      A. service = rospy.Service('service_name', ServiceType, handler_function)
      B. service = rospy.Publisher('service_name', ServiceType, handler_function)
      C. service = rospy.Subscriber('service_name', ServiceType, handler_function)
      D. service = rospy.Client('service_name', ServiceType, handler_function)

      Solution

      1. Step 1: Recall ROS Python service server syntax

        In ROS, a service server is created using rospy.Service with the service name, type, and handler function.
      2. Step 2: Identify correct function

        Only rospy.Service matches this pattern; Publisher and Subscriber are for topics, Client is not a rospy function.
      3. Final Answer:

        service = rospy.Service('service_name', ServiceType, handler_function) -> Option A
      4. Quick Check:

        Service server uses rospy.Service [OK]
      Hint: Service server uses rospy.Service, not Publisher or Subscriber [OK]
      Common Mistakes:
      • Using Publisher or Subscriber instead of Service
      • Confusing client and server creation
      • Wrong function names like rospy.Client
      3. Given this ROS Python service client code snippet, what will be printed if the service responds with response.result = 42?
      import rospy
      from example.srv import AddTwoInts
      
      def call_service():
          rospy.wait_for_service('add_two_ints')
          try:
              add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
              response = add_two_ints(20, 22)
              print(response.result)
          except rospy.ServiceException as e:
              print("Service call failed", e)
      
      call_service()
      medium
      A. Service call failed
      B. 42
      C. 20
      D. None

      Solution

      1. Step 1: Understand the service client call

        The client waits for the service, calls it with 20 and 22, and expects a response with a 'result' attribute.
      2. Step 2: Analyze the response printing

        The code prints response.result, which is given as 42 in the question.
      3. Final Answer:

        42 -> Option B
      4. Quick Check:

        Print response.result = 42 [OK]
      Hint: Prints the response.result value returned by the service [OK]
      Common Mistakes:
      • Confusing request parameters with response
      • Expecting print of input values instead of response
      • Assuming exception without error
      4. What is wrong with this ROS Python service server code snippet?
      import rospy
      from example.srv import Multiply
      
      def handle_multiply(req):
          return req.a * req.b
      
      rospy.init_node('multiply_server')
      service = rospy.Service('multiply', Multiply, handle_multiply)
      rospy.spin()
      medium
      A. The service type Multiply is not imported correctly
      B. The service name cannot be 'multiply'
      C. The handler must return a response object, not just a number
      D. rospy.spin() is missing

      Solution

      1. Step 1: Check the handler function return type

        In ROS services, the handler must return a response message object, not a raw value.
      2. Step 2: Identify the error in return statement

        Returning req.a * req.b (a number) is incorrect; it should return MultiplyResponse(req.a * req.b) or equivalent.
      3. Final Answer:

        The handler must return a response object, not just a number -> Option C
      4. Quick Check:

        Handler returns response object, not raw value [OK]
      Hint: Handler must return response message object, not raw data [OK]
      Common Mistakes:
      • Returning raw values instead of response objects
      • Forgetting to import response message class
      • Missing rospy.spin() (though present here)
      5. You want to implement a ROS service that returns the sum of two integers only if both are positive; otherwise, it returns zero. Which handler function correctly implements this request-response logic?
      hard
      A. def handle_sum(req): return SumTwoIntsResponse(req.a + req.b)
      B. def handle_sum(req): return SumTwoIntsResponse(req.a + req.b if req.a > 0 or req.b > 0 else 0)
      C. def handle_sum(req): if req.a > 0 or req.b > 0: return SumTwoIntsResponse(req.a + req.b) else: return SumTwoIntsResponse(0)
      D. def handle_sum(req): if req.a > 0 and req.b > 0: return SumTwoIntsResponse(req.a + req.b) else: return SumTwoIntsResponse(0)

      Solution

      1. Step 1: Understand the condition for sum

        The sum should be returned only if both req.a and req.b are positive (greater than zero).
      2. Step 2: Check each option's condition logic

        def handle_sum(req): if req.a > 0 and req.b > 0: return SumTwoIntsResponse(req.a + req.b) else: return SumTwoIntsResponse(0) uses 'and' to check both positive, returning sum or zero correctly. def handle_sum(req): return SumTwoIntsResponse(req.a + req.b if req.a > 0 or req.b > 0 else 0) uses 'or' incorrectly and missing parentheses in ternary. def handle_sum(req): if req.a > 0 or req.b > 0: return SumTwoIntsResponse(req.a + req.b) else: return SumTwoIntsResponse(0) uses 'or' which is wrong logic. def handle_sum(req): return SumTwoIntsResponse(req.a + req.b) always returns sum ignoring condition.
      3. Final Answer:

        def handle_sum(req): if req.a > 0 and req.b > 0: return SumTwoIntsResponse(req.a + req.b) else: return SumTwoIntsResponse(0) -> Option D
      4. Quick Check:

        Both positive check with 'and' = def handle_sum(req): if req.a > 0 and req.b > 0: return SumTwoIntsResponse(req.a + req.b) else: return SumTwoIntsResponse(0) [OK]
      Hint: Use 'and' to check both positive before summing [OK]
      Common Mistakes:
      • Using 'or' instead of 'and' for both positive check
      • Returning sum without condition
      • Incorrect ternary syntax in return
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard