yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
RDK S600 Developer Kit📖
1.RDK S600 board introduction
  • 1.1 RDK S600 board introduction
  • 1.2 System Flashing
  • 1.3 Hardware Interface Description
  • 1.4 Accessory Installation
  • 1.5 Camera Expansion Board
  • 1.6 MCU Interface Expansion Board
  • 1.7 Precautions for Using the 15.6-inch Screen
  • 1.8 System Boot Modes
2.RDK S600 basic course
  • 2.1 Network Configuration
  • 2.2 Remote Login
  • 2.3 System Update
  • 2.4 Boot Auto-Start Configuration
  • 2.5 RDK Exclusive Command Usage
  • 2.6 Linux Command Usage
  • 2.7 Examples of GPIO Read and Write Operations
  • 2.8 Using the USB Camera
  • 2.9 Solid-state mounting
  • 2.10 SSD expansionnew
3.TogetheROS.Bot Vision Applications
  • 1. About TogetheROS. Bot
  • 2. System Installation
  • 3. Object Detection(YOLO)
  • 4. Image Classification(mobilenetv2)
  • 5. Image Segmentation(mobilenet_unet)
  • 6. Perception Algorithm(BEV)
  • 7. Human Detection and Tracking (Ultralytics YOLO Pose)
4. Offline AI Large Model Development
Offline large model (Text Interaction)
  • 1. AI large model environment deployment
  • 2. Install large model dialogue platform
  • 3. Meta AI Llama 3.2 model
  • 4. Alibaba Cloud Qwen3 model
  • 5. Microsoft Phi-4 mini model
  • 6. DeepSeek - DeepSeek-R1 model
  • 7. Alibaba Cloud Qwen2.5vl Visual Multimodal Large Model
  • 8. Google Gemma3 Visual Multimodal Large Model
  • 9. Lava Visual Multimodal Large Model
  • 10. MiniCPM-V Visual Multimodal Large Model
  • 11. Multimodal visual understand application
  • 12. Multimodal text image application
  • 13. Multimodal visual localization application
  • 14. Multimodal table scanning application
  • 15. Multimodal Autonomous Agent Applications
Offline large model (Voice Interaction)
  • 0. Voice Interaction Hardware Connection (Must Read)
  • 1. Offline speech-to-text (ASR)
  • 2. Offline Text-to-Speech (TTS)
  • 3. AI large model voice interaction
  • 4. Multimodal visual understanding voice interaction
  • 5. Multimodal Text-to-Image application
  • 6. Multimodal video analytics application
  • 7. Multimodal visual localization application
  • 8. Multimodal table scanning application
  • 9. Multimodal autonomous agent application
  • 10. AI Large Model Offline Voice Assistant
5. Online AI Large Model Development
Online large model (Text Interaction)
  • 1.OpenRouter large model API aggregation platform
  • 2.Multimodal visual understand application
  • 3.Multimodal visual localization application
  • 4.Multimodal table scanning application
  • 5.Multimodal autonomous proxy application
Online large model (Voice Interaction)
  • 0.Voice interaction hardware connection (ReadMe)
  • 1.Online speech to text (ASR)
  • 2.Online text to speech (TTS)
  • 3.AI large model voice interaction
  • 4.Multimodal visual understand speech interaction
  • 5.Multimodal visual localization application
  • 6.Multimodal table scanning application
  • 7.Multimodal autonomous proxy application
  • 8.AI large model online voice assistant
6.YOLO26 tutorials
  • 01.YOLO26 environment
  • 02.CLI use
  • 03.Object detection
  • 04.Instance segmentation
  • 05.Pose estimation
  • 06.Image classification
  • 07.Oriented object detection
  • 08.Model conversion
  • 09.Dataset annotation
  • 10.Model training - conversion
  • 11.Model prediction
7.OpenClaw Advanced Development
  • 1. OpenClaw Deployment
  • 2. OpenClaw and WhatsApp Plugin Application
  • 3. OpenClaw TUI Interaction
  • 4. OpenClaw WebChat Interaction
  • 5. OpenClaw Gate Gateway Operation Manual
  • 6. OpenClaw Plugin Function Introduction
  • 7. OpenClaw Tools Introduction
  • 8. OpenClaw ClawHub Introduction (skill Installation)
  • 9.OpenClaw Application - File Management
  • 10.OpenClaw Application - Browser Control
  • 11.OpenClaw Application - Camera
  • 12.OpenClaw Application - Script Execution
  • 13.OpenClaw Application - AI Programming (Peripheral & GPIO Control)
  • 14. OpenClaw Application - Dedicated AI Assistant
  • 15. OpenClaw Configure Web Search Capability
8.ROS2 basic course
  • 1.Introduction to ROS2
  • 2.ROS2 install Jazzy
  • 3.ROS2 development environment
  • 4.ROS2 workspace
  • 5.ROS2 function package
  • 6.ROS2 node
  • 7.ROS2 topic communication
  • 8.ROS2 service communication
  • 9.ROS2 action communication
  • 10.ROS2 custom interface message
  • 11.ROS2 parameter service case
  • 12.ROS2 meta-function package
  • 13.ROS2 distributed communication
  • 14.ROS2 DDS
  • 15.ROS2 time related API
  • 16.ROS2 common command tools
  • 17.ROS2 rviz2 use
  • 18.ROS2 rqt toolbox
  • 19.ROS2 Launch startup file configuration
  • 20.ROS2 recording and playback tool
  • 21.ROS2 URDF model
  • 22.ROS2 Gazebo simulation platform
  • 23.ROS2 TF2 coordinate transformation
Download
  • System_File
  • Code
  • 3D_Model_File
  • Tools_Software
Download ZIP

Welcome to RDK S600 Developer Kit repository

