当前位置:网站首页>ROS notes (08) - definition and use of service data
ROS notes (08) - definition and use of service data
2022-06-28 08:03:00 【wohu1104】
1. Service model
The topic model we want to implement is as follows :
2. Custom service implementation
2.1 Definition srv file
In Feature Pack service_client Create one in the directory srv Folder , Create a... In this folder Person.srv file , As shown in the figure below :
Person.srv There is our custom message format in
string name
uint8 age
uint8 sex
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
---
string result
2.2 Add Feature Pack dependencies
stay package.xml Add the following exec_depend Operational dependency :
<exec_depend>message_generation</exec_depend>
<exec_depend>message_runtime</exec_depend>
2.3 Add compile options

find_package(catkin REQUIRED COMPONENTS
geometry_msgs
rospy
std_msgs
turtlesim
message_generation # The new content
add_message_files(
FILES
Person.srv
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES topic_demo
CATKIN_DEPENDS geometry_msgs rospy std_msgs turtlesim message_runtime
# DEPENDS system_lib
)
2.4 Compile and generate language related files
To the root directory of the project catkin_make command
$ catkin_make
Base path: /home/wohu/project/ros/ros_demo
Source space: /home/wohu/project/ros/ros_demo/src
Build space: /home/wohu/project/ros/ros_demo/build
Devel space: /home/wohu/project/ros/ros_demo/devel
Install space: /home/wohu/project/ros/ros_demo/install
####
#### Running command: "make cmake_check_build_system" in "/home/wohu/project/ros/ros_demo/build"
####
####
#### Running command: "make -j12 -l12" in "/home/wohu/project/ros/ros_demo/build"
####
[ 0%] Built target std_msgs_generate_messages_nodejs
[ 0%] Built target std_msgs_generate_messages_lisp
[ 0%] Built target std_msgs_generate_messages_eus
[ 0%] Built target std_msgs_generate_messages_cpp
[ 0%] Built target std_msgs_generate_messages_py
[ 0%] Built target _topic_demo_generate_messages_check_deps_Person
[ 0%] Built target _service_client_generate_messages_check_deps_Person
[ 21%] Generating C++ code from service_client/Person.srv
[ 21%] Built target topic_demo_generate_messages_py
[ 28%] Generating Lisp code from service_client/Person.srv
[ 35%] Generating Python code from SRV service_client/Person
[ 42%] Built target topic_demo_generate_messages_lisp
[ 50%] Generating Javascript code from service_client/Person.srv
[ 57%] Generating EusLisp code from service_client/Person.srv
[ 71%] Built target topic_demo_generate_messages_eus
[ 78%] Built target topic_demo_generate_messages_nodejs
[ 85%] Built target topic_demo_generate_messages_cpp
[ 85%] Built target topic_demo_generate_messages
[ 85%] Built target service_client_generate_messages_lisp
[ 85%] Built target service_client_generate_messages_nodejs
[ 92%] Built target service_client_generate_messages_eus
[100%] Generating Python srv __init__.py for service_client
[100%] Built target service_client_generate_messages_cpp
[100%] Built target service_client_generate_messages_py
[100%] Built target service_client_generate_messages
You can see that code files in various languages will be generated . among Python The relevant code files are in
/devel/lib/python2.7/dist-packages
Under the table of contents 
2.5 Run code
Client code person_client.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# The routine will request /show_person service , Service data type learning_service::Person
import sys
import rospy
from service_client.srv import Person, PersonRequest
def person_client():
# ROS Node initialization
rospy.init_node('person_client')
# Find out /spawn After service , Create a service client , The connection name is /spawn Of service
rospy.wait_for_service('/show_person')
try:
person_client = rospy.ServiceProxy('/show_person', Person)
# Request service call , Enter request data
response = person_client("Tom", 20, PersonRequest.male)
return response.result
except rospy.ServiceException, e:
print "Service call failed: %s"%e
if __name__ == "__main__":
# The service calls and displays the call result
print "Show person result : %s" %(person_client())
Server code person_server.py Code
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# The routine will execute /show_person service , Service data type learning_service::Person
import rospy
from service_client.srv import Person, PersonResponse
def personCallback(req):
# Display request data
rospy.loginfo("Person: name:%s age:%d sex:%d", req.name, req.age, req.sex)
# Feedback data
return PersonResponse("OK")
def person_server():
# ROS Node initialization
rospy.init_node('person_server')
# Create a file called /show_person Of server, Register callback function personCallback
s = rospy.Service('/show_person', Person, personCallback)
# Loop waiting for callback function
print "Ready to show person informtion."
rospy.spin()
if __name__ == "__main__":
person_server()
Run the code command :
Server code :
$ cd ~/catkin_ws
$ catkin_make
$ source ./devel/setup.bash
$ rescore
$ rosrun service_client person_server.py
Ready to show person informtion.
[INFO] [1655723144.945655]: Person: name:Tom age:20 sex:1
[INFO] [1655723149.379382]: Person: name:Tom age:20 sex:1
[INFO] [1655723150.891466]: Person: name:Tom age:20 sex:1
Client code :
$ rosrun service_client person_client.py
response is result: "OK"
Show person result : OK
边栏推荐
猜你喜欢
随机推荐
Is it reliable to register and open an account for stock speculation? Is it safe?
Section 9: dual core startup of zynq
Porting ucosiii to stm32f429
MySQL single table access method
Co process, asyncio, asynchronous programming
Safety training is the greatest benefit for employees! 2022 induction safety training for new employees
Kubernetes cluster command line tool kubectl
图像翻译:UVCGAN: UNET VISION TRANSFORMER CYCLE-CONSISTENT GAN FOR UNPAIRED IMAGE-TO-IMAGE TRANSLATION
Study notes 22/1/10
Do you know TCP protocol (2)?
Evaluation of inverse Polish expression < difficulty coefficient >
ES6 use of return in arrow function
云原生:云计算技术再次升级 开启全面云开发时代
HJ prime factor
asp. Net datalist to display product information and pictures
Is it reliable for securities companies to register and open accounts? Is it safe?
Software design of power control board
Unity-UI-shadow组件
Es data export CSV file
flex布局









