当前位置:网站首页>ROS 笔记(08)— 服务数据的定义与使用
ROS 笔记(08)— 服务数据的定义与使用
2022-06-28 07:58:00 【wohu1104】
1. 服务模型
我们要实现的话题模型如下:
2. 自定义服务实现
2.1 定义 srv 文件
在功能包 service_client 目录下创建一个 srv 文件夹,在该文件夹中创建一个 Person.srv 文件,如下图所示:
Person.srv 中有我们自定义的消息格式
string name
uint8 age
uint8 sex
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
---
string result
2.2 添加功能包依赖
在 package.xml 中添加以下 exec_depend 运行依赖:
<exec_depend>message_generation</exec_depend>
<exec_depend>message_runtime</exec_depend>
2.3 添加编译选项

find_package(catkin REQUIRED COMPONENTS
geometry_msgs
rospy
std_msgs
turtlesim
message_generation # 新增内容
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 编译生成语言相关的文件
到项目根目录下执行 catkin_make 命令
$ 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
可以看到会生成各种语言的代码文件。其中 Python 相关的代码文件在
/devel/lib/python2.7/dist-packages
目录下
2.5 运行代码
客户端代码 person_client.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将请求/show_person服务,服务数据类型learning_service::Person
import sys
import rospy
from service_client.srv import Person, PersonRequest
def person_client():
# ROS节点初始化
rospy.init_node('person_client')
# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
rospy.wait_for_service('/show_person')
try:
person_client = rospy.ServiceProxy('/show_person', Person)
# 请求服务调用,输入请求数据
response = person_client("Tom", 20, PersonRequest.male)
return response.result
except rospy.ServiceException, e:
print "Service call failed: %s"%e
if __name__ == "__main__":
#服务调用并显示调用结果
print "Show person result : %s" %(person_client())
服务端代码 person_server.py 代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将执行/show_person服务,服务数据类型learning_service::Person
import rospy
from service_client.srv import Person, PersonResponse
def personCallback(req):
# 显示请求数据
rospy.loginfo("Person: name:%s age:%d sex:%d", req.name, req.age, req.sex)
# 反馈数据
return PersonResponse("OK")
def person_server():
# ROS节点初始化
rospy.init_node('person_server')
# 创建一个名为/show_person的server,注册回调函数personCallback
s = rospy.Service('/show_person', Person, personCallback)
# 循环等待回调函数
print "Ready to show person informtion."
rospy.spin()
if __name__ == "__main__":
person_server()
运行代码命令:
服务端代码:
$ 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
客户端代码:
$ rosrun service_client person_client.py
response is result: "OK"
Show person result : OK
边栏推荐
- Configuring MySQL multi instance master-slave synchronization for Linux
- Flex layout
- sql主從複制搭建
- HJ删除字符串中出现次数最少的字符
- Design and implementation of spark offline development framework
- XML serialization backward compatible
- SOC timer and interrupt configuration
- Three step problem of leetcode
- Tencent continued to lay off staff in the second half of the year, and all business groups reduced by at least 10%. What do you think of this? Followers
- Kubernetes cluster command line tool kubectl
猜你喜欢

SOC clock configuration

Configuring MySQL multi instance master-slave synchronization for Linux

asp. Net to search products and realize paging function

Generation and verification of JWT token

ES6 use of return in arrow function

How to configure DDR3 of dm8148

Unity UI shadow component

SOC serial port configuration

Redis persistence problem and final solution

你了解TCP协议吗(二)?
随机推荐
Safety training is the greatest benefit for employees! 2022 induction safety training for new employees
HJ string sort
大型项目中的Commit Message规范化控制实现
The solution of "user account control to continue, please enter administrator user name and password" appears in win10 Professional Edition
Redis master-slave structure and application scenarios
sql分析(查询截取分析做sql优化)
Unity-UI-shadow组件
SQL analysis (query interception analysis for SQL optimization)
Online WPS tool
异或的应用。(提取出数字中最右侧的1,面试中经常用的到)
Recommended system series (Lecture 5): Optimization Practice of sorting model
How to use redis to solve concurrency problems
软件测试与质量期末复习
Three step problem of leetcode
Redis persistence problem and final solution
Upgrade HDP spark to spark 2.4.8 without upgrading ambari
本周二晚19:00战码先锋第8期直播丨如何多方位参与OpenHarmony开源贡献
Spark 离线开发框架设计与实现
Dataset filling data, and the use of rows and columns
Soft exam -- software designer -- afternoon question data flow diagram DFD