yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
Transbot SE📖
01.Introduction to Transbot SE
  • 01. Introduction to Transbot SE
  • 02. Precautions for use and battery safety
  • 03. First Trial
02.First Trial
  • 2.1.APP control
  • 2.2.USB wireless handle control(Optional)
  • 2.3.Handle video control Transbot(Optional)
  • 2.4.Network configuration tutorial in hotspot mode
03.Hardware control course
  • 3.1About expansion board and update firmware
  • 3.2.Close self-starting process
  • 3.3.Install Transbot library
  • 3.4.Control buzzer and button
  • 3.5.Control PWM servo
  • 3.6.Control bus servo
  • 3.7.Control motor
  • 3.8.Control robot movement
04.Linux operating system
  • 1. Virtual machine installation and use
  • 2. Linux basics
  • 3. Remote control
  • 4. Multi-machine communication configuration
  • 5. Static IP and hotspot mode
  • 6. Web page real-time monitoring
  • 7. Expansion tutorial
  • 8. Write system images
05.Docker couse(For Pi5)
  • 1.Docker overview and docker installation
  • 2.Common commands for docker image containers
  • 3.Docker images deeply understand and publish images
  • 4.Docker hardware interaction and data processing
  • 5.Start the transbot se container
06.ROS basic course
  • 1.ROS introduction
  • 2.Project file structure
  • 3.Common commands and tools
  • 4.Publisher
  • 5.Subscribers
  • 6.Customize topic messages and use
  • 7.Client
  • 8.Server
  • 9.Custom service messages and usage
  • 10.TF release and monitoring
07.OpenCV courses
  • 1. Getting started with Open Source CV
  • 2. Open Source CV geometric transformation
  • 3. Open Source CV image processing and drawing text line segments
  • 4. Open Source CV image beautification
  • 5. Opencv application
  • 6. AR vision
  • 7. AR QR code
  • 8. ROS+Opencv foundation
  • 9. ROS+Opencv application
  • 10. MediaPipe development
08.ROS robot course
  • 1.PID algorithm
  • 2.Basic communication
  • 3.Keyboard control
  • 4.Handle control(Optional)
  • 5.Robot state estimation
  • 6.Data calibration
09.ROS simple camera course
  • 1.HD camera calibration
  • 2.HD camera color tracking
  • 3.HD camera color tracking (robotic arm)
  • 4.HD camera object tracking
  • 5. KCF target tracking
  • 6.HD camera face tracking
  • 7.HD camera robotic arm carrying
  • 8.HD camera Autopilot
10.ROS robotic arm control tutorial
  • 1.MoveIt configuration
  • 2.MoveIt control the real machine
  • 3.MoveIt moves randomly
  • 4.MoveIt kinematics design
  • 5.MoveIt cartesian path
  • 6.MoveIt avoiding
  • 7.MoveIt scene design
  • 8.MoveIt trajectory planning
  • 9.Mediapipe palm control car
  • 10.Mediapipe gesture control robotic arm
  • 11.Mediapipe gesture control car
  • 12.Mediapipe arm attitude control robotic arm
11.ROS multi-robot control(Optional)
  • 1. Multi-robot control(Optional)
  • 2. Multi-robot queue performance(Optional)
  • 3. Multi-robot robot arm dancing(Optional)
12.Deep learning courses
  • 1.KNN recognizes handwritten digits
  • 2.Basic use of TensorFlow
  • 3.Basic use of PyTorch(jetson)
  • 4.yolov5 model training(jetson)
  • 5.yolov5+tensorrt acceleration(jetson)
  • 6.yolov4-tiny
13.Installation Video
  • Part18
  • Part1-6
  • Part7-12
  • Part13.1-13.3.3
  • Part13.4.1-17
14.FAQnew
  • 1.Using your own Jetson board,Transbot-SE cannot start normally
Download
  • APP(iOS/Android)
  • System_File-Pi5
  • System_File-Pi4
  • System_File-Jetson
  • VM_File
  • Appendix
  • Code
  • InstructionManual
  • Jetson_Boot_USB.tar.gz
  • Hardware_Info
Download ZIP

Welcome to Transbot SE repository

9.Custom service messages and usage

9. Custom service messages and usage

9. Custom service messages and usage 9.1 Custom service message 9.1.1 define srv file 9.1.2 Add function package dependencies in package.xml 9.1.3 Add compile options in CMakeLists.txt 9.1.4 Compile and generate language-related files 9.1.5 C++ language implementation 9.1.6 Python language implementation

