📖 Scenario: You are building a simple ROS (Robot Operating System) service that adds two integers. This service will receive two numbers and return their sum.
🎯 Goal: Create a ROS service definition file named AddTwoInts.srv that defines the request and response structure for adding two integers.
📋 What You'll Learn
Create a service definition file named AddTwoInts.srv
Define two integers named a and b in the request part
Define one integer named sum in the response part
Separate request and response parts with --- line
💡 Why This Matters
🌍 Real World
ROS services allow robots to perform tasks on request, like adding numbers or controlling hardware.
💼 Career
Understanding .srv files is essential for robotics developers working with ROS to define communication between nodes.
Progress0 / 4 steps
1
Create the request part of the service
In the AddTwoInts.srv file, write two lines to define the request part with two integers named a and b.
ROS
Hint
The request part lists the inputs. Use int64 for integers.
2
Add the separator between request and response
Add a line with exactly --- below the request part to separate request and response in AddTwoInts.srv.
ROS
Hint
The separator --- divides request and response parts.
3
Define the response part of the service
Below the separator line ---, define one integer named sum as the response in AddTwoInts.srv.
ROS
Hint
The response part lists the output. Use int64 sum for the result.
4
Complete the AddTwoInts.srv file
Ensure the AddTwoInts.srv file has the request part with int64 a and int64 b, the separator ---, and the response part with int64 sum.
ROS
Hint
Make sure all parts are present exactly as specified.
Practice
(1/5)
1. What is the main purpose of a .srv file in ROS?
easy
A. To define the structure of a service with request and response parts
B. To list all the topics a node subscribes to
C. To specify the launch configuration for nodes
D. To store parameters for the robot
Solution
Step 1: Understand what a .srv file represents
A .srv file defines a service interface in ROS, which includes a request and a response part.
Step 2: Match the purpose to the options
Only To define the structure of a service with request and response parts correctly states that .srv files define the structure of a service with request and response parts.
Final Answer:
To define the structure of a service with request and response parts -> Option A
Quick Check:
.srv files define service structure = C [OK]
Hint: Remember .srv files split request and response with --- [OK]
Common Mistakes:
Confusing .srv files with launch files
Thinking .srv files list topics
Assuming .srv files store parameters
2. Which of the following is the correct syntax to separate request and response fields in a .srv file?
easy
A. Using a colon ':' between request and response
B. Using a comma ',' between request and response
C. Using a semicolon ';' between request and response
D. Using three dashes '---' between request and response
Solution
Step 1: Recall the .srv file format
The .srv file separates request and response fields with three dashes '---'.
Step 2: Identify the correct separator
Only Using three dashes '---' between request and response correctly uses '---' to separate the two parts.
Final Answer:
Using three dashes '---' between request and response -> Option D
Quick Check:
Request and response separated by --- = A [OK]
Hint: Look for '---' as the separator in .srv files [OK]
Common Mistakes:
Using commas or semicolons instead of ---
Confusing with YAML or JSON syntax
Missing the separator line entirely
3. Given this .srv file content:
int32 a
int32 b
---
int32 sum
What will the response contain when the service is called with request values a=3 and b=4 if the service adds them?
medium
A. sum = 12
B. sum = 34
C. sum = 7
D. sum = 0
Solution
Step 1: Understand the request and response fields
The request has two integers a and b; the response has one integer sum.
Step 2: Apply the service logic
The service adds a and b, so sum = 3 + 4 = 7.
Final Answer:
sum = 7 -> Option C
Quick Check:
3 + 4 = 7 [OK]
Hint: Add request fields to get response sum [OK]
Common Mistakes:
Concatenating numbers as strings
Multiplying instead of adding
Returning zero by mistake
4. Identify the error in this .srv file:
float64 x
float64 y
float64 z
---
float64 result
medium
A. No error, this is a valid .srv file
B. Response field should be on the same line as request fields
C. Missing separator '---' between request and response
D. Request fields must be integers, not float64
Solution
Step 1: Check the separator
The separator '---' is present between request and response fields.
Step 2: Validate field types and format
Using float64 for request and response fields is valid in .srv files.
Final Answer:
No error, this is a valid .srv file -> Option A
Quick Check:
Correct separator and valid types = A [OK]
Hint: Look for '---' and valid types to confirm syntax [OK]
Common Mistakes:
Thinking separator is missing when it is present
Believing response must be on same line
Assuming only integers allowed
5. You want to define a service that takes a string command and an integer timeout as request, and returns a boolean success and a string message as response. Which of these .srv files correctly defines this?
hard
A. string command
int32 timeout
---
bool success, string message
B. string command
int32 timeout
---
bool success
string message
C. string command
int32 timeout
bool success
string message
D. string command
int32 timeout
---
string message
bool success
Solution
Step 1: Check for correct separator and field order
The request fields are before '---' and response fields after. string command
int32 timeout
---
bool success
string message correctly uses '---' and lists request then response fields.