8.ROS2 service communication

8. ROS2 Service Communication

Note: The accompanying reference video uses the ROS Humble version, for reference only

1. Service Communication Overview

Service communication is a request-response communication model. In communication, the client sends request data to the server, and the server responds with results to the client.

Client/Server model:

image8

From the perspective of service implementation mechanism, this ask-and-answer form is called the Client/Server model, abbreviated as CS model. When the client needs certain data, it sends a request message for a specific service. After the server receives the request, it processes and sends back a response message.

This communication mechanism is also common in real life, such as the web pages we browse. At this time, your computer browser is the client. Through domain names or various operations, it sends requests to the website server. After the server receives the request, it returns the page data to be displayed.

 

2. Create New Package

  • In the workspace src directory:

ros2 pkg create pkg_service --build-type ament_python --dependencies rclpy --node-name server_demo

 

After executing the above command, the pkg_service package will be created, along with a server_demo node, and the related configuration files will already be set up.

 

3. Service Server Implementation

3.1 Create Service Server

Next, edit [server_demo.py] to implement the service server functionality. Add the following code:

​x
# Import related library files
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts

class Service_Server(Node):
    def __init__(self,name):
        super().__init__(name)
        # Create a service server using create_service function with parameters:
        # service data type, service name, service callback function (the service content)
        self.srv = self.create_service(AddTwoInts, '/add_two_ints', self.Add2Ints_callback)
    # The service callback function adds two integers and returns the result
    def Add2Ints_callback(self,request,response):
        response.sum = request.a + request.b
        print("response.sum = ",response.sum)
        return response
def main():
    rclpy.init()
    server_demo = Service_Server("publisher_node")
    rclpy.spin(server_demo)
    server_demo.destroy_node()                     # Destroy node object
    rclpy.shutdown()                               # Shutdown ROS2 Python interface

Key point: Look at the service callback function Add2Ints_callback. Besides self, the parameters are request and response. The request contains the parameters needed for the service, and the response contains the service feedback result. request.a and request.b are the content of the request part, and response.sum is the content of the response part. First, let's look at what the AddTwoInts data type looks like.

  • You can use the following command to view:

xxxxxxxxxx
ros2 interface show example_interfaces/srv/AddTwoInts

image-20231023183333410

"---" divides the data type into two parts. The upper part represents the request, and the lower part represents the response. Each part has its own variables, such as int64 a and int64 b. Therefore, when passing parameters, you need to specify the values for a and b. Similarly, for the feedback result, you need to specify the value for sum.

 

3.2 Edit Configuration File

  • Open setup.py and add to the console_scripts list:

xxxxxxxxxx
'server_demo = pkg_service.server_demo:main',

image-20231023183130612

 

3.3 Build Package

  • Build the package:

xxxxxxxxxx
colcon build --packages-select pkg_service

image-20250905121820983

 

3.4 Run Program

  • Refresh environment variables and run the node:

xxxxxxxxxx
ros2 run pkg_service server_demo

image-20250905121914903

 

After running, since the service is not called, there is no feedback data. You can call the service via command line. First, query what services are currently available. Enter in another terminal:

xxxxxxxxxx
ros2 service list

image-20231023183459015

/add_two_ints is the service we need to call. Use the following command to call it:

xxxxxxxxxx
ros2 service call /add_two_ints example_interfaces/srv/AddTwoInts "{a: 1,b: 4}"

Here we set a to 1 and b to 4, which means calling the service to calculate the sum of 1 and 4:

image-20231023183636466

As shown in the image, after calling the service, the returned result is 5. The terminal running the service server also prints the returned value.

4. Client Implementation

4.1 Create Client

Create a new file [client_demo.py] in the same directory as [server_demo.py]:

image-20231023184928672

Next, edit [client_demo.py] to implement the client functionality. Add the following code:

xxxxxxxxxx
# Import related libraries
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts

class Service_Client(Node):
    def __init__(self,name):
        super().__init__(name)
        # Create client using create_client function with parameters:
        # service data type, service topic name
        self.client = self.create_client(AddTwoInts,'/add_two_ints')
        # Loop waiting for server to start successfully
        while not self.client.wait_for_service(timeout_sec=1.0):
            print("service not available, waiting again...")
        # Create service request data object
        self.request = AddTwoInts.Request()

    def send_request(self):
        self.request.a = 10
        self.request.b = 90
        # Send service request
        self.future = self.client.call_async(self.request)

def main():
    rclpy.init() # Node initialization
    service_client = Service_Client("client_node") # Create object
    service_client.send_request() # Send service request
    while rclpy.ok():
        rclpy.spin_once(service_client)
        # Check if data processing is complete
        if service_client.future.done():
            try:
                # Get and print service feedback information
                response = service_client.future.result()
                print("service_client.request.a = ",service_client.request.a)
                print("service_client.request.b = ",service_client.request.b)
                print("Result = ",response.sum)
            except Exception as e:
                service_client.get_logger().info('Service call failed %r' % (e,))
        break
    service_client.destroy_node()
    rclpy.shutdown()

 

4.2 Edit Configuration File

  • Open setup.py and add to the console_scripts list:

xxxxxxxxxx
'client_demo = pkg_service.client_demo:main'

image-20231023185118116

 

4.3 Build Package

xxxxxxxxxx
colcon build --packages-select pkg_service

image-20250905121820983

 

4.4 Run Program

  • Refresh environment variables and run the node:

xxxxxxxxxx
# Start service server node
ros2 run pkg_service server_demo
# Start client node
ros2 run pkg_service client_demo

image-20250905122940643

 

Run the service server first, then run the client. The client provides a=10, b=90. The service server calculates the sum, and the result is 100. The result is printed in both terminals.

ROS2 topic communication
ROS2 action communication

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文