9.1 Custom service message

Switch to the ~/catkin_ws/src/learning_server function package directory, and then create a new folder named srv to store custom service messages.

9.1.1 define srv file

Switch to the srv directory, create a new blank srv file, and use srv as the suffix to indicate that it is a srv file. Here we take IntPlus.srv as an example, and copy the following code into the srv file just created.

​x
uint8   a 
uint8   b 

--- 
uint8  result 

The composition of the srv file is described here, which is divided into upper and lower parts by the symbol ---, the upper part indicates the request and the lower part is the response.

9.1.2 Add function package dependencies in package.xml

xxxxxxxxxx
<build_depend>message_generation</build_depend> 
<exec_depend>message_runtime</exec_depend> 

9.1.3 Add compile options in CMakeLists.txt

xxxxxxxxxx
Add message_generation to find_package 
add_service_files(FILES IntPlus.srv) 
generate_messages(DEPENDENCIES std_msgs) 

9.1.4 Compile and generate language-related files

xxxxxxxxxx
cd ~/catkin_ws 
catkin_make 

9.1.5 C++ language implementation

  1. switch to ~/catkin_ws/src/learning_server/src, create two new cpp files, named IntPlus_server.cpp and IntPlus_client.cpp, and copy the following codes into them respectively,

IntPlus_server.cpp

xxxxxxxxxx
/** 
 * This routine will execute /Two_Int_Plus service, service data type learning_service::IntPlus 
 */ 
 
#include <ros/ros.h> 
#include "learning_server/IntPlus.h" 

// service callback function, input parameter req, output parameter res 
bool  IntPlusCallback(learning_server::IntPlus::Request   & req, 
                    learning_server::IntPlus::Response  & res) 
{ 
    
    ROS_INFO("number 1 is:%d,number 2 is:%d ", req.a, req.b); // Display request data 

    res.result  =  req.a  +  req.b; // The feedback result is the sum of the two numbers 

    return  res.result; 
} 

int  main(int  argc, char  ** argv) 
{ 
   
    ros::init(argc, argv, "IntPlus_server"); // ROS node initialization 
    
    ros::NodeHandle  n; // create node handle 

    // Create a server and register the callback function IntPlusCallback 
    ros::ServiceServer  Int_Plus_service  =  n.advertiseService("/Two_Int_Plus", IntPlusCallback); 

    // loop waiting for the callback function 
    ROS_INFO("Ready to caculate."); 
    ros::spin(); 

    return  0; 
} 

IntPlus_client.cpp

xxxxxxxxxx
/* 
 This routine will request /Two_Int_Plus service, service data type learning_service::IntPlus 
Add and sum two integers 
 */ 

#include <ros/ros.h> 
#include "learning_server/IntPlus.h" 
#include <iostream> 
using  namespace  std; 
int  main(int  argc, char**  argv) 
{ 
    int  i, k; 
    cin >> i; 
    cin >> k; 

    ros::init(argc, argv, "IntPlus_client"); // initialize the ROS node 

    
    ros::NodeHandle  node; // create node handle 

    // After discovering the /Two_Int_Plus service, create a service client 
    ros::service::waitForService("/Two_Int_Plus"); 
    ros::ServiceClient  IntPlus_client  =  node.serviceClient < learning_server::IntPlus >("/Two_Int_Plus"); 

    // Initialize the request data for learning_service::IntPlus 
    learning_server::IntPlus  srv; 
    srv.request.a  =  i; 
    srv.request.b   =  k; 

    ROS_INFO("Call service to plus %d and %d", srv.request.a, srv.request.b); // request service call 

    IntPlus_client.call(srv); 

    // Display the result of the service call 
    ROS_INFO("Show the result : %d", srv.response.result); // show the result of the service call 

    return  0; 
} 
  1. modify the CMakeLists.txt file
xxxxxxxxxx
add_executable(IntPlus_server src/IntPlus_server.cpp) 
target_link_libraries(IntPlus_server ${catkin_LIBRARIES}) 
add_dependencies(IntPlus_server ${PROJECT_NAME}_generate_messages_cpp) 

add_executable(IntPlus_client src/IntPlus_client.cpp) 
target_link_libraries(IntPlus_client ${catkin_LIBRARIES}) 
add_dependencies(IntPlus_client ${PROJECT_NAME}_generate_messages_cpp) 
  1. the core part

