Bird
Raised Fist0
ROSframework~10 mins

Creating a service server in ROS - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the ROS service library.

ROS
from [1] import Service
Drag options to blanks, or click blank then click option'
Arospy
Broslib
Crosservice
Drosnode
Attempts:
3 left
💡 Hint
Common Mistakes
Importing Service from roslib or rosservice instead of rospy.
Forgetting to import the Service class.
2fill in blank
medium

Complete the code to initialize a ROS node named 'add_two_ints_server'.

ROS
rospy.[1]('add_two_ints_server')
Drag options to blanks, or click blank then click option'
Astart
Binit_node
Attempts:
3 left
💡 Hint
Common Mistakes
Using start or other incorrect function names.
Misspelling init_node.
3fill in blank
hard

Fix the error in the service callback function definition to accept the request parameter.

ROS
def handle_add_two_ints([1]):
Drag options to blanks, or click blank then click option'
Arequest
Breq
Cmsg
Ddata
Attempts:
3 left
💡 Hint
Common Mistakes
Defining the function without any parameters.
Using parameter names that do not match the service request.
4fill in blank
hard

Fill both blanks to create a service server named 'add_two_ints' using the 'AddTwoInts' service type and the callback function.

ROS
service = rospy.Service('[1]', [2], handle_add_two_ints)
Drag options to blanks, or click blank then click option'
Aadd_two_ints
BAddTwoInts
Cadd_two_ints_server
DAddInts
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect service names or types.
Swapping the order of arguments.
5fill in blank
hard

Fill all three blanks to complete the service callback function that returns the sum of two integers from the request.

ROS
def handle_add_two_ints(request):
    sum_result = request.a [1] request.b
    rospy.loginfo(f"Adding [2] and [3]")
    return AddTwoIntsResponse(sum_result)
Drag options to blanks, or click blank then click option'
A+
Brequest.a
Crequest.b
D-
Attempts:
3 left
💡 Hint
Common Mistakes
Using subtraction instead of addition.
Logging incorrect variables.
Forgetting to return the response.

Practice

(1/5)
1. What is the main role of a service server in ROS?
easy
A. To publish messages continuously
B. To wait for requests and send back replies
C. To subscribe to topics and process data
D. To log information to the console

Solution

  1. Step 1: Understand the service server role

    A service server in ROS waits for incoming requests from clients and sends back replies after processing.
  2. Step 2: Differentiate from other ROS nodes

    Unlike publishers or subscribers, a service server handles request-response communication, not continuous data streams.
  3. Final Answer:

    To wait for requests and send back replies -> Option B
  4. Quick Check:

    Service server = request and reply [OK]
Hint: Service servers handle requests and replies, not continuous data [OK]
Common Mistakes:
  • Confusing service servers with publishers
  • Thinking service servers subscribe to topics
  • Assuming service servers only log data
2. Which of the following is the correct way to create a service server in ROS using rospy?
easy
A. server = rospy.Client('service_name', ServiceType, handler_function)
B. server = rospy.Publisher('service_name', ServiceType, handler_function)
C. server = rospy.Subscriber('service_name', ServiceType, handler_function)
D. server = rospy.Service('service_name', ServiceType, handler_function)

Solution

  1. Step 1: Identify the correct rospy function

    The function to create a service server is rospy.Service, which takes the service name, service type, and handler function.
  2. Step 2: Exclude other ROS communication methods

    Publisher and Subscriber are for topics, Client is not a rospy function for servers.
  3. Final Answer:

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

    Service server creation = rospy.Service [OK]
Hint: Use rospy.Service to create service servers, not Publisher or Subscriber [OK]
Common Mistakes:
  • Using rospy.Publisher instead of rospy.Service
  • Confusing service server with subscriber
  • Trying to use a non-existent rospy.Client
3. Given the following ROS service server code snippet, what will be the output when a client sends a request with data=5?
import rospy
from beginner_tutorials.srv import AddTwoInts, AddTwoIntsResponse

def handle_add_two_ints(req):
    return AddTwoIntsResponse(req.a + req.b)

rospy.init_node('add_two_ints_server')
service = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
rospy.spin()
medium
A. The server returns the sum of req.a and req.b
B. The server returns the product of req.a and req.b
C. The server returns the difference of req.a and req.b
D. The server returns an error because of missing return statement

Solution

  1. Step 1: Analyze the handler function

    The function handle_add_two_ints returns the sum of req.a and req.b wrapped in AddTwoIntsResponse.
  2. Step 2: Understand the server behavior on request

    When a client sends a request with data=5 (assuming req.a=5 and req.b is provided), the server replies with their sum.
  3. Final Answer:

    The server returns the sum of req.a and req.b -> Option A
  4. Quick Check:

    Handler returns sum = The server returns the sum of req.a and req.b [OK]
Hint: Handler returns sum of inputs; check return statement carefully [OK]
Common Mistakes:
  • Assuming multiplication instead of addition
  • Forgetting to return a response object
  • Confusing request fields names
4. Identify the error in this ROS service server code snippet:
import rospy
from beginner_tutorials.srv import AddTwoInts, AddTwoIntsResponse

def handle_add(req):
    sum = req.a + req.b

rospy.init_node('add_two_ints_server')
service = rospy.Service('add_two_ints', AddTwoInts, handle_add)
rospy.spin()
medium
A. The handler function does not return a response object
B. The service name is invalid
C. The node is not initialized
D. The service type is incorrect

Solution

  1. Step 1: Check the handler function

    The handler function calculates sum but does not return AddTwoIntsResponse, which is required.
  2. Step 2: Verify other parts of the code

    The service name, node initialization, and service type are correct and valid.
  3. Final Answer:

    The handler function does not return a response object -> Option A
  4. Quick Check:

    Handler must return response [OK]
Hint: Always return a response object from the handler function [OK]
Common Mistakes:
  • Forgetting to return AddTwoIntsResponse
  • Misnaming the handler function
  • Not calling rospy.init_node
5. You want to create a ROS service server that returns the maximum of two integers sent by the client. Which handler function correctly implements this behavior?
hard
A. def handle_max(req): return MaxIntsResponse(max(req.a, req.b))
B. def handle_max(req): return MaxIntsResponse(req.a + req.b)
C. def handle_max(req): if req.a > req.b: return MaxIntsResponse(req.a) else: return MaxIntsResponse(req.b)
D. def handle_max(req): return MaxIntsResponse(min(req.a, req.b))

Solution

  1. Step 1: Understand the requirement

    The server must return the maximum of two integers sent by the client.
  2. Step 2: Evaluate each handler function

    def handle_max(req): return MaxIntsResponse(max(req.a, req.b)) uses max() but assumes MaxIntsResponse accepts a single argument correctly; def handle_max(req): if req.a > req.b: return MaxIntsResponse(req.a) else: return MaxIntsResponse(req.b) explicitly returns the max value using if-else and returns response properly; def handle_max(req): return MaxIntsResponse(req.a + req.b) returns sum, which is incorrect; def handle_max(req): return MaxIntsResponse(min(req.a, req.b)) returns minimum, which is wrong.
  3. Final Answer:

    def handle_max(req): if req.a > req.b: return MaxIntsResponse(req.a) else: return MaxIntsResponse(req.b) -> Option C
  4. Quick Check:

    Correct max logic with proper return = def handle_max(req): if req.a > req.b: return MaxIntsResponse(req.a) else: return MaxIntsResponse(req.b) [OK]
Hint: Use if-else to return max value wrapped in response [OK]
Common Mistakes:
  • Returning sum instead of max
  • Returning min instead of max
  • Incorrectly using max() without proper response
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