ROS是机器人操作系统的简称,本文介绍ROS应用开发入门,服务数据的定义和使用。客户端和服务端 之间通讯都使用服务数据(service data)。本文先定义一个服务数据,编译成功后,用一个服务端和一个客户端进行验证,客户端也可以直接用rosservice call,这样客户端不用程序。测试验证先是c++代码,然后是python 代码,你也可选择只看一种你熟悉的。
功能包建立
本文是 ROS 应用开发入门 客户端Client的编程 的继续,如果你在那文建立了功能包,这里就不用了,直接跳过本节。
在 ROS 开发应用准备:创建工作空间 一文中建立了ROS工作空间,现在就建立一个功能包:
cd ~/catkin_ws/src
catkin_create_pkg learning_service std_msgs roscpp rospy geometry_msgs turtlesim
自定义服务数据
在工程包目录下新建一个目录srv
cd ~/catkin_ws/src/learning_service
mkdir srv
cd srv
然后新建一个Person.srv 文件
nano Person.srv
文件内容为:
string name
uint8 age
uint8 sex
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
---
string result
我们来看看这个文件的特点:
请求数据和响应数据间用 --- 3个横线 - 隔开,上面是请求数据,下面是响应数据。
上面是发送数据,没有赋值的是数据类型,赋值了的可能是枚举类,所以需要输入3个变量 string name, uint8 age, uint8 sex
下面是响应数据,这里只是一个string
回到工程包目录下,打开并编辑package.xml:
cd ~/catkin_ws/src/learning_service
nano package.xml
添加下面2行:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
添加的位置是参考下面位置,就是<export> 前面注释上面:
<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
<exec_depend>turtlesim</exec_depend>
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
<!-- The export tag contains other, unspecified, tags -->
<export>
然后打开并编辑CMakeLists.txt,总共3处
nano CMakeLists.txt
先在find_package 里添加 message_generation
添加后如下所示:
find_package(catkin REQUIRED COMPONENTS
geometry_msgs
roscpp
rospy
std_msgs
turtlesim
message_generation
)
添加如下代码,也可以作为2行,
add_service_files(
FILES
Person.srv
)
generate_messages(
DEPENDENCIES
std_msgs
)
添加位置参看如下:
## Generate added messages and services with any dependencies listed here
# generate_messages(
# DEPENDENCIES
# geometry_msgs# std_msgs
# )
add_service_file