The implementation process here is the same as before, the main difference is the introduction of header files and the use of custom service files:

The import header file is

xxxxxxxxxx
#include "learning_server/IntPlus.h" 

The front learning_server is the function package name, and the latter IntPlus.h is the header file name generated by the srv file just created

Using a custom service file is

xxxxxxxxxx
client: 
learning_server::IntPlus  srv; 
srv.request.a  =  i; 
srv.request.b   =  k; 
#i, k is the addend input by the terminal 
ros::ServiceClient  IntPlus_client  =  node.serviceClient < learning_server::IntPlus >("/Two_Int_Plus"); 
IntPlus_client.call(srv); 
server: 
ros::ServiceServer  Int_Plus_service  =  n.advertiseService("/Two_Int_Plus", IntPlusCallback); 
bool  IntPlusCallback(learning_server::IntPlus::Request   & req, 
                    learning_server::IntPlus::Response  & res) 
  1. run the program
xxxxxxxxxx
roscore 
rosrun  learning_server  IntPlus_client 
rosrun  learning_server  IntPlus_server 
  1. run the screenshot

image-20220225122525963

  1. program description

After running IntPlus_server, you will be prompted to prepare for calculation; after running IntPlus_client, the terminal will input two integer numbers, then IntPlus_server will calculate the result, return it to IntPlus_client, and then print the result.

9.1.6 Python language implementation

  1. switch to ~/catkin_ws/src/learning_server/script, create two new py files, named IntPlus_server.py and IntPlus_client.py, and copy the following codes into them respectively,

IntPlus_server.py

xxxxxxxxxx
# !/usr/bin/env python 
# -*- coding: utf-8 -*- 
import  rospy 

from  learning_server.srv  import  IntPlus, IntPlusResponse 

 def IntPlusCallback(req): 
    
    rospy.loginfo("Ints: a:%db:%d", req.a, req.b) # show request data 
    
    return  IntPlusResponse(req.a + req.b) # Feedback data 

 def IntPlus_server(): 
    
    rospy.init_node ' IntPlus_server(') # ROS node initialization 

    # Create a server and register the callback function IntPlusCallback 
    s  =  rospy.Service('/Two_Int_Plus', IntPlus, IntPlusCallback) 

    
    print  "Ready to caculate two ints." # Loop waiting for the callback function 

    rospy.spin() 

if  __name__  ==  "__main__" : 
    IntPlus_server() 

IntPlus_client.py

xxxxxxxxxx
# !/usr/bin/env python 
# -*- coding: utf-8 -*- 
import  sys 
import  rospy 
from  learning_server.srv  import  IntPlus, IntPlusRequest 

 def Plus_client(): 
    # ROS node initialization 
    rospy.init_node('IntPlus_client') 

    rospy.wait_for_service('/Two_Int_Plus') 
    try : 
        Plus_client  =  rospy.ServiceProxy('/Two_Int_Plus', IntPlus) 

        response = Plus_client(22, 20) # Request service call, enter request data 

        return  response.result 
    except  rospy.ServiceException, e : 
        print  "failed to call service : %s" % e 

if  __name__  ==  "__main__" : 
    #Service call and display the call result 
    print  "Show two_int_plus result : %s"  %(Plus_client()) 
  1. the core part

Here is mainly to explain how to import the custom service message module and use it:

import

xxxxxxxxxx
server : 
from  learning_server.srv  import  IntPlus, IntPlusResponse 
client : 
from  learning_server.srv  import  IntPlus, IntPlusRequest 

use

xxxxxxxxxx
server: 
s  =  rospy.Service('/Two_Int_Plus', IntPlus, IntPlusCallback) 
return  IntPlusResponse(req.a + req.b) # Feedback data 
client: 
response = Plus_client(12, 20) # Request service call, enter request data 
return  response.result 
  1. run the program

Before running the program, first add executable permissions to the py file

xxxxxxxxxx
sudo chmod a+x IntPlus_server.py 
sudo chmod a+x IntPlus_client.py 

run the program

xxxxxxxxxx
roscore 
rosrun learning_server IntPlus_client.py 
rosrun learning_server IntPlus_server.py 
  1. program operation instructions

What is inconsistent with the C++ version here is that the addend here is set in the program(12 and 20) so after the service is started, the result can be returned immediately.

Server
TF release and monitoring

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/中文