当前位置:网站首页>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
边栏推荐
- Ambari (VIII) --- ambari integrated impala document (valid for personal test)
- 券商注册开户靠谱吗?安全吗?
- NLP sequence can completely simulate human brain intelligence
- The solution of "user account control to continue, please enter administrator user name and password" appears in win10 Professional Edition
- Uninstall and reinstall the latest version of MySQL database. The test is valid
- HJ prime factor
- What is the lifecycle of automated testing?
- Is it reliable to open a new bond registration account? Is it safe?
- HJ base conversion
- Hash slot of rediscluster cluster cluster implementation principle
猜你喜欢

At 19:00 on Tuesday evening, the 8th live broadcast of battle code Pioneer - how to participate in openharmony's open source contribution in multiple directions

SLAM中常用的雅克比矩阵J

Rediscluster cluster mode capacity expansion node

Activity implicit jump

Kubernetes theoretical basis

异或的应用。(提取出数字中最右侧的1,面试中经常用的到)

三角变换公式

Hash slot of rediscluster cluster cluster implementation principle

Activity隐式跳转

Vagrant installation
随机推荐
Es data export CSV file
HJ成绩排序
Activity implicit jump
Do you know TCP protocol (1)?
【js】-【DFS、BFS应用】-学习笔记
Unity UI shadow component
What is the lifecycle of automated testing?
你了解TCP協議嗎(二)?
ROS 笔记(08)— 服务数据的定义与使用
Upgrade HDP spark to spark 2.4.8 without upgrading ambari
Today's notes 22/1/7
MySQL installation and environment variable configuration
Activity隐式跳转
Resizing node of rediscluster cluster cluster mode
HJ质数因子
Prometheus + grafana + MySQL master-slave replication + host monitoring
Software design of resistance test board
pip 更新到最新的版本
How to configure DDR3 of dm8148
sql主從複制搭建